0
点赞
收藏
分享

微信扫一扫

【Python】在 jetson 平台上,使用 python 处理串口设备


文章目录

  • ​​1 确定串口号​​
  • ​​2 配置串口并打开​​
  • ​​3 关闭串口​​
  • ​​4 接收数据​​
  • ​​5 发送数据​​
  • ​​Ref.​​

对于嵌入式设备,串口可谓是最常用的接口。在嵌入式操作系统中,串口通常会作为系统的控制台接口。如果同时掌握了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()​​ 方法,需要了解如下几点:

  1. read() 方法默认一次读取一个字节,可以通过传入参数指定每次读取的字节数。
  2. read() 方法会将读取的内容作为返回值,类型为 bytes。
  3. 在打开串口时,可以为 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()​​ 方法,需要了解如下几点:

  1. write() 方法只能发送 bytes 类型的数据,所以需要对字符串进行 encode 编码。
  2. write() 方法执行完成后,会将发送的字节数作为返回值。
  3. 在打开串口时,可以为 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.

  1. 用 Python 玩转串口(基于 pySerial)
  2. ​​pySerial​​


举报

相关推荐

0 条评论