SuperAPI AI 工具集

xiao-rf-remote-firebase

智能体与模型

查看项目

更新于 10-16 08:29

技能介绍

用途

将现有的 RF/IR 遥控器改造为可经互联网控制的 IoT 按钮。用户在手机或电脑浏览器上点击按钮,XIAO ESP32-S3 通过 NPN 晶体管(2N2222A)物理按压遥控器的按键板,从而触发原设备。数据通路为:浏览器 → Firebase Realtime Database → ESP32 设备。

主要能力

  • 网页端控制:托管于 https://<project>.web.app,使用 Google 登录,仅允许指定账号访问。点击电源按钮后写入 /remote/cmd = 服务器时间(ms)。
  • 数据库安全规则:仅允许指定的 Google 账号与 ESP32 设备账号访问 /remote 路径。
  • 设备端动作:ESP32 收到流(SSE)指令后,将 D3 拉高 0.4 秒,经 2N2222A 触发遥控器按钮。
  • 状态反馈:设备回写 /remote/ack(同值),并每 30 秒上报 /remote/device(lastSeen、rssi、ip);网页显示“遥控器已按下确认”与设备在线/离线状态。
  • 旧指令保护:忽略超过 15 秒的命令,避免 ESP32 重启后执行历史指令。
  • 计费:可运行于 Firebase Spark(免费)套餐。

技能文件

  • hardware.md:元件、按键板结构识别、接线图、晶体管引脚顺序、硬件故障排查。
  • scripts/setup.js:一次性完成数据库创建、文件生成、部署、ESP32 设备账号创建,可安全重复运行。
  • templates/firebase/:网页(public/index.html)、firebase.json、安全规则模板。
  • templates/RemoteFirebase/:ESP32 草图与 secrets.h 模板。

模板不含任何密钥;secrets.h 与安全规则由 setup.js 使用用户提供的值生成。

使用方式

0. 需向用户收集的信息

  • Wi-Fi 名称与密码(ESP32-S3 仅支持 2.4GHz)。
  • 允许在网页上点击按钮的 Google 账号(可多个,逗号分隔)。
  • 硬件准备状态(是否已确认按键板并完成接线;未完成则先按 hardware.md 进行)。
  • (可选)数据库区域,默认 asia-southeast1,也可用 us-central1、europe-west1。
  • 项目 ID 需全球唯一,由 Claude 生成为 rf-remote-<随机4~6字符>(小写字母、数字、连字符,6~30 字符)。

1. 环境检查

node --version            # 需 18 以上
firebase --version        # 无则 npm i -g firebase-tools
firebase login:list
arduino-cli version
arduino-cli core list
arduino-cli lib list
arduino-cli board list

缺失时安装:

arduino-cli config add board_manager.additional_urls https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
arduino-cli core update-index
arduino-cli core install esp32:esp32
arduino-cli lib install FirebaseClient

firebase login 为交互式命令,需用户自行在提示符输入 ! firebase login。执行 login 的 Google 账号即项目所有者,可与网页允许账号不同。

2. 创建 Firebase 项目与网页应用

firebase projects:create <project-id> --display-name "RF Remote"
firebase apps:create WEB rf-remote-web --project <project-id>

若项目已有 Realtime Database,建议新建项目,因为部署会整体覆盖 database.rules.json。

3. 运行 setup.js

node <SKILL_DIR>/scripts/setup.js \
  --project <project-id> \
  --owner "me@gmail.com,family@gmail.com" \
  --ssid "<Wi-Fi 名称>" --wifi-pass "<Wi-Fi 密码>" \
  --out ./rf-remote

脚本依次:查询 apiKey;创建默认 Realtime Database;生成部署目录与含 secrets.h 的草图目录;执行 firebase deploy --only hosting,auth,database;创建 ESP32 设备账号。重复运行安全,会复用已有设备密码并校正账号。PowerShell 中需将续行符 \ 改为单行或使用反引号。

4. 上传 ESP32

arduino-cli compile --upload -p <端口> --fqbn esp32:esp32:XIAO_ESP32S3 ./rf-remote/RemoteFirebase

不要附加 :CDCOnBoot=cdc,该选项反而关闭 USB 串口。若端口不可见或上传失败,按住 XIAO 的 BOOT 键再插 USB 后重试。

5. 验证

读取 115200 串口日志 30~40 秒,正常应显示 Wi-Fi IP、RSSI 与认证完成、开始监听 /remote/cmd 流。随后在手机打开网页,用允许的 Google 账号登录,确认“设备在线”,点击电源按钮并观察串口、网页确认与实际设备反应。

适用场景

适用于希望不改动遥控器原电路、通过物理按压方式实现远程控制的家用设备,例如远程开启风扇、灯具等由 RF/IR 遥控器控制的电器。需要用户具备 Firebase 账号、Node 与 Arduino CLI 环境,并完成硬件接线。

限制与已知问题

  • ESP32-S3 仅支持 2.4GHz Wi-Fi,5GHz 专用路由器无法连接。
  • 项目 ID 需全球唯一。
  • 配置值与硬件相关的说明:串口无输出多因误加 CDCOnBoot=cdc;Wi-Fi 失败需核对 SSID/密码与频段;认证错误 INVALID_LOGIN_CREDENTIALS 需重跑 setup.js 校正密码;OPERATION_NOT_ALLOWED 说明 Email/Password 登录未开启;流 401 为安全规则设备邮箱与 DEVICE_EMAIL 不一致;“权限不足”为登录账号不在 --owner 中;auth/unauthorized-domain 需在控制台添加授权域名;“设备无响应”需检查供电与 Wi-Fi;启动后短暂忽略旧指令属正常。
  • Windows 上 firebase 命令结束时的 Assertion failed 为已知信息,可忽略。
  • 自定义点:按钮引脚 #define BTN D3、按压时长 pressPower() 的 delay(400)(可增至 800)、多按钮可通过 /remote/<按钮名>/cmd 分路径并增加引脚与流,安全规则无需修改;修改模板后需改技能 templates/ 并重跑 setup.js,直接修改输出目录会被覆盖。

(价格、平台范围等未在资料中明确说明的部分暂未提供。)