【Python】在 jetson 平台上,使用 python 处理串口设备
对于嵌入式设备,串口可谓是最常用的接口。在嵌入式操作系统中,串口通常会作为系统的控制台接口。如果同时掌握了Python操作串口的方法,那我们就可以利用Python强大的数据处理能力,快速开发出许多好用的工具。
·
对于嵌入式设备,串口可谓是最常用的接口。在嵌入式操作系统中,串口通常会作为系统的控制台接口。如果同时掌握了Python操作串口的方法,那我们就可以利用Python强大的数据处理能力,快速开发出许多好用的工具。
1 确定串口号
import serial
import serial.tools.list_ports
# 获取所有串口设备实例。
# 如果没找到串口设备,则输出:“无串口设备。”
# 如果找到串口设备,则依次输出每个设备对应的串口号和描述信息。
ports_list = list(serial.tools.list_ports.comports())
if len(ports_list) <= 0:
print("无串口设备。")
else:
print("可用的串口设备如下:")
for comport in ports_list:
print(list(comport)[0], list(comport)[1])
jetson@yahboom:~/Desktop/ZJC-PyTest$ python3 test_Serial.py
可用的串口设备如下:
/dev/ttyUSB1 USB Serial
/dev/ttyUSB0 USB Serial
2 配置串口并打开
# 方式:调用函数接口打开串口时传入配置参数
import serial
ser = serial.Serial("/dev/ttyUSB1", 115200) # 打开/dev/ttyUSB1,将波特率配置为115200,其余参数使用默认值
if ser.isOpen(): # 判断串口是否成功打开
print("打开串口成功。")
print(ser.name) # 输出串口号
else:
print("打开串口失败。")
jetson@yahboom:~/Desktop/ZJC-PyTest$ python3 test_Serial.py
打开串口成功。
/dev/ttyUSB1
在使用 serial.Serial() 创建串口实例时,可以传入的参数很多,常用的参数(默认值用红色标记)请参考 用 Python 玩转串口(基于 pySerial)。
3 关闭串口
import serial
ser = serial.Serial("/dev/ttyUSB1", 115200) # 打开 /dev/ttyUSB1,将波特率配置为115200,其余参数使用默认值
if ser.isOpen(): # 判断串口是否成功打开
print("打开串口成功。")
else:
print("打开串口失败。")
ser.close()
if ser.isOpen(): # 判断串口是否关闭
print("串口未关闭。")
else:
print("串口已关闭。")
jetson@yahboom:~/Desktop/ZJC-PyTest$ python3 test_Serial.py
打开串口成功。
串口已关闭。
4 接收数据
关于 read()
方法,需要了解如下几点:
- read() 方法默认一次读取一个字节,可以通过传入参数指定每次读取的字节数。
- read() 方法会将读取的内容作为返回值,类型为 bytes。
- 在打开串口时,可以为 read() 方法配置超时时间。
import serial
# 打开 /dev/ttyUSB1,将波特率配置为115200, 读超时时间为1秒
ser = serial.Serial(port="/dev/ttyUSB1", baudrate=115200, timeout=1)
# 读取串口输入信息并输出。
while True:
com_input = ser.read(10)
if com_input: # 如果读取结果非空,则输出
print(com_input)
ser.close()
注意使用 read() 的时候,如果不进行decode,收到的将是带有b’开头的。
同时还有其他的读取函数,例如
readline()
函数
readlines()
函数
read_until()
函数
x = ser.read() # read one byte
s = ser.read(10) # read up to ten bytes (timeout)
line = ser.readline() # read a '\n' terminated line
更多好用函数可以查看类定义 class serial.Serial
5 发送数据
关于write()
方法,需要了解如下几点:
- write() 方法只能发送 bytes 类型的数据,所以需要对字符串进行 encode 编码。
- write() 方法执行完成后,会将发送的字节数作为返回值。
- 在打开串口时,可以为 write() 方法配置超时时间。
import serial
# 打开 /dev/ttyUSB1,将波特率配置为115200.
ser = serial.Serial(port="/dev/ttyUSB1", baudrate=115200)
# 串口发送 ABCDEFG,并输出发送的字节数。
write_len = ser.write("ABCDEFG".encode('utf-8'))
print("串口发出{}个字节。".format(write_len))
ser.close()
jetson@yahboom:~/Desktop/ZJC-PyTest$ python3 test_Serial.py
串口发出7个字节。
同时还有其他的写入函数,例如
writelines()
函数
更多好用函数可以查看类定义 class serial.Serial
Ref.
更多推荐
已为社区贡献2条内容
所有评论(0)