Pyserial的基础信息请移步其他文章,本文章只演示基础用法的详解,对于其他文章缺少的细节进行补充,本文使用的设备的测试代码基于keil5,发送和接收的都是汉字
"""
serial = serial.Serial(‘COM1’, 115200) 打开COM1并设置波特率为115200
serial .write(“hello”) 往串口里面写数据
data = serial .read(num) 读num个字符
serial.flushInput() 清除输入缓冲区数据
serial.flushOutput() 中止当前输出并清除输出缓冲区数据
"""
对于基础用法,以上几段代码就够用了,其中缓冲区的用法暂时是用不到的
# 选择端口,设置波特率,设置超时时间
ser = serial.Serial('COM7', 115200, timeout=1)
第一步,选择你的端口,右击“我的电脑”,选择“设备”,找到正确的端口
第二步,设置波特率,保证你代码中的波特率和设备的波特率吻合
第三步,设置超时时间,当程序超过“超时时间”还没完成时会自动跳过,防止程序卡死
send_me = "测试" # 发送内容
real_send = send_me.encode("utf-8") # 用utf-8进行编码
ser.write(real_send) # 使用write函数将命令写入串口,接收端的接收函数必须添加超时时间,否则只能执行一次接收端的判断函数
发送部分:
串口通信只支持传输byte格式的数据
需要把字符型数据编码成byte格式进行传输
详细了解:https://blog.csdn.net/m0_38080253/article/details/78841280
这里,我们发送“测试”两个汉字,用utf-8进行编码
以上是kei5的代码,采用hal库,当接收到python发来的“测试”时,反转led灯的引脚电平,并发送“测试”二字给python ,注意:接收函数必须写超时时间,否则会造成只能接收发送一次的bug,keil5的解码需要设置成utf-8
# keil5中编写好串口发送,直接发送汉字即可,不需要转化成十六进制或其他任何进制,但必须把keil的默认字符集改为utf8
# pyserial读取的值是二进制Byte格式的字符串,两个汉字需要至少6个字节
Byte = ser.read(6)
# 接收到的数据也是bytes格式,从bytes解码为Unicode字符串
uni = Byte.decode() # decode不写参数,默认utf-8
print("Byte的值是:", Byte)
print("uni的值是:", uni)
print("Byte的格式是:", type(Byte))
print("uni的格式是:", type(uni))
需要接收到的bytes格式需要解码成utf-8
pyserial 的难点就在于搞不清楚decode和encode的使用,如果要发送的字符串中包含的是十六进制数字需要另一种转码方式,详细参考:http://t.csdn.cn/c1GoJ,本文也是依据此文改编而来