树莓派pico使用MicroPython与串口屏通讯

如何安装树莓派pico开发工具和配置请参考 树莓派Pico开发软件安装(Thonny)及烧录(flash)

串口屏怎么下载程序

通过串口下载工程到串口屏

使用TFT文件下载助手(TFTFileDownload)通过串口下载工程到串口屏

通过SD卡下载工程到串口屏

树莓派pico使用MicroPython与串口屏通讯的连接方式

../../_images/raspberrypi_pico.png

树莓派pico使用MicroPython与串口屏通讯代码

注意

以下代码仅为演示代码,用于测试显示屏能实现最基本的通信功能,如果您需要在正式产品中进行使用,请根据自己的需求对代码进行相应的优化和修改,或以自己的方式实现相应的功能

注意

以下代码适用于树莓派pico

thonny只支持utf8编码,因此需要发送汉字时,在新建串口屏工程时请选择UTF8编码,导入字库时也要使用UTF8字库,参考 arduino发送中文时乱码

  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]

其他参考链接

屏幕通电后不断的闪烁(不断重启)