树莓派pico使用MicroPython与串口屏通讯
如何安装树莓派pico开发工具和配置请参考 树莓派Pico开发软件安装(Thonny)及烧录(flash)
串口屏怎么下载程序
使用TFT文件下载助手(TFTFileDownload)通过串口下载工程到串口屏
树莓派pico使用MicroPython与串口屏通讯的连接方式
树莓派pico使用MicroPython与串口屏通讯代码
注意
以下代码仅为演示代码,用于测试显示屏能实现最基本的通信功能,如果您需要在正式产品中进行使用,请根据自己的需求对代码进行相应的优化和修改,或以自己的方式实现相应的功能
1 # 树莓派pico的GND接串口屏或串口工具的GND,共地
2 # 树莓派pico的GP0接串口屏或串口工具的RX
3 # 树莓派pico的GP1接串口屏或串口工具的TX
4 # 树莓派pico的5V接串口屏的5V,如果是串口工具,不用接5V也可以
5 import machine
6 import time
7
8 # 一帧的长度
9 FRAME_LENGTH=7
10
11 a=0
12 nowtime=0
13
14 # 这里设置串口 0 的波特率为 115200
15 uart = machine.UART(0, baudrate=115200)
16
17 # 使用 25 号引脚作为 LED 连接引脚
18 led_pin = machine.Pin(25, machine.Pin.OUT)
19
20
21 # 发送结束符
22 def sendEnd():
23 # 要发送的十六进制数据
24 hex_data = [0xff, 0xff, 0xff]
25
26 # 将十六进制数据转换为字节数组并发送
27 uart.write(bytearray(hex_data))
28
29
30 # 定义定时器回调函数
31 def tm0(timer):
32 global a
33 str = "n0.val={}".format(a)
34 uart.write(str)
35 sendEnd()
36
37 str = "t0.txt=\"现在是{}\"".format(a)
38 uart.write(str)
39 sendEnd()
40
41
42 str = "click b0,1"
43 uart.write(str)
44 sendEnd()
45
46 time.sleep(0.05)
47
48 str = "click b0,0"
49 uart.write(str)
50 sendEnd()
51 a+=1
52
53
54 # 创建一个定时器
55 timer = machine.Timer()
56
57
58 # 初始化定时器,每 1 秒钟触发一次回调函数
59 timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=tm0)
60
61 # ubuffer用于存放串口数据
62 ubuffer = []
63
64 while True:
65
66 # 如果串口有数据,全部存放入ubuffer
67 while uart.any():
68 data = uart.read()
69 if data:
70 ubuffer.extend(data)
71
72 # 当ubuffer的长度大于等于一帧的长度时
73 if len(ubuffer) >= FRAME_LENGTH:
74 # 判断帧头帧尾
75 if ubuffer[0] == 0x55 and ubuffer[4] == 0xff and ubuffer[5] == 0xff and ubuffer[6] == 0xff:
76 # 如果下发的是led数据
77 if ubuffer[1] == 0x01:
78 status = ""
79 if ubuffer[3] == 0x01:
80 status = "on"
81 if ubuffer[2] == 0x00:
82 led_pin.value(1)
83 else:
84 status = "off"
85 if ubuffer[2] == 0x00:
86 led_pin.value(0)
87 str = "msg.txt=\"led {} is {}\"".format(ubuffer[2], status)
88 uart.write(str)
89 sendEnd()
90 # 如果下发的是进度条h0的数据
91 elif ubuffer[1] == 0x02:
92 str = "msg.txt=\"h0.val is {}\"".format(ubuffer[2])
93 uart.write(str)
94 sendEnd()
95 # 如果下发的是进度条h1的数据
96 elif ubuffer[1] == 0x03:
97 str = "msg.txt=\"h1.val is {}\"".format(ubuffer[2])
98 uart.write(str)
99 sendEnd()
100 # 删除1帧数据
101 del ubuffer[:FRAME_LENGTH]
102
103
104 else:
105 # 删除最前面的1个数据
106 del ubuffer[0]
其他参考链接