windows上找个串口通信工具
Linux上查看设备列表
有可能需要安装串口驱动,去设备管理器中安装一下
或这个一般串口开发,厂家都会给驱动和串口调试工具
如果串口调试工具调试没有问题了
接下来你用python代码调试
你需要在python环境中安装pyserial
库
pip install pyserial
https://blog.csdn.net/sprawling/article/details/50477166
import osimport serial.tools.list_portsport_list = list(serial.tools.list_ports.comports())print(port_list)#if there is no serial ports,here wil show '[]'. array modeif len(port_list) == 0:print('No serial ports.')else:for i in range(0,len(port_list)):print(port_list[i])os.system("pause")
根据显示的串口列表或者从设备管理器中看到的结果
def initSerial():print()if platform.system() == "Windows":# 根据情况看要不要E# 串口名, 比特率等参数根据 设备通信协议来设置# ser = serial.Serial("COM3", 115200, 8, "E", timeout=50, stopbits=1)ser = serial.Serial("COM3", 115200, 8, timeout=50, stopbits=1)print('开启ser', ser)elif platform.system() == "Linux":# print("linux sys")ser = serial.Serial("/dev/ttyUSB1", 9600, 8, timeout=50, stopbits=1)# ser = serial.Serial("/dev/ttyUSB1", 9600, 8, "E", timeout=50, stopbits=1)else:print('不认识的操作系统')return ser
此处有获取到的是16进制数据
有的直接获取的byte, 根据情况来获取
def getData(ser):time.sleep(1)count = ser.inWaiting()print(count)# 数据的接收if count > 0:data = ser.read(count)print(data)if data != b'':# 将接受的16进制数据格式如b'h\x12\x90xV5\x12h\x91\n4737E\xc3\xab\x89hE\xe0\x16'# 转换成b'6812907856351268910a3437333745c3ab896845e016'# 通过[]去除前后的b'',得到我们真正想要的数据# print("receive", str(binascii.b2a_hex(data))[2:-1])# res = str(binascii.b2a_hex(data))[2:-1]# print('res1-->', res)res = str(data)[2:-1]# print('res2-->', res)if res.startswith("$") and res.endswith("\\r\\n"):# if res.startswith("$") and res.endswith("\r\n"):parseData(res)else:print('数据格式由问题')print(res)savefile(res,filename='error.txt')return res# else:# print('没有接收到数据')
这一步中,数据位代表的内容不同,无法做到统一,根据通信协议文档来吧
def parseData(res):pass
当然一般我会将整个过程封装到一个流程函数中
类似于
def start():"""流程函数:return:"""ser = initSerial()# for i in range(1, 5):while True:# time.sleep(0.5)res = getData(ser)# res = "01030e01a70002000d000e0011011401eae53e"# parseData(res)# print(d)return ''