赞
踩
工作中需要用到UBS转串口通过串口给下位机发数据,于是通过查阅,python居然真的有对应的库
这是在百度中收到的,关于pyserial的使用:
在Python中,可以使用pyserial
库来进行串口通信。以下是一个简单的例子,展示了如何使用pyserial
发送和接收数据。
首先,确保安装了pyserial
库:
pip install pyserial
import serial
import time
# 打开串口
# 设备文件名可能是 '/dev/ttyUSB0', '/dev/tty.usbserial口1' 或者其他,取决于操作系统和硬件
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5) # 设置串口号和波特率
# 发送数据
ser.write(b'Hello\n') # 注意必须是字节类型,所以使用b'Hello\n'
# 读取数据
# 可以使用ser.inWaiting()来检查是否有数据可读
if ser.inWaiting() > 0:
response = ser.readline() # 读取一行,如果知道数据的确切长度,也可以直接读取那么多字节
print(response)
# 关闭串口
ser.close()
基于上述资料,对串口方法进行二次封装:
实现如下:
- class Communication(): # 封装串口
- data = ''
-
- def __init__(self, com, bps, timeout):
- self.port = com
- self.bps = bps
- self.timeout = timeout
- self.is_receiving=False
- try:
- # 打开串口,并得到串口对象
- self.com = serial.Serial(self.port, self.bps, timeout=self.timeout)
- # 判断是否打开成功
- if self.com.is_open:
- ret = True
- except Exception as e:
- logger.error("---打开串口失败,请检查串口连接---:", e)
- exit()
- self.running = True
- self.thread = threading.Thread(target=self.get_data,daemon=False, name='get_data thread')
- self.thread.start()
- logger.info(f'{self.thread.name} start')
-
- # 打印串口相关数据
- def Print_Name(self):
- print(self.com.port) # 读或者写端口
- print(self.com.baudrate) # 波特率
- print(self.com.bytesize) # 字节大小
- print(self.com.parity) # 校验位
- print(self.com.stopbits) # 停止位
-
- # 打开串口方法
- def Open_Engine(self):
- self.com.open()
-
- # 关闭串口方法
- def Close_Engine(self):
- self.com.close()
- logger.info(f"串口打开状态{self.com.is_open}") # 检验串口是否打开
-
- def hexStr_to_str(self, hex_str):
- '''
- 函数名称: hexStr_to_str
- 功能描述: 把需要发送的指令转换为str
- 输入参数:hex_str
- 返回参数:str_bin.decode('utf-8')
- '''
- hex = hex_str.encode()
- str_bin = binascii.unhexlify(hex)
- return str_bin
-
- def send_data(self, str1):
- '''
- 函数名称: send_data
- 功能描述: 发送int类型的指令
- 输入参数:str
- 返回参数:data
- '''
- time.sleep(0.5)
- logger.info('发送数据: {}'.format(str1.hex().upper()))
- data = self.com.write(str1) # 调用转换方法写入16进制参数\
- return data
代码调用举例:
-
- if __name__ == '__main__':
- b = Communication("COM18", 115200, timeout=1)
- b.send_data(b"\xc0\x00\x00\x10\x00\x11\x00\x00\x00\x00\x01\x02\x01\x08\xa0\x0f\x00\x00\x10'\x00\x00U\x17\xc0")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。