调试一台电机时,我们往往从几条 CAN 报文开始;接上更多电机、IMU 和外部单片机之后,需要关注的内容很快就变多了:设备有没有在线,反馈是否连续,温度有没有变化,某个 ID 为什么没有回复,串口发出去的字节是否真的完成了输出。
我希望这些信息能更方便地出现在手边的屏幕上,于是做了 CAN Scope:一套基于 ESP32-S3 的无线 CAN 分析仪,同时提供 Android App 和 Windows / Linux 桌面端。它支持电机与 IMU 数据解析、实时曲线和原始报文监控,也加入了 UART 字节收发、原生 USB 直连和 ESP-NOW 双机转发。
这篇文章从实际使用场景介绍项目:它能看什么、不同连接方式怎么选,以及第一次接线和连接应该从哪里开始。

01 · 让一条总线上的数据更容易理解
CAN Scope 的硬件端负责接收、转发和统计数据,上位机负责解码、展示与记录。电机和 IMU 通过 CAN 收发器接入,外部单片机通过 3.3 V TTL UART 接入;ESP32-S3 再把当前选中的数据,通过蓝牙、局域网或 USB 送到手机或电脑。
设备本身配有屏幕和三个按键。即使暂时不打开上位机,也能查看连接状态、速率等统计,并选择通信模式和 CAN / UART 数据类型。这些设置会保存到设备里,重启后继续使用。

它适合机器人电机与姿态传感器调试、嵌入式模块联调,以及需要一边接线一边看数据的工作台场景。一台 ESP32 对应一条 CAN 总线;需要观察更多独立总线时,可以通过多个设备建立不同通道。
02 · 手机端:从设备卡片进入参数曲线
Android App 把连接通道和设备放到同一个工作流程里:先连接分析仪,再添加电机或 IMU,填写设备 ID、反馈 CAN ID 等信息。首页通过卡片查看设备状态,点进详情后进一步观察参数和曲线。
对于支持的电机协议,页面可以把原始反馈解码成更直观的数值;对于 DM-IMU-L1,可以查看加速度、角速度、姿态角与四元数。曲线可以全屏查看,适合在改变输入或调整机构时观察反馈趋势。

目前已接入的设备包括大疆 C620 / M3508、C610 / M2006、GM6020、GM3510,以及达妙电机预设和 DM-IMU-L1。不同电机的反馈格式与量程并不完全相同,使用时仍需按型号配置;GM3510 的部分参数保留原始值。
达妙电机的反馈查询可以按设备单独开启,默认 100 Hz,可配置为 1~1000 Hz;IMU 使用主动上报。这里的频率表示查询配置,实际能收到多少反馈,还取决于设备响应、总线和传输链路。
03 · 电脑端:把多条通道放到大屏幕上
桌面端适合需要持续查看数据、调整配置和导出记录的场景。它提供最多四个独立通道,每个通道可以选择蓝牙、Wi-Fi 或 USB,分别保存连接信息、电机配置和报文记录设置。
桌面窗口复用项目已有的电机、IMU 和曲线资源,通过原生后端连接设备。设备卡片、实时曲线、CAN 监视与设置集中在一个窗口里;每个通道有自己的设备页,便于把不同总线上的设备分开管理。

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

04 · 从解码结果回到原始 CAN 报文
参数曲线帮助理解设备状态,原始报文则保留了进一步排查的入口。CAN 监视页可以查看接收、成功发送与发送失败记录,按 CAN ID 和 RX / TX 筛选,并结合设备端帧率、错误统计与估算负载观察总线活动。
桌面端支持经典 CAN 单次发送,包括标准帧、扩展帧、数据帧和远程帧,DLC 为 0~8。发送操作会等待设备侧的 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 一次最多发送 4096 字节,按小段等待设备完成确认。该确认代表 ESP32 的串口输出已完成,外部单片机是否收到或执行,还需要对方协议的应答。高波特率也不等于无线链路能够持续无损传输,需要可靠传输时应结合帧长、校验、序号和限速设计。
06 · 屏幕与按键,让设备状态留在现场
设备端使用 1.47 英寸 ST7789 屏幕,分辨率为 172 × 320。中文总览显示连接与运行统计,设置页提供亮度、声音、方向、通信模式、数据类型和串口速率等入口,支持四个显示方向。
不同通信模式使用不同的主题颜色,蓝牙为蓝色、Wi-Fi 为紫色、USB 为红色,双机 A / B 分别使用绿色和黄色。GPIO3 的绿色指示灯独立提示连接与数据活动,便于在不一直盯着屏幕时观察设备状态。

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

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: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 · 第一次使用,建议按这个顺序走
- 准备配套固件和客户端。需要 UART、USB 等功能时,使用对应的新版本源码构建,先确认两端支持同一功能。
- 先建立一条连接。手机从蓝牙开始,电脑可从蓝牙或 USB 开始;一次只让一个上位机连接同一台分析仪。
- 先查看状态,再添加对象。CAN 模式先确认波特率和总线活动,再添加一台电机或 IMU,填对 ID 与反馈 ID。
- 再开启主动查询。需要时单独开启达妙反馈查询,观察实际反馈速率与错误统计,再决定是否调整频率。
- 保存一份配置。导出通道和设备配置;需要复盘时导出当前保留的 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:Wireless-CAN-Analyzer 项目主页
- Gitee:国内同步仓库
- 历史完整套件与版本说明
- 桌面安装、连接与打包文档
- USB 直连与远程设置 · UART 接线与使用 · 双机转发说明
访问说明:GitHub / Gitee 仓库目前为私有,需要相应账号具有访问权限;本文提供项目介绍与界面展示,不代表上述链接对所有访客开放。源码工程采用 GPL-3.0-only,外部依赖与字库遵循各自许可证。
我希望 CAN Scope 能把“接上设备、看见反馈、理解数据、留下记录”这条调试路径做得更顺手。对于正在做机器人或嵌入式项目的同学,可以先从自己的一台电机、一个 IMU 或一段串口数据开始,再逐步扩展到多通道工作台。
配图说明:本文使用原创结构 / 接线示意图,以及项目实际页面或固件绘制代码生成的模拟预览。构建、自动测试和模拟界面分别验证对应的软件行为;真实设备兼容性、无线距离与持续吞吐,应以相应实测记录为准。项目不隶属于大疆、达妙或乐鑫,型号用于说明协议兼容范围。









