OpenEPaperLink/OpenEPaperLink
GitHub: OpenEPaperLink/OpenEPaperLink
开源电子价签替代固件和协议,基于 ESP32 接入点实现对多种电子墨水屏标签的低功耗无线管理与内容推送。
Stars: 1675 | Forks: 160
# OpenEPaperLink
这是一个适用于多种电子价签 (Electronic Shelf Labels) 的替代固件和协议。它可用于设置 E-Paper 标签并向其提供内容。
本项目中的软件由两部分组成:接入点固件和标签固件。
此外,还有用于接入点和编程器接口(用于对标签进行编程,最好使用编程夹具)的各种硬件设计。
## 目标
- 低功耗(目前约为 9µA,最小延迟为 40 秒)
- 周围没有 AP 时功耗更低
- 低延迟(标签可以每 40 秒检查一次新数据)
- 高传输速度 - 在良好的 RF 条件下,传输速度可以达到约 5kbyte/s。这有助于进一步降低功耗
- 对 RF 友好 - 我们不需要确认每一个数据包,也不需要传输已经存在的数据
## 搭建 OpenEPaperLink 需要什么
在 [Wiki](https://github.com/jjwbruijn/OpenEPaperLink/wiki) 上有大量关于各种标签和构建接入点的信息。
整个搭建过程需要几个标签和一个 ESP32。其中一个标签用作 ESP32 的 802.15.4 无线电模块。你需要一个 ZBS_Flasher 来刷写标签。在 ZBS_Flasher 上使用 'mac' 选项可以确保刷入自定义固件的标签具有有效的 mac 地址;如果标签之前没有被刷写过,它会使用出厂分配的 mac 地址。如果你想自行设置,可以在信息页中编辑 mac 地址。
你可以通过飞线或柔性 PCB 将 AP 标签连接到 ESP32。ESP 会自动将 AP 固件刷入标签。在某些情况下,需要进行一次关机/开机循环。请检查串行控制台输出以获取状态信息。
对 ESP32 编程后,请务必同时对其文件系统进行编程。这会将包含 Web 界面的 'data' 文件夹上传到 ESP32。
## OpenEPaperLink 组成部分和链接
* [Mini AP](https://github.com/OpenEPaperLink/Hardware/tree/main/OpenEPaperLink%20Mini%20AP)
* [集成的 Flasher 和 AP](https://github.com/OpenEPaperLink/Hardware/tree/main/OpenEPaperLink%20AP%20and%20Flasher)
* [ATC1441 的 ZBS flasher 页面](https://github.com/atc1441/ZBS_Flasher)
* [标签规格](https://github.com/jjwbruijn/OpenEPaperLink/wiki#tags)
* [标签故障排除](https://github.com/jjwbruijn/OpenEPaperLink/wiki/Troubleshooting-Tags)
## 协议说明
- 标签每 40 秒或更长时间向 AP 登记一次。实际的登记间隔很大程度上取决于 RF 条件,或者 AP 是否指示标签延迟下一次登记。
- AP 维护着一个列表,记录了有待传输数据的标签 MAC 地址。
- 如果标签登记,AP 会回复无数据或有关待传输数据的信息。
- 标签会检查此信息是否已下载到 EEPROM,或者是否已经显示。如果是这种情况,标签会通过向 AP 发送一个“传输完成”数据包来立即取消传输。
- 随后标签会开始请求 4096 字节的“数据块”。AP 会回复请求的 ACK,并说明收集数据所需的时间。标签会进入睡眠状态,直到 AP 发送数据。
- AP 请求 ESP32 填充其块缓冲区,并指定 MD5 和 blockID。
- AP 发送数据块,一个完整的块大约需要 42 个数据包。标签会跟踪它已经接收到的数据块。
- 在接收到有缺失部分的数据块后,标签会请求相同的块,并附带一个指示缺失部分位掩码。
- AP 根据标签的请求回复这些部分。如果请求的块数量不多,AP 会在数据块中填充重复的部分,以增加成功传输的几率。
- 在接收到一个完整的数据块后,标签会对所有接收到的数据进行简单的校验和计算。如果校验和匹配,这 4K 数据将被存储在 EEPROM 中以备后用。
- 标签现在要么请求下一个块,要么在校验和失败时重新发起完整请求。
- 如果所有数据块都已接收,标签将发送“传输完成”。
- AP 将向 ESP32 报告已完成的传输,并从队列中移除此传输的 pendingData。
## 已知问题:
- 某些标签作为 AP 使用时效果优于其他标签。你的覆盖范围可能不佳。这些标签上的电路板非常微小且脆弱。例如,在电路板上滴一滴热熔胶就足以使其严重变形,并会损坏上面焊接的元件。据报道,段码屏的 Solum 标签效果很好。
## 提示与免责声明:
- 不提供任何形式的保证。完全没有。无论是明示的还是默示的。此代码不适合用于任何目的。请不要使用此代码做任何恶意的事情。
- 在为不同的开发板进行构建之间,请执行一次 ```make clean```。这真的很有帮助!
- 本仓库基于适用于 Linux 的 SDCC 4.2.0 进行构建。不同的 SDCC 版本可能会有非常大的差异。请加载 (Source) sdcc/setup.sh 来设置并构建一个本地副本,然后使用它进行编译。
- 我们非常高兴和荣幸能看到你的 pull requests!但是请注意,请不要提交单纯的代码/缩进风格修改 :)
## 自动构建
- PR 合并到 main 分支后,更改的代码将被编译。
- 在发布版本中,会添加文件以启用 OTA


## 许可证
[知识共享署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/)
标签:802.15.4, ESL, ESP32, IoT, RF射频, Web界面, 低功耗设计, 协议栈, 固件开发, 客户端加密, 嵌入式系统, 开源硬件, 接入点, 无线通信, 智能家居, 标签管理, 物联网, 电子价签, 电子墨水屏, 电子纸, 硬件设计