侧边栏壁纸
博主头像
Zeeland

全栈算法工程师 | 大模型创业 | 开源项目分享 | Python开发者 | @Promptulate Founder | @SparkLab cofounder | @LangChainAI Top Contributor | @CogitLab core member

  • 累计撰写 61 篇文章
  • 累计创建 47 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

cushy-serial 一个轻量级Python serial库

Zeeland
2023-03-10 / 0 评论 / 0 点赞 / 734 阅读 / 546 字

项目地址: 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的所有功能。

  • 运行结果如下
  • 如果你想要执行定时任务,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包解析功能,减少在包解析上所花费的工作
  • 提供相关持久化解决方案
  • 提供数据流监控,提高数据稳定性
  • 提供更加细力度的数据包调控,降低丢包率
  • 提供串口定时任务调度
  • 完善单元测试

贡献

如果你想为这个项目做贡献,你可以提交pr或issue。我很高兴看到更多的人参与并优化它。

0

评论区