2025年10月

        UsartGPU串口屏是最常用的串口屏,最近在应用过程中遇到问题,串口语句在GPUMake中显示正常,但移到Arduino后就始终无反应。经过长时间排查,直到查阅了厂家网站www.ai-diy.cn上的文档才发现问题所在,这几个坑真不容易注意到,下次应用一定要注意:

  • 要在串口屏上显示汉字,不能在Arduino IDE中直接引用汉字,因其编码格式为GB2312,而串口屏需要ANSI格式,解决办法是在记事本里以ANSI格式新建一个hz.c,里面写一条语句 const char hz[][32]={"XXX","XXX","XXX",......},每个字或每个词、短语作为数组元素添加其中,注意数组的长度要因放入的汉字多少而定,一个汉字需要两个字节。将其放到ino文件的相同目录中,在编写Arduino程序时将其纳入:#include "hz.c",在发送时用hz[X]引用相应汉字。
  • 发送一堆串口命令时,一定要在最后一条串口数据发送时加上换行符:Serial.println("XXX");否则串口会认为命令还没有接收完毕,不会有任何动作。
  • 如果屏上显示有稀奇古怪的问题,一定是在串口数据编码过程中出现了格式问题,比如少了一个),引用hz[X]时要在其前后加上'。

        搭建方案是让DeepSeek帮助制定的,技术路线是:EMQX作为MQTT服务器,通过设定规则和连接器将接收到的信息传送给TDengine时序数据库存储数据,用Grafana作为数据可视化工具。安装调试过程中颇掉了不少坑,记录如下,以后再部署时避免弯路。

  • EMQX与TDengine安装时注意选择与操作系统适配的版本。
  • TDengine安装后,要启动taos适配服务:systemctl start taosadapter,否则与EMQX的连接无法成功。
  • 使用公众云平台部署时,EMQX要打开1883,18083等端口,TDengine要打开6041端口。
  • EMQX里设置规则时,SQL的语法与MY SQL的语法并不完全一致,有的语句和功能无法直接使用,要查阅它自己的SQL语法手册,TDengine同理。
  • EMQX和TDengine在同一台服务器上部署时,如果不使用Docker,连接器地址要选择127.0.0.1:6041,用Docker部署时则用相应容器的地址。
  • MQTT消息的格式一般会用JSON格式,同一台终端可能同时会发送心跳包(特定字符)以维持连接,在转发存储时设定规则,可以在SQL语句尾部加上 WHERE is_null(payload.XXX)=false 以过滤掉非JSON格式包。
  • TDengine在创建数据库时,一定要加上数据保留周期 KEEP 365,这是保存一年,如果不设定,默认保存10年,服务器空间压力太大。要加上允许修改的参数 UPDATE 1,否则只能整个表删除。
  • TDengine建数据库后先建超级表,把需要记录的字段设定后再建子表,子表继承超级表结构,只用设定TAGS来说明终端的位置和类型等即可。
  • 虽然有人物联网的CAT-1模块在透传模式时只用向其发送JSON数据,但在EMQX接收时会收到包括时间戳、用户ID、QOS等信息在内的完整数据包,可在EMQX规则设定中打开调试模式试验查看。数据戳来源可解析收到的payload.timestamp,也可以直接引用函数NOW。