☰
深度剖析眼动模块串口通信协议:0x5A 0xA5帧结构、命令字与校验和机制全解读
2026/9/25 7:59:40 网站建设 项目流程

深度剖析眼动模块串口通信协议:0x5A 0xA5帧结构、命令字与校验和机制全解读

【免费下载链接】eye-tracking-module源师兄扩展项目: 眼动模块 | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/eye-tracking-module

眼动模块是源师兄组织打造的圆形屏外接扩展板,通过串口(UART)通信控制屏幕上眼睛的形态与内容。本文带你完整解读它的串口通信协议:0x5A 0xA5帧结构、常用命令字、校验和校验机制,帮助新手快速看懂并上手控制。

一、眼动模块能做什么?

根据 config.json 中的描述,该模块的核心功能是"通过串口控制眼动模块的眼睛状态"。在图形化编程环境中,你可以直接使用"眼动模块"分类下的现成积木(见 category.json):

  • 🎨清屏颜色:清屏或填充白色、红色、蓝色、绿色、黄色、橙色
  • 👀眼睛状态:眼睛、眨眼、向上看、向下看、向左看、向右看、左下看、右下看

积木的定义与 Python 代码生成逻辑位于 blocksdef.js,而所有底层协议实现都集中在 library/CircularScreenExtend.py 这一个文件中。

二、帧结构:如何读懂一帧 0x5A 0xA5 数据

设备发给眼动模块的数据都以"帧"为单位,统一帧结构如下:

字节位置内容说明
第 1~2 字节0x5A 0xA5帧头(魔数),接收方靠它识别一帧的起点
第 3 字节长度"命令字 + 数据"的字节数
第 4 字节命令字指定本帧要执行的具体操作
第 5 字节起数据命令对应的参数
最后 1 字节校验和对帧内数据的累加校验值

💡 为什么用0x5A 0xA5做帧头?这种"不易在正常数据中出现"的字节组合就是魔数(Magic Number),接收端在串口数据流中读到它,就表示一帧新命令到来了。

三、校验和机制:如何保证一帧数据没被传坏

串口线路易受干扰,协议因此加入了简单高效的累加校验:

校验和 = 帧中校验字节之前的所有字节之和,取低 8 位(& 0xFF)

以"清屏"命令为例,整帧为0x5A 0xA5 0x04 0x01 颜色高 颜色低 校验和,其中校验和 =0x5A + 0xA5 + 0x04 + 0x01 + 颜色高 + 颜色低的低 8 位。接收端收到后重新求和,与末字节不符即判定丢包或串包,丢弃该帧。

在 library/CircularScreenExtend.py 中可以看到核心实现:

checksum = sum(command_data) & 0xFF command_data.append(checksum)

⚠️ 细节提示:0x22(图片叠图标)命令的校验口径略有不同,仅对"命令字 + 数据"部分求和(见build_image_icon_cmd),手工拼帧时务必对照源码。

四、命令字速查表:5 个常用串口命令一览

命令字功能数据内容
0x04清屏 / 填充颜色1 字节参数 + RGB565 颜色(2 字节)
0x03显示内置图片图片 ID(0~72)
0x11画文字模式/字号 + 文字色 + 背景色 + 坐标 + GB2312 文本
0x21批量显示内置图标图标数量 + 各图标的地址、宽高、坐标
0x22大图上叠加图标图片 ID、位置 + 图标列表

几个新手容易踩坑的点:

  • 颜色用 RGB565 格式:源码rgb888_to_rgb565把 RGB888 压缩成 5+6+5 位,再拆成高低 2 字节传输
  • 文字用 GB2312 编码:含无法编码的字符时自动降级为 ASCII
  • 多字节数值是大端序:坐标、地址等一律先发高字节、后发低字节
  • 内置资源:模块闪存中预置了 4 张动物图标(牛、兔、狗、蛇)与 0~9 数字图标,见icon_tables资源表

五、代码如何组帧:三步看懂原理

以show_pic_command(显示内置图片)为例,组帧只有三步:

  1. 拼出帧头0x5A 0xA5、长度、命令字0x03和图片 ID
  2. 计算并追加校验和
  3. uart.write一次性写出整帧,再延时 50ms 等模块处理

你无需手工拼帧——library/CircularScreenExtend.py 已把每个命令的组帧逻辑封装成函数,调用时只填参数即可。

六、上手实战:连接串口与常见问题

  • 串口选择:默认使用硬件 UART2;也可通过SUART函数指定软串口引脚(P1 / P2 / P8 / P12 / P15 / P16)
  • 发送后等待:每条命令后都有 50ms 延时给模块处理时间,不要连续快速刷屏
  • 调试口诀:命令无响应时,先查帧头写没写对,再手工验算校验和
  • 眼睛状态的真相:眨眼、看左看右其实是依次发送0x03命令切换不同图片 ID 实现的,例如"眨眼"就是播放 0 → 19 → 20 → … → 25 → 0 的序列,见eye_blink函数

总结

眼动模块的串口协议是一套经典的"帧头 + 长度 + 命令字 + 数据 + 校验和"结构:用0x5A 0xA5标记帧起点,用命令字0x03 / 0x04 / 0x11 / 0x21 / 0x22区分功能,用校验和保障数据完整。掌握这套帧结构后,你完全可以自定义新的眼睛状态与屏显内容,全部实现可参考 library/CircularScreenExtend.py。

【免费下载链接】eye-tracking-module源师兄扩展项目: 眼动模块 | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/eye-tracking-module

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询