ESP32-C3 灯带控制项目:固件 + Android 控制 App + AstrBot 插件。
- 固件:HTTP + BLE 双控,四档亮度(关/低/中/高),PWM 柔和渐变
- Android App:BLE 控制,双通道扫描,记忆设备自动连接
- AstrBot 插件:微信机器人自然语言控制灯光
├── firmware/ ESP32 固件(Arduino)
│ └── esp32c3_light_control/
├── android/ Android 控制 App
│ ├── LightControlApp/ App 源码
│ ├── build.ps1 手动构建脚本(免 Gradle/Android Studio)
│ └── app-release/ 已构建的 APK
├── plugin/ AstrBot 微信机器人插件
│ └── esp32_pwm_control/ ESP32 PWM 灯光控制插件
- ESP32-C3 开发板
- MOS 管(驱动灯带)
- 灯带(共阳/共阴按 MOS 接法)
接线:MOS 栅极接 ESP32-C3 GPIO10(MOS_PWM_PIN)。
用 Arduino IDE 打开 firmware/esp32c3_light_control/esp32c3_light_control.ino,安装 ESP32 开发板支持后烧录。
BLE(服务 4fafc201-1fb5-459e-8fcc-c5c9c331914b,特征 beb5483e-36e1-4688-b7f5-ea07361b26a8,属性 READ/WRITE/NOTIFY):
| 写入值 | 功能 |
|---|---|
0 |
关闭 |
1 |
低档(PWM 40) |
2 |
中档(PWM 130) |
3 |
高档(PWM 255) |
设备特征写入后返回 OK 或 Invalid(通过 notify)。
HTTP(静态 IP 192.168.1.11):
GET /off -> 关闭
GET /low -> 低档
GET /mid -> 中档
GET /high -> 高档
GET /gear -> {"gear":0} 当前档位
固件开头(必须修改为自己的 WiFi 信息):
const char* WIFI_SSID = "你的WiFi名";
const char* WIFI_PWD = "你的WiFi密码";
uint8_t lightGear[4] = {0, 40, 130, 255}; // 四档 PWM 值
#define TRANSITION_STEP 2 // 渐变步长(越大越快)
#define TRANSITION_INTERVAL 20 // 渐变间隔 ms(越小越平滑)- BLE 扫描(双通道:新 API + 旧 API 兜底,无过滤,兼容国产 ROM)
- 四档亮度控制
- 记忆上次设备,下次打开自动连接(失败自动重试 3 次)
- 运行日志(排查连接问题)
直接安装 android/app-release/LightControlApp-debug.apk(debug 签名,个人使用)。
本机需要 JDK 11+。构建脚本会使用 D:\android-build 下的 JDK / build-tools / platform(首次需手动准备,见脚本头部路径变量)。
powershell -ExecutionPolicy Bypass -File build.ps1
产物:LightControlApp-debug.apk
说明:项目去掉了 androidx 依赖(纯 Android framework API),因此可以完全不依赖 Gradle/Google Maven 构建,适合离线环境。
微信机器人插件,支持自然语言控制灯光(需要 AstrBot 部署环境)。
把 plugin/esp32_pwm_control/ 整个目录放到 AstrBot 的插件目录,重启 AstrBot。
- 低档 / 中档 / 高档 / 开灯 / 关灯 / 查询灯光
修改 main.py 顶部:
ESP32_IP = "192.168.1.11" # ESP32 局域网 IP
WEB_PORT = 80注意:AstrBot 所在设备需与 ESP32 在同一局域网。
MIT