当前位置:   article > 正文

python基于串口通信实现封装_python 串口详细封装模块

python 串口详细封装模块

工作中需要用到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()

基于上述资料,对串口方法进行二次封装:

实现如下:

  1. class Communication(): # 封装串口
  2. data = ''
  3. def __init__(self, com, bps, timeout):
  4. self.port = com
  5. self.bps = bps
  6. self.timeout = timeout
  7. self.is_receiving=False
  8. try:
  9. # 打开串口,并得到串口对象
  10. self.com = serial.Serial(self.port, self.bps, timeout=self.timeout)
  11. # 判断是否打开成功
  12. if self.com.is_open:
  13. ret = True
  14. except Exception as e:
  15. logger.error("---打开串口失败,请检查串口连接---:", e)
  16. exit()
  17. self.running = True
  18. self.thread = threading.Thread(target=self.get_data,daemon=False, name='get_data thread')
  19. self.thread.start()
  20. logger.info(f'{self.thread.name} start')
  21. # 打印串口相关数据
  22. def Print_Name(self):
  23. print(self.com.port) # 读或者写端口
  24. print(self.com.baudrate) # 波特率
  25. print(self.com.bytesize) # 字节大小
  26. print(self.com.parity) # 校验位
  27. print(self.com.stopbits) # 停止位
  28. # 打开串口方法
  29. def Open_Engine(self):
  30. self.com.open()
  31. # 关闭串口方法
  32. def Close_Engine(self):
  33. self.com.close()
  34. logger.info(f"串口打开状态{self.com.is_open}") # 检验串口是否打开
  35. def hexStr_to_str(self, hex_str):
  36. '''
  37. 函数名称: hexStr_to_str
  38. 功能描述: 把需要发送的指令转换为str
  39. 输入参数:hex_str
  40. 返回参数:str_bin.decode('utf-8')
  41. '''
  42. hex = hex_str.encode()
  43. str_bin = binascii.unhexlify(hex)
  44. return str_bin
  45. def send_data(self, str1):
  46. '''
  47. 函数名称: send_data
  48. 功能描述: 发送int类型的指令
  49. 输入参数:str
  50. 返回参数:data
  51. '''
  52. time.sleep(0.5)
  53. logger.info('发送数据: {}'.format(str1.hex().upper()))
  54. data = self.com.write(str1) # 调用转换方法写入16进制参数\
  55. return data

代码调用举例:

  1. if __name__ == '__main__':
  2. b = Communication("COM18", 115200, timeout=1)
  3. 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")
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/771166
推荐阅读
相关标签
  

闽ICP备14008679号