CAN Scope:基于 ESP32-S3 的无线 CAN 分析仪,手机与电脑都能用

调试一台电机时,我们往往从几条 CAN 报文开始;接上更多电机、IMU 和外部单片机之后,需要关注的内容很快就变多了:设备有没有在线,反馈是否连续,温度有没有变化,某个 ID 为什么没有回复,串口发出去的字节是否真的完成了输出。

我希望这些信息能更方便地出现在手边的屏幕上,于是做了 CAN Scope:一套基于 ESP32-S3 的无线 CAN 分析仪,同时提供 Android App 和 Windows / Linux 桌面端。它支持电机与 IMU 数据解析、实时曲线和原始报文监控,也加入了 UART 字节收发、原生 USB 直连和 ESP-NOW 双机转发。

这篇文章从实际使用场景介绍项目:它能看什么、不同连接方式怎么选,以及第一次接线和连接应该从哪里开始。

CAN Scope 项目封面:无线 CAN 分析仪与手机、电脑界面预览
项目视觉封面。图中的软件界面使用模拟数据,不是硬件实拍或真实总线测试结果。

01 · 让一条总线上的数据更容易理解

CAN Scope 的硬件端负责接收、转发和统计数据,上位机负责解码、展示与记录。电机和 IMU 通过 CAN 收发器接入,外部单片机通过 3.3 V TTL UART 接入;ESP32-S3 再把当前选中的数据,通过蓝牙、局域网或 USB 送到手机或电脑。

设备本身配有屏幕和三个按键。即使暂时不打开上位机,也能查看连接状态、速率等统计,并选择通信模式和 CAN / UART 数据类型。这些设置会保存到设备里,重启后继续使用。

CAN Scope 架构:电机与 IMU 经 CAN、外部单片机经 UART 接入 ESP32-S3,再通过 BLE、Wi-Fi 或 USB 连接客户端
原创结构示意图。每台设备同时选择一种数据通信模式和一种数据类型,图中的连接分支表示可选路径。

它适合机器人电机与姿态传感器调试、嵌入式模块联调,以及需要一边接线一边看数据的工作台场景。一台 ESP32 对应一条 CAN 总线;需要观察更多独立总线时,可以通过多个设备建立不同通道。

02 · 手机端:从设备卡片进入参数曲线

Android App 把连接通道和设备放到同一个工作流程里:先连接分析仪,再添加电机或 IMU,填写设备 ID、反馈 CAN ID 等信息。首页通过卡片查看设备状态,点进详情后进一步观察参数和曲线。

对于支持的电机协议,页面可以把原始反馈解码成更直观的数值;对于 DM-IMU-L1,可以查看加速度、角速度、姿态角与四元数。曲线可以全屏查看,适合在改变输入或调整机构时观察反馈趋势。

Android App 设备总览与独立详情:电机卡片、IMU 参数与实时曲线
左侧为多通道设备总览,右侧为详情页曲线区域。由项目实际 WebView 页面渲染并排展示,数据为模拟数据,可点击放大查看。

目前已接入的设备包括大疆 C620 / M3508、C610 / M2006、GM6020、GM3510,以及达妙电机预设和 DM-IMU-L1。不同电机的反馈格式与量程并不完全相同,使用时仍需按型号配置;GM3510 的部分参数保留原始值。

达妙电机的反馈查询可以按设备单独开启,默认 100 Hz,可配置为 1~1000 Hz;IMU 使用主动上报。这里的频率表示查询配置,实际能收到多少反馈,还取决于设备响应、总线和传输链路。

03 · 电脑端:把多条通道放到大屏幕上

桌面端适合需要持续查看数据、调整配置和导出记录的场景。它提供最多四个独立通道,每个通道可以选择蓝牙、Wi-Fi 或 USB,分别保存连接信息、电机配置和报文记录设置。

桌面窗口复用项目已有的电机、IMU 和曲线资源,通过原生后端连接设备。设备卡片、实时曲线、CAN 监视与设置集中在一个窗口里;每个通道有自己的设备页,便于把不同总线上的设备分开管理。

CAN Scope Linux 桌面端的通道标签与设备状态卡片
Linux 桌面程序实际渲染的设备页面,使用模拟数据。桌面端支持 Windows / Linux,当前展示的是 Linux 界面。

需要细看反馈时,可以进入电机详情页,让参数与曲线一起显示。通道配置可以导入、导出,便于保存一套调试对象;当前保留的 CAN 记录还可以导出为 CSV,供后续整理和分析。

桌面端电机详情:状态参数和多条实时曲线
电机详情与实时曲线预览,使用模拟数据。配置和记录可保存,但正在进行的反馈查询不会在重连后自动恢复。

