爱意满满的作品展示区。
jdjingdian

[开源] 给串口用的 "tmux" 🤡

  •  
  •   jdjingdian · Apr 27 · 401 views

    最近在玩 ESP32 ,顺手做了一个小工具:Wiremux 。

    GitHub: https://github.com/magicdian/wiremux

    ESP Registry:

    平时做嵌入式开发时,串口通常会同时承担很多事情:启动日志、运行日志、console 输入输出、日志诊断信息等等。

    最近我在 ESP32 上接入了官方 console 模块,可以通过串口输入一些简单命令。但问题是,我的日志也输出到同一个控制台,所以 输入命令或看命令结果时,经常会被不断刷新的日志打断。

    ESP32 虽然有多个 UART ,但开发板上的 USB Serial/JTAG 通常只对应一个默认串口。我又不想额外接线,所以就做了 Wiremux 。

    Wiremux 做的事情很简单:在一个串口连接上复用多个逻辑通道。

    比如:

    • channel 1 用来跑 console
    • channel 2 用来看日志
    • channel 3 用来输出 telemetry
    • channel 4 可以放 UTF-8 文本或其他业务数据

    设备侧把不同类型的数据写到不同 channel ,电脑上的 host 工具负责解码和过滤。这样一个物理串口仍然只有一个,但使用时可以 像多个独立通道一样查看,互相不打断。

    不配置过滤时,TUI 会显示所有通道,每条记录前面带有 channel 信息:

    切到 console 通道后,可以专心输入命令和看返回结果,不被日志刷屏影响:

    也可以单独查看日志或其他业务通道:

    UTF-8 文本通道也可以正常显示:

    目前项目里已经有 ESP-IDF component 和 demo ,可以直接通过 ESP Registry 安装;核心协议部分是独立 C 实现,后续也可以接到 其他串口类场景里。

    host 侧可以通过类似 tmux 的快捷键进行 channel 的切换:ctrl + b + channel-id (例如 ctrl + b 1)

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1091 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:43 · PVG 02:43 · LAX 11:43 · JFK 14:43
    ♥ Do have faith in what you're doing.