【Luat-esp32】结合迪文串口屏搭建聊天室

2024-03-15 14:50

本文主要是介绍【Luat-esp32】结合迪文串口屏搭建聊天室,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1 功能分析
  • 2 esp32
    • 2.1 websocket编写
    • 2.2 uart通信
  • 3 迪文串口屏
    • 3.1 绘制键盘
    • 3.2 uart数据分析
      • 3.2.1 串口屏给esp32
      • 3.2.2 esp32给串口屏
      • 3.2.3 esp32编写注意
  • 4 腾讯云
  • 5 小结

前言

在电子发烧友平台上得到了一个迪文的触摸屏试用机会,结合一下esp32和腾讯云,尝试搭建一个基于websocket的聊天室。

【esp32聊天室】迪文屏输入gbk编码的汉字,英文,数字

1 功能分析

在这里插入图片描述

  1. 联网及数据采集:合宙esp32
  2. 文本录入及显示:迪文屏DMG85480F050_01WTC
  3. http/websocket服务器:腾讯云linux服务器
  4. 监听客户端:手机或者平板

2 esp32

esp32功能相对简单,主要分为2个方面:

  1. 连接wifi,编写websocket协议包
  2. uart获取迪文屏传入的文本信息

2.1 websocket编写

推荐梦程大佬的demo,https://gitee.com/dreamcmi/LuatOS-ESP32/blob/master/demo/socket/main.lua
该示例实现了socket,剩下的就是根据websocket协议编写数据包。

使用websocket是因为该协议相对简单,只需要客户端与服务端握手一次即可进行长久的数据传输。

websocket的客户端请求,参考文章:https://www.runoob.com/html/html5-websocket.html
报头内容如下:
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13

数据帧,参考文章:https://www.cnblogs.com/tugenhua0707/p/8542890.html
数据帧需要根据协议对想要上传的数据进行编码

  0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-------+-+-------------+-------------------------------+|F|R|R|R| opcode|M| Payload len |    Extended payload length    ||I|S|S|S|  (4)  |A|     (7)     |             (16/64)           ||N|V|V|V|       |S|             |   (if payload len==126/127)   || |1|2|3|       |K|             |                               |+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +|     Extended payload length continued, if payload len == 127  |+ - - - - - - - - - - - - - - - +-------------------------------+|                               |Masking-key, if MASK set to 1  |+-------------------------------+-------------------------------+| Masking-key (continued)       |          Payload Data         |+-------------------------------- - - - - - - - - - - - - - - - +:                     Payload Data continued ...                :+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|                     Payload Data continued ...                |+---------------------------------------------------------------+

2.2 uart通信

uart示例(lua):https://gitee.com/dreamcmi/LuatOS-ESP32/blob/master/demo/uart/main.lua
连接及测试代码:https://blog.csdn.net/qq_38091632/article/details/122817910

通过esp32的uart1连接到usb转ttl的串口线,使用sscom串口工具调试,验证发送和接收功能。

这里重点在于如何解析串口屏的uart数据包,参见第三章。

3 迪文串口屏

需要实现2点

  1. 绘制键盘
  2. 使用串口屏的uart2传输文本信息

3.1 绘制键盘

安利一份教程:https://v.qq.com/x/page/l0891am92oo.html
这里介绍了如何创建gbk录入。

PS:创建键盘的触摸模块用基础触摸,然后设定键值即可。
在创建gbk录入时可以设定允许数据变量自动上传,这样在键盘按下return时,uart2串口会自动将gbk数据通过uart2传给esp32,esp32再解析即可。

在这里插入图片描述
在这里插入图片描述

3.2 uart数据分析

参考文章:《T5L DGUSII 应用开发指南20200710.pdf》第四章 UART2 串口通讯协议
需要到官网下载该参考文档,介绍很全面。

我们重点了解两个指令,0x82写入和0x83读取

#写
5AA5 05 82 1000 0002 
5AA5 表示:帧头 
05 表示:数据长度 
82 表示:写变量存储器指令 
1000 表示:变量地址(两个字节) 
0002 表示:数据 
2(两个字节) 
解释:通过指令往 0000 地址里面赋值 2,屏上的显示,数据变量整数类型 2#读
5AA5 04 83 1000 01 
5AA5 表示:帧头 
04 表示:数据长度 
83 表示:读数据存储区指令 
1000 表示:变量地址(两个字节) 
01 表示:从 1000 地址开始读 1 个字长度,数据指令最大容许长度 0x7c

需要注意的是,迪文屏的uart数据为gbk编码,到esp32起始还好,依旧用十六进制进行转存即可,到服务器才需要注意编码问题。

esp32的uart数据解析需要按照这里定义的。
我的思路如下:

  1. 将获取的十六进制转为字符型
  2. 检测出8311FF,83是读取,1200是我设定的gbk变量录入地址,不知道为什么获取需要小一个。
  3. 获取其数据长度1600后一字节
  4. 获取gbk编码数据

3.2.1 串口屏给esp32

gbk上传时返回给esp32的uart数据

5AA5 0A 83 11FF 03 5A 01 31 FFFF00

其中5A是一个标志位
01表示数据长度为1
31是"1"的gbk编码,2就是32,数字以此类推。
FFFF是结束标志,可以通过定位FFFF来确认数据截取到哪里。

3.2.2 esp32给串口屏

通过esp32向串口屏写入

5AA5 0C 82 1600 31 0D0A

0C是数据长度,数字和字母为4,汉字为8
1600是显示控件的变量地址
31是数字1
0D0A是回车符

esp32编码依据这个来编写。

3.2.3 esp32编写注意

串口的十六进制数据转字符:string.toHex(num)
字符转16进制num:string.fromHex(str)
计算地址:string.fromHex(‘1600’)

4 腾讯云

需要搭建两个服务器

  1. html:用于手机/平板访问网页
  2. websocket:用于esp32访问

esp32直接建立websocket连接,数据上传给websocket服务端。
手机访问html,由html网页中的js脚本建立与websocket服务端连接。用于监听上报信息。

搭建websocket参考:https://blog.csdn.net/qq_38091632/article/details/123283625
搭建Apache2服务器:https://blog.csdn.net/mashuai720/article/details/83030647

这个就需要工具自己的功能去设计了,需要注意的是编码格式转换,websocket默认是utf8,如果获取的是gbk则需要进行转码,使用npm install iconv-lite安装转码工具。

5 小结

迪文屏的ui设计工具非常好用,不过需要注意CFG文件的2行全部清零,否则会变砖返厂。
其他的比较耗时的是websocket协议编写和uart调试,熟悉了就还好点,好在技术支持和网上的资源较多。

后续再加上其他的功能,看看能否加上语音识别功能,完善下websocket服务端的收发,实现对话功能。

这篇关于【Luat-esp32】结合迪文串口屏搭建聊天室的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812328

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术