使用pyserial读取树莓派4B串口数据并写入文件

一、使用设备

  1. 硬件:win10笔记本一台、树莓派4B一个、两个ZigBee模块,两个USB-TTL转换器
  2. 软件:win10上的串口调试工具,VNC Viewer(远程连接显示树莓派的图形界面窗口),XShell,树莓派的cutecom,pycharm

二、测试树莓派和win10通信

  1. 设置ZigBee模块参数,一个主节点一个从节点,此次测试使用一对一传输,无甚区别,当构建传送网络时,主从节点将有较大区别,两个ZigBee模块利用USB-TTL分别插入笔记本和树莓派的USB接口
  1. win10打开串口调试工具,设置成字符输入,不使用十六进制输入,树莓派打开cutecom,切记需要使用sudo cutecom,cutecom不设置十六进制输出,统一使用字符输入输出,便于查看数据传输结果
  2. 在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的解决方案。

这个方法的大概操作:

  1. 使用stty -F /dev/ttyUSB0 raw 将串口设置成原始模式,就是发送端以原始二进制数据发送,接收端也原封不动的接受发送过来的二进制数据,不会对特殊的字符进行处理,例如转义字符等
  2. 使用stty speed *** 设置波特率,将串口的参数设置好

最后,我还是使用了pyserial完成了串口数据的重定向,cat指令有待进一步挖掘其功能

经验分享 程序员 微信小程序 职场和发展