04 · 从解码结果回到原始 CAN 报文

参数曲线帮助理解设备状态,原始报文则保留了进一步排查的入口。CAN 监视页可以查看接收、成功发送与发送失败记录,按 CAN ID 和 RX / TX 筛选,并结合设备端帧率、错误统计与估算负载观察总线活动。

桌面端支持经典 CAN 单次发送,包括标准帧、扩展帧、数据帧和远程帧,DLC 为 0~8。发送操作会等待设备侧的 CAN 完成结果;如果超时或断线,界面将结果视为未知,不自动重发,以免把一条可能已执行的指令再次送出去。

CAN 原始报文监视界面与单次发送区域
CAN 监视与单次发送页面,使用模拟数据。链路受理、命令写入和 CAN 总线实际发送完成属于不同阶段。

目前面向经典 CAN,不支持 CAN FD。设备接口会正常参与 ACK,不能作为纯监听模式使用;页面中的 LOAD EST. 是估算值,没有包含位填充、错误帧或失败尝试,适合辅助观察变化趋势。

05 · 同一台设备,也可以观察外部单片机串口

实际联调时,电机和 IMU 之外,常常还会遇到通过 UART 输出状态的控制板。CAN Scope 可以在设备屏幕把数据类型切换为 UART,继续使用蓝牙、Wi-Fi 或桌面 USB 连接,接收和发送原始字节。

界面支持 HEX 与 UTF-8 文本,发送时可以按需要追加换行;接收内容可以暂停显示或清空。默认串口参数为 115200 / 8N1,也可从 9600 到 921600 的八档速率中选择。暂停只影响显示,接收仍继续进行,界面保留最近 64 KiB 数据。

UART 页面:串口参数、HEX 接收、输入框与发送状态
项目共用的 UART 页面,来自离线界面测试,使用合成字节数据。Android 与桌面端沿用同一套串口页面交互。

UART 一次最多发送 4096 字节,按小段等待设备完成确认。该确认代表 ESP32 的串口输出已完成,外部单片机是否收到或执行,还需要对方协议的应答。高波特率也不等于无线链路能够持续无损传输,需要可靠传输时应结合帧长、校验、序号和限速设计。

06 · 屏幕与按键,让设备状态留在现场

设备端使用 1.47 英寸 ST7789 屏幕,分辨率为 172 × 320。中文总览显示连接与运行统计,设置页提供亮度、声音、方向、通信模式、数据类型和串口速率等入口,支持四个显示方向。

不同通信模式使用不同的主题颜色,蓝牙为蓝色、Wi-Fi 为紫色、USB 为红色,双机 A / B 分别使用绿色和黄色。GPIO3 的绿色指示灯独立提示连接与数据活动,便于在不一直盯着屏幕时观察设备状态。

ST7789 中文总览与设置页,展示横竖屏布局
由固件实际绘制代码生成的屏幕预览,使用模拟数据;本机屏幕显示状态和统计,原始报文在上位机查看。

07 · 两台设备,可以组成独立无线桥

如果两端都需要接入设备,可以让两台分析仪分别进入 A 端和 B 端,通过 ESP-NOW 配对后转发 CAN 或 UART 数据。配对由两端屏幕和按键完成,需要核对校验码并确认,使用时不依赖 App 或电脑。

双机 A 端、B 端设置与屏幕配对流程预览
双机模式与配对页面,由实际固件绘制代码生成,使用模拟数据。实物配对、无线距离和持续吞吐仍需在目标环境验证。

CAN 双机桥连接的是两条独立总线,不能把 A / B 又并接到同一条总线上形成环路。无线链路传递帧,不能延伸 CAN 逐位仲裁和 ACK 的时序;两段总线各自需要匹配的波特率、接线与终端电阻。

链路采用有界队列、重试去重和过期清理,避免重连后补发长期积压的数据。无线 ACK 表示对端接纳了转发数据,CAN 发送是否完成还要看对端控制器;满负载无损和硬实时能力需要单独测量。

08 · 蓝牙、Wi-Fi 和 USB,怎么选?

方式 可用客户端 适合的使用方式
Bluetooth LE Android / Windows / Linux 近距离无线连接,按设备建立通道
Wi-Fi 局域网 Android / Windows / Linux 设备与上位机处于同一局域网,通过 TLS 连接
原生 USB Windows / Linux 工作台电脑直连,不需要先配网
ESP-NOW 双机 无需上位机 两端独立转发 CAN 或 UART 数据

