树莓派串口通信 USB串口通信


树莓派串口通信 USB串口通信

如果不知道树莓派怎么使用USB串口通信的,欢迎浏览我的另一篇博客文章:树莓派使用USB串口通信 CH340

这篇文章就以USB串口为例,简单的说下串口通信时常用的几个命令。注意:代码均为Python编写。

准备

  • 树莓派4
  • 两个CH340
  • 串口助手

发送数据

  1. 最基础的发送数据方式

    '''
    ser.write(data)    # 发送数据data,data为字节型
    '''
    import serial
    ser = serial.Serial("/dev/ttyUSB0", 115200)
    ser.flushInput()    # 清除缓存
    ser.write("LightningMaster\r\n".encode())    # 发送数据  \r\n可以实现换行  encode()默认是'utf-8'

    运行这个代码就可以在串口助手上收到数据。

    最基础发送数据

  2. 发送中文

    import serial
    ser = serial.Serial("/dev/ttyUSB0", 115200)
    ser.flushInput()    # 清除缓存
    ser.write("闪电丶教主\r\n".encode('gb2312'))    # 发送数据  \r\n可以实现换行

    发送中文

  3. 发送数据包 十六进制

    import serial
    import struct
    ser = serial.Serial("/dev/ttyUSB0", 115200)
    ser.flushInput()    # 清除缓存
    pack = struct.pack('BBBB', 0xaa, 6, 7, 0x55)    # 将数据打包 格式是unsigned char
    ser.write(pack)

    发送数据包

    这个地方使用到了struct.pack,具体有啥作用可以自行百度去看看,我在这就不多说了。这里的作用就是将数据打包,返回格式是unsigned char 的字节串。

    可以使用这个函数给数据加上“头”“尾”之类的东西。

接收数据

'''
ser.read(num)    # 读取收到的num个字节的数据
ser.inWaiting()    # 可以获取还未读出的数据
'''
import serial
import struct
import time
ser = serial.Serial("/dev/ttyUSB0", 115200)
ser.flushInput()    # 清除缓存
while True:
    count = ser.inWaiting()    # 获取还有多少字符未读
    if count != 0:
        data = ser.read(count)    # 读取数据存到data中
        print(data)    # 打印接受到的数据
    time.sleep(0.1)    # 系统等待

运行代码,使用串口助手发送数据,可以在树莓派中看到返回值。

接收数据

可以看到树莓派成功接收到了数据。

如果想把b’ ‘去掉可以使用代码

print(data.decode('utf-8'))

去掉b''

接收中文的话需要使用下面的代码

print(data.decode('gb2312'))

接收中文

具体为什么使用encode和decode,可以自行查阅Python相关资料。


文章作者: LightningMaster
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LightningMaster !
评论
  目录