TagTinker项目解剖:protocol、IR、NFC、scenes、cloud-plugins与ESP32固件模块完整导览
TagTinker项目解剖protocol、IR、NFC、scenes、cloud-plugins与ESP32固件模块完整导览【免费下载链接】TagTinkerFlipper Zero app for ESL research using IR. All based on https://www.furrtek.org/?aesl项目地址: https://gitcode.com/gh_mirrors/ta/TagTinkerTagTinker 是一款运行在 Flipper Zero 上的红外 ESL电子价签研究工具它通过红外 LED 向支持红外更新的电子纸价签发送自定义文字与图片还能借助 NFC 扫描添加标签目标、通过 ESP32 开发板 云端插件渲染实时内容加密货币行情、天气、徽章卡等。本文带你完整导览仓库中六大核心模块——protocol/、ir/、nfc/、scenes/、cloud-plugins/ 与 esp32-wifi-fw/帮你快速理解这个红外价签工具箱的架构与数据流。️ 它是什么一个红外 ESL 工具箱TagTinker 只做一件事把像素和文字变成红外信号驱动零售电子价签ESL显示你想要的画面。根据 Flipper Zero 官方的说法这类 ESL 传输的是和电视遥控器一样的纯红外信号安全性完全依赖协议保密——这正是安全研究爱好者感兴趣的地方。典型工作流是用浏览器版的图片准备工具web-image-prep/index.html单文件、零依赖把图片调色、抖动、量化成 Flipper 可用的 BMP把 BMP 拷进 SD 卡的apps_data/tagtinker/dropped/目录在应用里通过Targeted Payloads → 标签 → Set Image选择图片、指定页面、发送。⚠️硬件警告很多红外 ESL 价签把固件、地址和显示数据存在易失性 RAM 里电池耗尽或取出后标签会变砖通常无法恢复。请只测试你自己合法拥有的标签。 整体架构数据如何从代码流到电子纸六个模块各司其职一条清晰的数据管线贯穿始终模块路径职责协议层protocol/条形码解码、标签档案表、RLE 压缩、构建 IR 帧发射层ir/把成帧数据经红外 LED 发出去处理重复与时序NFC 层nfc/读取价签 NFC 芯片里的 NDEF URI自动解析出条形码场景层scenes/21 个 UI 场景覆盖主菜单、广播、目标管理、WiFi 插件云端插件cloud-plugins/Cloudflare Worker网络渲染插件行情/天气/徽章桥接固件esp32-wifi-fw/ESP32-S2 开发板固件充当 Flipper 与云端之间的薄桥状态中枢定义在 tagtinker_app.hTagTinkerApp结构体持有 GUI、视图、发射线程、NFC 线程、最多 16 个保存目标、BLE 同步与 WiFi 插件的全部运行状态——读这个文件就能摸清整个应用记得什么。 protocol红外协议的核心protocol/tagtinker_proto.h 是理解 TagTinker 的第一站文件头注释写得很直白这一层把条形码、像素和载荷字节变成 Flipper 通过 IR 发送给标签的帧。它负责四件关键的事条形码 → 地址价签 17 位条形码的第 13~16 位是类型码tagtinker_barcode_to_plid()把它转成 4 字节 PLID 地址tagtinker_barcode_to_profile()再查内置档案表protocol/tagtinker_proto.c得到分辨率、点阵/段码类型、是否支持红/黄强调色等信息图片压缩tagtinker_rle_compress()用价签原生的 RLE 紧凑格式压缩位图Raw 模式则保留 1 bit/像素组帧唤醒帧、刷新帧、图片参数帧、每帧 20 字节的数据帧、广播帧、MCU 帧全部由tagtinker_make_*系列函数构建帧最大 96 字节完整序列tagtinker_build_image_sequence()把唤醒 → 图片参数 → 数据块 → 刷新串成一次完整的 IR 传输。有意思的细节SmartTAG Color 2.6类型码 1626的玻璃面板是横版 296×152但线上格式是竖版 152×296协议层专门做了坐标旋转tagtinker_color26_proto_to_glass用户无感。 ir红外发射引擎ir/tagtinker_ir.h 暴露的 API 非常克制——它只发送已经建好的 ESL 帧tagtinker_ir_transmit()把帧数据经 Flipper 内置红外 LED 发出重复帧采用 PP4 时序tagtinker_ir_is_busy()/tagtinker_ir_stop()供 UI 层查询发射状态、随时中止。发射在独立线程里跑tx_thread见 tagtinker_app.h界面不会被阻塞。文字渲染则依赖 views/tagtinker_font.h 里的 5×7 位图字体把 ASCII 文本直接画进价图像素缓冲。 nfc扫一下就能添加目标手动输入 17 位条形码很痛苦于是有了 nfc/tagtinker_nfc.h。许多 ESL 价签内置 NFC 芯片里面藏着指向厂商服务器的 NDEF URI——末段路径里就藏着 ESL 的 ID。解码流程分两步tagtinker_nfc_extract_url()从 Mifare Ultralight / NTAG 芯片的 TLV 区提取 URI 主体tagtinker_nfc_decode_url()再把末段 ID 解析成标准条形码一步到位可用tagtinker_nfc_decode_barcode()。tagtinker_nfc_classify()会把扫描结果分类为四种可解码 / 疑似无线电标签 / 未识别 / 不可读对应界面上不同的提示。注意NFC 扫描只能读出芯片里的数据无法判断显示模块到底听红外还是无线电——所以 README 建议对未识别的红外标签改用 Type Barcode手动输入。️ scenes21 个场景构成的 UIFlipper 的 Scene Manager 模式在这里体现得很标准scenes/tagtinker_scene.h 枚举了 21 个场景SceneCount收尾每个场景都有统一的三件套回调_on_enter、_on_event、_on_exit。几个值得留意的场景文件tagtinker_scene_main_menu.c一级入口——Broadcast广播、Targeted Payloads定向目标、WiFi Plugins、Abouttagtinker_scene_broadcast.c / tagtinker_scene_broadcast_menu.c向所有在听价签发翻页、调试屏帧tagtinker_scene_target_actions.c单个目标的动作集——推送文字、推送已同步图片、自定义尺寸、删除目标等tagtinker_scene_nfc_scan.cNFC 扫描添加目标tagtinker_scene_wifi_plugins.c、tagtinker_scene_wifi_setup.c、tagtinker_scene_wifi_run.cWiFi 插件的发现、配网与运行三步骤输入类组件tagtinker_scene_barcode_input.c条形码输入配合自绘数字键盘 views/numlock_input.c。☁️ cloud-plugins云端渲染插件TypeScript这是全仓库最有网感的部分。cloud-plugins/src/index.ts 是一个 Cloudflare Worker对外只暴露两个端点GET /plugins返回全部插件清单id、名称、描述、强调色支持、参数定义GET /render/:id?w..h..accent..按目标尺寸实时渲染返回小端二进制的位平面流宽、高、平面数、行步长 平面数据。插件抽象定义在 cloud-plugins/src/plugin.ts每个插件就是一个对象含manifest描述元数据和render()画到Canvas上。内置四个插件都在 cloud-plugins/src/plugins/crypto.ts加密行情卡拉取 CoinGecko 实时价格与走势线三色标签会获得强调色火花线填充weather.ts极简天气卡含城市、温度、未来两日预报identicon.tsDEF CON 风格硬件徽章卡同一种子生成同款 identicongithub.tsGitHub 用户球星卡——头像、简介、Stars/Followers/Repos 三栏数据。最大亮点新增插件只需往plugins/里丢一个文件、在index.ts注册一行重新部署 Worker 即可——Flipper 固件和 ESP 开发板永远不用重新烧录。上图就是crypto插件的真实效果ETH/USD 价格卡直接显示在一块零售 Pricer 电子纸价签上。 esp32-wifi-fwESP32-S2 薄桥固件把 Flipper 的 GPIO 排针上插一块 ESP32-S2 WiFi 开发板wifi/ 目录是 FAP 侧客户端网络功能就点亮了。固件设计哲学在 esp32-wifi-fw/main/main.c 的注释里说得很清楚ESP 不再是重客户端不带插件、字体、绘图原语而是一座薄桥Flipper LIST_PLUGINS→ ESP 转发GET cloud/plugins→ 把 JSON 翻译成 FAP 认识的PLUGIN帧序列Flipper RUN_PLUGIN→ ESP 转发GET cloud/render/id?...→ 字节流按RESULT_BEGIN N×RESULT_CHUNK RESULT_END打包回传。相关文件esp32-wifi-fw/main/wifi_link.c / wifi_link.h与 Flipper 之间的 UART 帧收发esp32-wifi-fw/main/wifi_net.c配网、连接状态、RSSI/IP 上报esp32-wifi-fw/main/cloud_client.c与 Worker 的 HTTP 交互esp32-wifi-fw/shared/tt_wifi_proto.h0xAA 0x55 定界帧协议的唯一事实源FAP 侧通过 shared/tt_wifi_proto_fap.h 这一薄桩头文件复用同一协议FAP 侧异步客户端见 wifi/tagtinker_wifi.hopen/close、set_creds、list_plugins、run_plugin事件HELLO、插件清单、进度、结果分块、链路丢失通过单一回调送达。想指向自己的部署修改固件的CONFIG_TT_CLOUD_URL编译宏把开发板指向你自建的cloud-plugins/Worker 即可。️ 一键构建Makefile 导览根目录 Makefile 包裹了三套工具链无参数执行make可列出全部目标命令产出make setup创建.venv/装 ufbt、下载 Flipper SDK、npm ciWorker 依赖make build-all一次构建 FAP Worker ESP32 固件make build-fapdist/tagtinker.fapFlipper 应用make launch构建并安装到 USB 连接的 Flippermake build-espesp32-wifi-fw/build/tagtinker_wifi.bin需 ESP-IDF v5.2make flash-esp烧录开发板make serve-web本地预览图片准备工具源码优先source-first.fap不直接发布用ufbt从仓库自建保证与你的固件版本匹配。克隆仓库后可从git clone https://gitcode.com/gh_mirrors/ta/TagTinker开始。✅ 小结TagTinker 的架构可以浓缩成一句话protocol 组帧、ir 发射、nfc 加目标、scenes 管界面、cloud-plugins 画内容、ESP32 做桥。每一层都足够薄、边界足够清晰——这正是它既适合安全研究教学、又容易扩展新插件的原因。无论你想搞懂红外 ESL 协议的帧结构还是给自己的电子纸价签加一块实时行情屏从这里出发都能少走弯路。 免责提醒TagTinker 仅用于教育研究、协议学习与展示你自己合法拥有的设备上的数字艺术。严禁用于篡改商店价签、干扰第三方设施或任何非法用途。【免费下载链接】TagTinkerFlipper Zero app for ESL research using IR. All based on https://www.furrtek.org/?aesl项目地址: https://gitcode.com/gh_mirrors/ta/TagTinker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考