Wi-Fi 首次使用,需要先通过认证蓝牙配置 2.4 GHz 网络并取得设备信任信息。局域网连接校验设备证书指纹,并使用访问令牌认证;日常传输不需要云端中转。原生 USB 走 ESP32-S3 的 USB Serial/JTAG 接口,与外接单片机所用的 TX / RX 独立。

同一台设备同时只使用一种数据通信模式,也只选择 CAN / UART 中的一种数据类型。切换模式会结束原连接;主动发送和电机查询由用户明确开启,重连后不会自动恢复。

09 · 接线,从 CANH / CANL 和 TX / RX 开始

当前目标硬件是 ESP32-S3 Mini、SN65HVD230、ST7789 屏幕、三个按键及有源蜂鸣器。CAN 默认 1 Mbit/s。连接总线前,应先确认收发器供电、共地、CAN 波特率和终端电阻配置。

CAN 与 UART 接线示意:GPIO4/5 接 SN65HVD230,GPIO43/44 与外部 MCU 交叉连接,USB 使用 GPIO19/20
原创接线示意图,依据当前工程 GPIO 映射绘制。实际供电、接口方向与器件电气参数仍应按所用板卡核对。
  • CAN:GPIO4 接 SN65HVD230 的 CTX,GPIO5 接 CRX,CANH / CANL 按信号名称接到总线。当前设计的 CN6 与 CN5 引脚顺序不同,不能只按脚号接线。
  • UART:GPIO43 为 TX,接外部单片机 RX;GPIO44 为 RX,接外部单片机 TX;双方共地,使用 3.3 V TTL。
  • USB:使用连接 GPIO19 / GPIO20 的原生 USB 口。开发板若有两个 USB 插座,应区分原生 USB 与 USB 转串口接口。

UART 不能直接连接 RS232、RS485 或 5 V 串口。原理图与 PCB 原始工程目前尚未纳入项目仓库,电气与供电细节请结合实际硬件确认。

10 · 第一次使用,建议按这个顺序走

  1. 准备配套固件和客户端。需要 UART、USB 等功能时,使用对应的新版本源码构建,先确认两端支持同一功能。
  2. 先建立一条连接。手机从蓝牙开始,电脑可从蓝牙或 USB 开始;一次只让一个上位机连接同一台分析仪。
  3. 先查看状态,再添加对象。CAN 模式先确认波特率和总线活动,再添加一台电机或 IMU,填对 ID 与反馈 ID。
  4. 再开启主动查询。需要时单独开启达妙反馈查询,观察实际反馈速率与错误统计,再决定是否调整频率。
  5. 保存一份配置。导出通道和设备配置;需要复盘时导出当前保留的 CAN 记录。

Linux 桌面源码运行需要 Python 3.12(64 位,推荐),在仓库根目录执行:

bash desktop/start.sh

Windows 安装 Python 并加入 PATH 后,可双击 desktop/start.bat。启动脚本首次创建虚拟环境并安装依赖。固件使用 ESP-IDF v6.0.2,Android 使用 JDK 17、Android SDK 35 与 Build Tools 35.0.0;具体构建步骤见项目 README。

文章按 2026 年 11 月 4 日的项目源码整理:ESP32-S3 固件 1.24.2、Android App 1.21.0、CAN Scope Desktop 1.2.4。不同组件独立编号。

目前已发布的完整套件标签为 desktop-v1.0.0,其中是固件 1.21.0、Android 1.20.0 和 Desktop 1.0.0,属于历史快照。它与本文介绍的当前源码功能存在差异,后续新功能应以源码和相应发布说明为准。

访问说明:GitHub / Gitee 仓库目前为私有,需要相应账号具有访问权限;本文提供项目介绍与界面展示,不代表上述链接对所有访客开放。源码工程采用 GPL-3.0-only,外部依赖与字库遵循各自许可证。

我希望 CAN Scope 能把“接上设备、看见反馈、理解数据、留下记录”这条调试路径做得更顺手。对于正在做机器人或嵌入式项目的同学,可以先从自己的一台电机、一个 IMU 或一段串口数据开始,再逐步扩展到多通道工作台。

配图说明:本文使用原创结构 / 接线示意图,以及项目实际页面或固件绘制代码生成的模拟预览。构建、自动测试和模拟界面分别验证对应的软件行为;真实设备兼容性、无线距离与持续吞吐,应以相应实测记录为准。项目不隶属于大疆、达妙或乐鑫,型号用于说明协议兼容范围。

更加详细的项目内容和更新动态请前往 Github 查看。✧(≖ ◡ ≖✿) 有问题欢迎在下方留言,你的建议是我更新的动力!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