我有一个电动自行车,它由一个控制器和一个智能 LCD 组成,它可以调节电机的功率,它可以调节最大速度、功率输出、踏板辅助灵敏度等,并显示当前的电池电压、电机功率使用(瓦)和电机速度。
LCD 和控制器通过 5v rx/tx 线连接。我在串行线的中间串联了一个 arduino mega;控制器 rx/tx 到 arduino serial1 tx/rx,然后 arduino serial2 tx/rx 到 LCD rx/tx。
代码目前正在将所有从控制器接收到的数据直接传递给 LCD,反之亦然,这完美地工作,LCD 值是正确的。
我想分析协议,但似乎无法弄清楚其中的任何结构。目前专注于控制器 -> LCD 通信以提取电机值。似乎所有命令都以 02(AsciiTable 中的文本开头)开头,然后大多数命令都包含 0E,我最初怀疑它是消息长度,但是从以下命令中可以看出情况并非如此:
02 0E 40 40 00 00 03 0B B8 00 00 35 C8
02 0E 01 00 40 00 00 03 0B 98 00 35 C8
02 4E 40 40 00 00 03 0 0 B 8 0 4 0 0 B 8 0 4
0 0 B 00 4 0 0 B 35 C8
02 0E 01 00 50 00 D0 0B B8 00 00 05 FE02 4E 40 40 00 00 03 0B B8 00 35 C8
02 4E 40 20 0A 00 03 0A B8 80 35 C8
02 4E 40 40 00 00 03 0B B8
4 0 0 4 0 8 DD 4 0 8 0 DD 4有限元
这是大约运行 60 秒后的完整
十六进制转储,消息源源不断:https :
//pastebin.com/iFFEWAFd 该转储将包含电池电压 (45-52.4V)、电机功率使用 (0-1000Watts,也可能是 0-10Amps )和可能的轮速。可能还有其他一些参数。
命令
02 0E 01 00 40 00 00 03 0B B8 00 00 35 C8
是迄今为止最受欢迎的占一半以上的消息。这可能是心跳吗?
这是没有该命令的相同粘贴,以便于阅读:https : //pastebin.com/b5iQugaY
LCD 的 PDF 手册:www.pedecs.co.uk 到目前为止
还没有找到任何类型的控制器手册。
感谢您提供的任何见解,我仍在了解整个逆向工程。
更新:我已经设法隔离了几个命令。以前认为是心跳的命令实际上是速度 0。这是自行车从 19mph 减速到 0mph 的转储:
02 0E 01 00 40 00 00 03 00 F5 00 00 35 8E
02 0E 01 00 40 00 00 03 00 FD 00 00 35 86
02 0E 01 00 40 00 00 03 01 05 00 00 35 7F
02 0E 01 00 40 00 00 03 00 0C 00 00 35 74
02 0E 01 00 40 00 00 03 01 25 00 00 35 AE
02 0E 01 00 40 00 00 03 01 3F 00 00 35 45
02 0E 01 00 40 00 00 03 01 4F 00 00 35 35
02 0E 01 00 40 00 00 03 01 4F 00 00 35 35
02 0E 01 00 40 00 00 03 01 60 00 00 35 1A
02 0E 01 00 40 00 00 03 01 60 00 00 35 1A
02 0E 01 00 40 00 00 03 01 76 00 00 35 0C
02 0E 01 00 40 00 00 03 01 76 00 00 35 0C
02 0E 01 00 40 00 00 03 01 8E 00 00 35 F4
02 0E 01 00 40 00 00 03 01 8E 00 00 35 F4
02 0E 01 00 40 00 00 03 01 AB 00 00 35 D1
02 0E 01 00 40 00 00 03 01 AB 00 00 35 D1
02 0E 01 00 40 00 00 03 01 CE 00 00 35 B4
02 0E 01 00 40 00 00 03 01 CE 00 00 35 B4
02 0E 01 00 40 00 00 03 01 CE 00 00 35 B4
02 0E 01 00 40 00 00 03 01 FC 00 00 35 86
02 0E 01 00 40 00 00 03 02 8A 00 00 35 F3
02 0E 01 00 40 00 00 03 02 8A 00 00 35 F3
02 0E 01 00 40 00 00 03 02 8A 00 00 35 F3
02 0E 01 00 40 00 00 03 02 8A 00 00 35 F3
02 0E 01 00 40 00 00 03 03 0C 00 00 35 74
02 0E 01 00 40 00 00 03 03 0C 00 00 35 74
02 0E 01 00 40 00 00 03 03 0C 00 00 35 74
02 0E 01 00 40 00 00 03 03 0C 00 00 35 74
02 0E 01 00 40 00 00 03 03 0C 00 00 35 74
02 0E 01 00 40 00 00 03 04 05 00 00 35 7A
02 0E 01 00 40 00 00 03 04 05 00 00 35 7A
02 0E 01 00 40 00 00 03 04 05 00 00 35 7A
02 0E 01 00 40 00 00 03 04 05 00 00 35 7A
02 0E 01 00 40 00 00 03 04 05 00 00 35 7A
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 06 34 00 00 35 49
02 0E 01 00 40 00 00 03 0B B8 00 00 35 C8
02 0E 01 00 40 00 00 03 0B B8 00 00 35 C8
02 0E 01 00 40 00 00 03 0B B8 00 00 35 C8
02 0E 01 00 40 00 00 03 0B B8 00 00 35 C8
02 0E 01 00 40 00 00 03 0B B8 00 00 35 C8
只有字节 9,10 和 14 发生了变化。然而,这些值并不直接对应于速度,更可能以某种方式与 RPM 相关,因为当我手动更改预期的车轮尺寸值时,LCD 知道任何给定命令的车轮尺寸和显示的速度变化。
Update2:字节 9 和 10 组合输出 0-3000 之间的值。该值是车轮完整旋转之间的毫秒数,因此可以在您知道周长的情况下计算速度。字节 14 似乎是某种校验和,如果有人可以练习如何计算它会很方便。