树莓派串口通信 USB串口通信
如果不知道树莓派怎么使用USB串口通信的,欢迎浏览我的另一篇博客文章:树莓派使用USB串口通信 CH340
这篇文章就以USB串口为例,简单的说下串口通信时常用的几个命令。注意:代码均为Python编写。
准备
- 树莓派4
- 两个CH340
- 串口助手
发送数据
最基础的发送数据方式
''' 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'
运行这个代码就可以在串口助手上收到数据。
发送中文
import serial ser = serial.Serial("/dev/ttyUSB0", 115200) ser.flushInput() # 清除缓存 ser.write("闪电丶教主\r\n".encode('gb2312')) # 发送数据 \r\n可以实现换行
发送数据包 十六进制
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'))
接收中文的话需要使用下面的代码
print(data.decode('gb2312'))
具体为什么使用encode和decode,可以自行查阅Python相关资料。