ESP32C3与串口屏通讯
使用的是ESP32C3合宙经典款(板载ch343芯片的)
提示
以下的教程均基于arduino2.0以上的版本,在低于arduino2.0的版本下编译可能会报错
串口屏怎么下载程序
使用TFT文件下载助手(TFTFileDownload)通过串口下载工程到串口屏
ESP32C3与串口屏的连接方式
ESP32C3代码
注意
以下代码仅为演示代码,用于测试显示屏能实现最基本的通信功能,如果您需要在正式产品中进行使用,请根据自己的需求对代码进行相应的优化和修改,或以自己的方式实现相应的功能
1 //arduino IDE 上的型号选择AirM2M CORE ESP32C3
2 //arduino的GND接串口屏或串口工具的GND,共地
3 //arduino的IO4接串口屏或串口工具的RX
4 //arduino的IO5接串口屏或串口工具的TX
5 //arduino的5V接串口屏的5V,如果是串口工具,不用接5V也可以
6 //根据自己的实际修改对应的TX_Pin和RX_Pin
7 #define TJC Serial
8 #define TX_Pin 4
9 #define RX_Pin 5
10 #define FRAME_LENGTH 7
11 #define LED_PIN0 12
12 #define LED_PIN1 13
13
14 int a;
15 unsigned long nowtime;
16 void setup() {
17 // put your setup code here, to run once:
18 //初始化串口
19 TJC.begin(115200, SERIAL_8N1, RX_Pin, TX_Pin);
20 //TJC.begin(115200);
21 //因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区
22 while (TJC.read() >= 0); //清空串口缓冲区
23 TJC.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面
24 nowtime = millis(); //获取当前已经运行的时间
25
26 //初始化esp32c3上面的LED灯
27 pinMode(LED_PIN0, OUTPUT);
28 pinMode(LED_PIN1, OUTPUT);
29 digitalWrite(LED_PIN0, LOW);
30 digitalWrite(LED_PIN1, LOW);
31
32 }
33
34 void loop() {
35 // put your main code here, to run repeatedly:
36 char str[100];
37 if (millis() >= nowtime + 1000) {
38 nowtime = millis(); //获取当前已经运行的时间
39
40 //用sprintf来格式化字符串,给n0的val属性赋值
41 sprintf(str, "n0.val=%d\xff\xff\xff", a);
42 //把字符串发送出去
43 TJC.print(str);
44
45 //用sprintf来格式化字符串,给t0的txt属性赋值
46 sprintf(str, "t0.txt=\"现在是%d\"\xff\xff\xff", a);
47 //把字符串发送出去
48 TJC.print(str);
49
50
51 //用sprintf来格式化字符串,触发b0的按下事件,直接把结束符整合在字符串中
52 sprintf(str, "click b0,1\xff\xff\xff");
53 //把字符串发送出去
54 TJC.print(str);
55
56 delay(50); //延时50ms,才能看清楚点击效果
57
58 //用sprintf来格式化字符串,触发b0的弹起事件,直接把结束符整合在字符串中
59 sprintf(str, "click b0,0\xff\xff\xff");
60 //把字符串发送出去
61 TJC.print(str);
62
63
64
65 a++;
66 }
67
68 //串口数据格式:
69 //串口数据帧长度:7字节
70 //帧头 参数1 参数2 参数3 帧尾
71 //0x55 1字节 1字节 1字节 0xffffff
72 //当参数是01时
73 //帧头 参数1 参数2 参数3 帧尾
74 //0x55 01 led编号 led状态 0xffffff
75 //例子1:上位机代码 printh 55 01 01 00 ff ff ff 含义:1号led关闭
76 //例子2:上位机代码 printh 55 01 04 01 ff ff ff 含义:4号led打开
77 //例子3:上位机代码 printh 55 01 00 01 ff ff ff 含义:0号led打开
78 //例子4:上位机代码 printh 55 01 04 00 ff ff ff 含义:4号led关闭
79
80 //当参数是02或03时
81 //帧头 参数1 参数2 参数3 帧尾
82 //0x55 02/03 滑动值 00 0xffffff
83 //例子1:上位机代码 printh 55 02 64 00 ff ff ff 含义:h0.val=100
84 //例子2:上位机代码 printh 55 02 00 00 ff ff ff 含义:h0.val=0
85 //例子3:上位机代码 printh 55 03 64 00 ff ff ff 含义:h1.val=100
86 //例子4:上位机代码 printh 55 03 00 00 ff ff ff 含义:h1.val=0
87
88
89 //当串口缓冲区大于等于一帧的长度时
90 while (TJC.available() >= FRAME_LENGTH) {
91 unsigned char ubuffer[FRAME_LENGTH];
92 //从串口缓冲读取1个字节但不删除
93 unsigned char frame_header = TJC.peek();
94 //当获取的数据是包头(0x55)时
95 if (frame_header == 0x55) {
96 //从串口缓冲区读取7字节
97 TJC.readBytes(ubuffer, FRAME_LENGTH);
98 if (ubuffer[4] == 0xff && ubuffer[5] == 0xff && ubuffer[6] == 0xff) {
99 if(ubuffer[1] == 0x01)
100 {
101 //下发的是LED信息
102 sprintf(str, "msg.txt=\"led %d is %s\"\xff\xff\xff", ubuffer[2], ubuffer[3] ? "on" : "off");
103 TJC.print(str);
104 if(ubuffer[2]==0x00)
105 {
106 //设置ESP32C3上的LED灯1
107 digitalWrite(LED_PIN0, ubuffer[3]);
108 }else if(ubuffer[2]==0x01)
109 {
110 //设置ESP32C3上的LED灯2
111 digitalWrite(LED_PIN1, ubuffer[3]);
112 }
113
114 }else if(ubuffer[1] == 0x02)
115 {
116 //下发的是滑动条h0.val的信息
117 sprintf(str, "msg.txt=\"h0.val is %d\"\xff\xff\xff", ubuffer[2]);
118 TJC.print(str);
119
120 }else if(ubuffer[1] == 0x03)
121 {
122 //下发的是滑动条h1.val的信息
123 sprintf(str, "msg.txt=\"h1.val is %d\"\xff\xff\xff", ubuffer[2]);
124 TJC.print(str);
125
126 }
127
128 }
129 } else {
130 TJC.read(); //从串口缓冲读取1个字节并删除
131 }
132 }
133 }
其他参考链接