使用pyserial读取树莓派4B串口数据并写入文件
一、使用设备
- 硬件:win10笔记本一台、树莓派4B一个、两个ZigBee模块,两个USB-TTL转换器
- 软件:win10上的串口调试工具,VNC Viewer(远程连接显示树莓派的图形界面窗口),XShell,树莓派的cutecom,pycharm
二、测试树莓派和win10通信
- 设置ZigBee模块参数,一个主节点一个从节点,此次测试使用一对一传输,无甚区别,当构建传送网络时,主从节点将有较大区别,两个ZigBee模块利用USB-TTL分别插入笔记本和树莓派的USB接口
- win10打开串口调试工具,设置成字符输入,不使用十六进制输入,树莓派打开cutecom,切记需要使用sudo cutecom,cutecom不设置十六进制输出,统一使用字符输入输出,便于查看数据传输结果
- 在win10的串口调试工具中手动输入字符串,回车或者点击发送即可看到cutecom接收数据框中显示win10发送的数据,测试即为成功
三、编写python程序读取树莓派串口数据
测试成功后即可证明串口可以正常运行,此时只用编写程序达到自己预期的期望即可。python的pyserial库可以满足我们对串口开发的需求。代码如下:
import serial import time # ser=serial.Serial("/dev/ttyUSB0",19200,timeout=0.5) #使用USB连接串行口 ser = serial.Serial( port=/dev/ttyUSB0, baudrate=38400, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS ) data = while True: data = ser.read(5) t = time.time() ct = time.ctime(t) print(ct, :) print(data) f = open(test.txt, a) f.writelines(ct) f.writelines(: ) f.writelines(data.decode(utf-8)) f.writelines( ) f.close()
程序输出结果:
四、使用Linux cat指令将串口数据写入到文件
我最开始在网上找到的方法就是这种,但是经过我的一番实践,发现这种方法写入文件的数据很容易出现乱码,我找了许多博客也没能解决,最终只能换用python的解决方案。
这个方法的大概操作:
- 使用stty -F /dev/ttyUSB0 raw 将串口设置成原始模式,就是发送端以原始二进制数据发送,接收端也原封不动的接受发送过来的二进制数据,不会对特殊的字符进行处理,例如转义字符等
- 使用stty speed *** 设置波特率,将串口的参数设置好
最后,我还是使用了pyserial完成了串口数据的重定向,cat指令有待进一步挖掘其功能