Rishi-Goyal/led-hue-cycle

GitHub: Rishi-Goyal/led-hue-cycle

逆向工程蓝牙 LED 灯带 BLE 协议的开源控制器,通过原生 Android 应用和 Python 脚本实现平滑的全色谱循环效果并支持后台常驻与多灯带同步。

Stars: 0 | Forks: 0

# led-hue-cycle 通过你自己的代码控制廉价的蓝牙“梦幻色彩” LED 灯带 —— 实现平滑、连续的整个灯带色调循环,平滑过渡完整的色谱(红 → 橙 → 黄 → 绿 → 青 → 蓝 → 紫 → 品红 → 红 ……),不会变暗、没有跳变、也没有追逐片段。支持**同步驱动多条灯带**,可以在**关闭屏幕的情况下在后台运行**,并自动重连。 专为广播名称为 **`LEDDMX-*`** 且随附 **"LED LAMP"** Android 应用(来自 Shenzhen Zhongji)的 BLE 控制器构建 —— 这些产品由许多品牌销售。本项目逆向工程了该应用的协议,让你能够自行驱动这些灯带。 | | | |---|---| | **推荐(目前可用)** | [Android 应用](android/) — 原生,后台前台服务,实时速度 + 起始颜色控制,同时支持两条灯带 | | **同时包含** | Python (`bleak`) 脚本 + 面向 Linux/BlueZ 或 USB BLE dongle 的协议逆向工程工具 | ## 硬件兼容性 已在以下设备上测试并确认: - **[One94Store Smart LED Strip Light 5M with App & Remote Control](https://www.amazon.in/One94Store-Lights-Remote-Gaming-Decoration/dp/B0FTQ5Q7BZ)** (Amazon.in,ASIN `B0FTQ5Q7BZ`)— RGBIC“梦幻色彩”灯带,2× 5 m 串联至 10 m。 只要你的灯带控制器符合以下条件,它就应该能正常工作: - 通过 BLE 广播,且名称以 **`LEDDMX-`** 开头(例如 `LEDDMX-03-XXXX`),并且 - 由 **"LED LAMP"** 应用(包名为 `com.ledlamp`)控制。该应用被许多商店品牌贴牌,因此许多无品牌的 Amazon/AliExpress“梦幻色彩”/“音乐同步”灯带都在使用它。 你可以使用 BLE 扫描器(例如 nRF Connect for Mobile)来检查你的设备 —— 如果你看到 `LEDDMX-*` 设备暴露了 GATT service `0xFFE0`,本项目就可以驱动它。 ### ⚠️ 不同灯带间的颜色顺序会有所不同 这些 RGBIC 灯带的颜色通道接线方式并不完全相同。上面的 One94Store 设备使用字节顺序 **R, B, G**(绿色和蓝色互换),这也是此处的默认设置。如果你的颜色显示错误 —— 典型的迹象是**蓝色显示为绿色**且**橙色显示为粉色** —— 请切换顺序: - **Android:** 编辑 [`LedService.java`](android/src/com/ledcycle/LedService.java) 中的帧 (即 tick 循环中的 `frame` 字节数组),以重新排列这三个颜色字节。 - **Python:** 在 `led_cycle.py` 中传入 `--color-order`(`rgb`、`rbg`、`grb`、`gbr`、`brg`、`bgr`)。使用 `python led_cycle.py --test red` 进行校准并调整,直到红色显示正常,然后用 `--test green` 确认。 注意:无论设置如何,这些灯带上饱和的**橙色**看起来都会显得浑浊/暗淡 —— 这是 RGBIC LED 的硬件限制(绿色混合较弱),而不是 bug。 ## 快速开始 — Android 应用(推荐) 手机将直接驱动灯带。有关完整的构建细节,请参阅 [android/README.md](android/README.md);简而言之(需要 JDK 17 + Android SDK,无需 Gradle): ``` cd android bash build.sh adb install -r build/ledcycle.apk adb shell pm grant com.ledcycle android.permission.BLUETOOTH_CONNECT adb shell pm grant com.ledcycle android.permission.POST_NOTIFICATIONS adb shell am start -n com.ledcycle/.MainActivity ``` 首先在 [`LedService.java`](android/src/com/ledcycle/LedService.java) 顶部的 `MACS` 数组中设置你的控制器地址 (可以通过 BLE 扫描器找到它们)。然后点击 **LED Cycle** —— 它将启动一个前台服务,并能在屏幕关闭的情况下保持循环;你可以通过通知将其停止。 ## 协议参考 逆向工程自 LED LAMP 应用;并与 [user154lt/LEDDMX-00](https://github.com/user154lt/LEDDMX-00) 交叉验证。所有帧均为 9 字节,以 `7B … BF` 作为帧边界。 - **Service:** `0000ffe0-0000-1000-8000-00805f9b34fb` - **Write characteristic:** `0000ffe1-0000-1000-8000-00805f9b34fb` (属性:WRITE / WRITE-NO-RESPONSE / NOTIFY / READ) | 命令 | 帧 | |---------------|----------------------------------------------| | 静态颜色 | `7B FF 07 C1 C2 C3 00 FF BF` | | 开关机 | `7B FF 04 03/02 FF FF FF FF BF` | | 亮度 | `7B FF 01 (pct*32/100) pct 00 FF FF BF` | | 图案 | `7B FF 03 idx FF FF FF FF BF` (idx 0–210) | `C1 C2 C3` 是这三个颜色字节。它们与物理红/绿/蓝的映射关系就是上文描述的**颜色顺序** —— 在经过测试的硬件上,顺序为 `R, B, G`,因此颜色 `(r,g,b)` 会作为 `7B FF 07 r b g 00 FF BF` 发送。 ## Python 脚本 纯 `bleak` 实现,以及用于逆向工程协议的工具: | 文件 | 用途 | |------|---------| | [`led_cycle.py`](led_cycle.py) | 色调循环效果(CLI:`--mac`、`--cycle-minutes`、`--brightness`、`--color-order`、`--test`) | | [`tools/scan.py`](tools/scan.py) | 查找 `LEDDMX-*` 设备,转储它们的 GATT 表 | | [`tools/send_test.py`](tools/send_test.py) | 写入单帧(颜色或原始十六进制数据)以进行测试 | | [`tools/parse_btsnoop.py`](tools/parse_btsnoop.py) | 从 Android HCI snoop 日志 / bugreport 压缩包中提取 ATT 写入操作 | | [`tools/phone_verify.*`](tools/) | 通过 ADB 驱动 nRF Connect 的自动化测试以验证帧 | ``` pip install -r requirements.txt python tools/scan.py # find devices + GATT python led_cycle.py --test red # colour-order calibration python led_cycle.py --cycle-minutes 30 --color-order rbg ``` 该控制器**一次只能接受一个连接** —— 在从电脑连接之前,请关闭手机应用(以及本项目的 Android 应用)。 ### ⚠️ Python 方式不支持 Windows 这些控制器拒绝 GATT **characteristic discovery** 的方式,是 Windows Bluetooth 堆栈(WinRT,被 `bleak` 以及基本上所有 Windows BLE 应用使用)所无法容忍的(`WinError -2147024838`),尽管 Android 可以正常处理。因此,Python 脚本需要**非 Windows 的 BLE 传输方式**: - **Linux / Raspberry Pi (BlueZ):** 直接运行 `led_cycle.py` —— 即可使用。 - **USB BLE dongle + [bumble](https://github.com/google/bumble):** 一个纯 Python 实现的 BLE 堆栈,它会接管 dongle 并通过 ATT handle 进行写入,从而绕过有问题的发现机制。无需改动内置无线电即可在 Windows 上工作。 如果是在 Windows 上且只有内置适配器,请改用 **Android 应用** —— 这就是将其作为推荐方案的原因。 ## 仓库结构 ``` android/ native Android app (the working, recommended solution) led_cycle.py Python hue-cycle effect (Linux/BlueZ or USB dongle) tools/ BLE scanner, frame sender, HCI-snoop parser, phone verifier requirements.txt Python deps (bleak) ``` ## 许可证 [Apache-2.0](LICENSE)。 ## 免责声明 本项目与 One94Store、Shenzhen Zhongji 或 LED LAMP 应用没有任何关联。这是一个独立的、针对你自己拥有的硬件的互操作性项目。使用风险自负。
标签:JS文件枚举, LED灯带控制, Python, 云资产清单, 域名枚举, 安卓开发, 无后门, 物联网(IoT)控制, 蓝牙低功耗(BLE), 逆向工具, 逆向工程