乐趣区

关于python:cushyserial-一个轻量级的Python-Serial框架

本文自笔者博客: https://www.blog.zeeland.cn/archives/rgoihgxcoci3

我的项目地址: https://github.com/Undertone0809/cushy-serial/

简介

cushy-serial 是一个轻量级的 Serial 框架,初衷是心愿使 Serial 编程变得更加简略、快捷,因而,相较于传统的 pyserial,该框架能够更加疾速地构建起一个 serial 程序。

次要个性

  • 兼容 pyserial 的所有个性
  • 自定义 serial 音讯异步回调,无需破费精力在多线程上
  • 提供串口定时工作
  • 不便实现和治理多个 serial 连贯
  • 可自定义音讯协定,兼容性强

疾速上手

pip install cushy-serial --upgrade 
  • 上面是一个简略的 serial 程序,当 python 客户端接管到来自串口的信息时会主动回调

    from cushy_serial import CushySerial
    
    serial = CushySerial("COM1", 9600)
    serial.send("I am python client")
    
    
    @serial.on_message()
    def handle_serial_message(msg: bytes):
      str_msg = msg.decode("utf-8")
      print(f"[serial] rec msg: {str_msg}")
    

须要阐明的是,CushySerial 兼容了 Serial 中所有的性能,因而,你能够在 CushySerial 中应用 Serial 的所有性能。

  • 运行后果如下

<img src=”https://zeeland-bucket.oss-cn-beijing.aliyuncs.com/images/20230310173226.png”/>

  • 如果你想要执行定时工作,CushySerial 也提供了相干的解决方案,你能够不便的轮询发送指令,并获取来自串口的信息,示例如下:
from cushy_serial import CushySerial, enable_log

enable_log()
serial = CushySerial("COM1", 9600)
instruction = bytes([0x01, 0x06, 0x00, 0x7F, 0x00, 0x01, 0x79, 0xD2])

# msg 为你要轮询发送的指令,interval 为轮询的工夫距离,times 为执行次数,可不填写
@serial.polling_task(msg=instruction, interval=0.5, times=5)
def handle_rec_msg(rec_msg):
    print(f"[serial] rec polling message: {rec_msg}")

待办

  • [] 提供 polling_task 的函数回调版本
  • [] 提供 bytes 包解析性能,缩小在包解析上所破费的工作
  • [] 提供相干长久化解决方案
  • [] 提供数据流监控,进步数据稳定性
  • [] 提供更加细力度的数据包调控,升高丢包率
  • [x] 提供串口定时任务调度
  • [] 欠缺单元测试

奉献

如果你想为这个我的项目做奉献,你能够提交 pr 或 issue。我很快乐看到更多的人参加并优化它。

退出移动版