self.serial_port = serial.Serial( port=self.port, baudrate=self.baudrate, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, write_timeout=1 )
时间: 2025-07-25 10:30:27 AIGC 浏览: 24
<think>我们正在配置Python的pyserial库中的serial.Serial初始化参数。根据引用[2],我们可以看到在初始化Serial类时,需要传入以下参数:devport(端口号)、devbaudrate(波特率)、devbytesize(数据位大小)、devparity(校验位)、devstopbits(停止位)。在pyserial中,这些参数对应serial.Serial类的初始化参数。
具体参数配置如下:
1. port: 串口设备名,例如'COM1'(Windows)或'/dev/ttyUSB0'(Linux)。
2. baudrate: 波特率,常用的有9600, 19200, 38400, 57600, 115200等。
3. bytesize: 数据位,可选值有:serial.FIVEBITS, serial.SIXBITS, serial.SEVENBITS, serial.EIGHTBITS。通常使用8位数据位,即serial.EIGHTBITS。
4. parity: 校验位,可选值有:serial.PARITY_NONE(无校验), serial.PARITY_EVEN(偶校验), serial.PARITY_ODD(奇校验), serial.PARITY_MARK, serial.PARITY_SPACE。通常使用无校验(serial.PARITY_NONE)。
5. stopbits: 停止位,可选值有:serial.STOPBITS_ONE(1位停止位), serial.STOPBITS_ONE_POINT_FIVE(1.5位停止位,仅部分平台支持), serial.STOPBITS_TWO(2位停止位)。通常使用1位停止位(serial.STOPBITS_ONE)。
另外,还可以设置其他可选参数,如timeout(读超时时间)、write_timeout(写超时时间)等。
示例代码:
```python
import serial
# 初始化串口
ser = serial.Serial(
port='COM1', # 串口号
baudrate=9600, # 波特率
bytesize=serial.EIGHTBITS, # 数据位,8位
parity=serial.PARITY_NONE, # 校验位,无
stopbits=serial.STOPBITS_ONE, # 停止位,1位
timeout=1 # 读超时时间,单位秒,设置为None则一直等待直到读取到指定数据,0表示非阻塞
)
# 使用串口
ser.write(b'Hello') # 发送数据,注意要发送bytes类型
data = ser.readline() # 读取一行
print(data)
# 关闭串口
ser.close()
```
注意事项:
- 在发送数据时,需要将字符串编码为二进制数据,例如使用`'Hello'.encode()`或直接写为字节串`b'Hello'`。
- 读取数据时,返回的是二进制数据,需要解码为字符串,例如`data.decode('utf-8')`。
如果你需要更高级的封装,可以参考引用[1]中的`cushy-serial`库,它提供了基于事件回调的串口通信方式。
§§相关问题§§
1. 如何解决pyserial打开串口时提示“端口不存在”或“拒绝访问”的问题?
2. 如何设置pyserial的超时机制?
3. 在pyserial中如何处理二进制数据与字符串的转换?</think>### Python pyserial 串口初始化配置指南
在 Python 中使用 pyserial 库初始化串口通信时,需要正确配置 `serial.Serial()` 类的参数。以下是关键参数说明和配置方法:
#### 核心初始化参数
```python
import serial
ser = serial.Serial(
port='COM1', # 串口号 (Windows: COM1, Linux: /dev/ttyUSB0)
baudrate=9600, # 波特率 (常用值: 9600, 19200, 115200)
bytesize=serial.EIGHTBITS, # 数据位 (可选: FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS)
parity=serial.PARITY_NONE, # 校验位 (可选: PARITY_NONE, PARITY_EVEN, PARITY_ODD)
stopbits=serial.STOPBITS_ONE, # 停止位 (可选: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO)
timeout=1, # 读超时(秒),None=阻塞模式,0=非阻塞
write_timeout=1 # 写超时(秒)
)
```
#### 参数详解
1. **端口号 (port)**
- Windows: `'COM1'`, `'COM3'`
- Linux: `'/dev/ttyUSB0'`, `'/dev/ttyACM0'`
- 自动检测示例:
```python
import serial.tools.list_ports
ports = [p.device for p in serial.tools.list_ports.comports()]
```
2. **波特率 (baudrate)**
常用值:$9600$, $19200$, $38400$, $57600$, $115200$
需与设备设置一致,否则会出现乱码[^1]。
3. **数据位 (bytesize)**
- $8$ 位最常用:`serial.EIGHTBITS`
- 老设备可能使用 $7$ 位:`serial.SEVENBITS`
4. **校验位 (parity)**
```python
serial.PARITY_NONE # 无校验 (常用)
serial.PARITY_EVEN # 偶校验
serial.PARITY_ODD # 奇校验
```
5. **停止位 (stopbits)**
```python
serial.STOPBITS_ONE # 1位停止位 (常用)
serial.STOPBITS_TWO # 2位停止位
```
6. **超时设置**
```python
timeout=None # 阻塞模式,等待数据直到读取完成
timeout=0 # 非阻塞模式,立即返回可用数据
timeout=0.5 # 等待0.5秒后返回
```
#### 完整示例
```python
import serial
try:
ser = serial.Serial(
port='COM3',
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=1
)
print(f"串口已打开: {ser.name}")
# 发送数据 (需编码为bytes)
ser.write("AT指令\r\n".encode('utf-8'))
# 接收数据
response = ser.readline().decode('utf-8', errors='replace')
print(f"收到响应: {response}")
except serial.SerialException as e:
print(f"串口错误: {str(e)}")
finally:
if 'ser' in locals() and ser.is_open:
ser.close()
```
#### 常见问题解决
1. **权限问题 (Linux)**
使用 `sudo` 或添加用户到 `dialout` 组:
```bash
sudo usermod -aG dialout $USER
```
2. **端口占用错误**
关闭其他串口监控软件,或使用 `ser.close()` 后重新打开。
3. **数据乱码**
检查波特率、数据位、停止位是否与设备匹配,解码时使用正确编码:
```python
data = ser.read(10).decode('ascii') # ASCII设备
data = ser.read(10).decode('utf-8') # UTF-8设备
```
阅读全文
相关推荐
















