python 之serial

本文详细介绍了如何使用PySerial和PyWin32进行串口通信,包括必要的安装步骤和使用注意事项。重点讲解了通过Python实现串口数据接收的方法,包括延时计算、数据完整性保证及通讯结束判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 先按照 pywin32:pywin32是一个非常强大的Python扩展库,是Python调用Windows系统底层功能的最佳接口,不安装这个按照pyserial也没有用

二 按装pyserial

三pyserial使用注意:python提供了n=serial.iswaiting   serial.read(n)来接收数据,serial.iswaiting启动接收,并返回接收数据的长度,然后用read(n)将这指定的数据读出来。但现实中的问题是两者的中间需要加延时(根据波特率计算发送内容所需的时间,这样就不会出现延时过短读出的不全;延时时间长了就会出现前后帧发出的内容重合到一起),此外如果需要判断什么时候串口不活动,可以再serial.iswaiting一直延时(超过几个字符的传送时间,软件延时计数器累加),而在循环体外将计数器清零,在累计的几个字符时间接受的数据长度还为0则认为通讯结束。

while uart.iswaiting ==0 : #作用1:通讯期间只起到触发开始接受,然后延时一定时间直到全部接收完成;作用2:停止传递期间,判断何时通讯结束,相当于超时设计

  time.sleep(t)

  if(++count == delay_5bit)

    count =0

    break

time.sleep(Tmessage) #一帧的传递时间

len=uart.iswaiting

if n:

  uart.read(len)

       #接收处理

else:

  #通讯断开或者串口关闭识别处理

转载于:https://www.cnblogs.com/jieruishu/p/9598376.html

### Python `serial` 库口通信使用指南 #### 1. 安装 `pyserial` 库 在开始使用 `serial` 库之前,需要确保已安装 `pyserial` 模块。可以通过以下命令完成安装: ```bash pip install pyserial ``` 此命令将 `pyserial` 添加到代码库中,使其能够支持口通信功能[^2]。 #### 2. 打开与关闭口 打开,需指定端口号、波特率以及其他可选参数(如校验位和停止位)。以下是一个示例: ```python import serial # 打开口 ser = serial.Serial('COM3', 9600, timeout=1) # 'COM3'为口号,9600为波特率 ``` 当通信完成后,应关闭口以释放资源: ```python ser.close() ``` 通过这些基本操作,可以初始化口并准备进行数据传输[^1]。 #### 3. 数据写入与读取口发送数据可通过 `write()` 方法实现,而接收数据则使用 `read()` 或相关方法。例如: ```python # 写入数据 data_to_send = b'Hello Serial\n' ser.write(data_to_send) # 读取数据 if ser.in_waiting: # 检查是否有数据等待接收 received_data = ser.read(ser.in_waiting) print("Received:", received_data.decode()) ``` 这里,`ser.in_waiting` 用于检查当前口缓冲区中的字节数[^4]。 #### 4. 配置口参数 为了适配同设备的通信需求,可能需要调整口参数,包括但限于波特率、校验位和停止位。配置示例如下: ```python ser = serial.Serial( port='COM3', baudrate=115200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1 ) ``` 上述代码片段展示了如何详细设置口参数以满足特定设备的要求[^3]。 #### 5. 异常处理 在实际应用中,口通信可能会遇到各种异常情况。因此,在编写代码应考虑错误处理机制。例如: ```python try: ser.write(b'Send this data') response = ser.readline() if response: print("Response:", response.decode()) except serial.SerialException as e: print("Serial communication error:", e) ``` 通过捕获异常,程序能够在发生问题提供反馈并采取适当的措施[^3]。 #### 6. 实际应用案例 在硬件交互领域,Python 和 `pyserial` 的结合广泛应用于各类项目中。例如,通过 Python 脚本控制 Arduino 或其他微控制器,实现 PID 参数调整等功能[^5]。 ```python def adjust_pid(kp, ki, kd): command = f"PID {kp} {ki} {kd}\n".encode() ser.write(command) confirmation = ser.readline().decode().strip() return confirmation ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值