欢迎来到威聚,大家如果有需要哪个项目编译好的软件但无法自己下载可以进入项目推荐页面告诉我,我上传到网盘供大家下载使用!
威扬盘搜

JMGO-MQTT-Remote

智能家居 C++ MIT C++ 人工编写 推荐 ★4 中等

更新于 2026-11-03 15:22:37

这是什么

JMGO-MQTT-Remote 是一套跑在 ESP32 上的固件,把 JMGO 投影仪接入 MQTT 与 Home Assistant。它并不是简单地发红外或模拟遥控器,而是复刻了手机 App 与投影仪之间的两条真实通路:

  • BLE 广播唤醒:发送蓝牙广播包把待机中的投影仪唤醒;
  • 局域网 TCP 控制:连接投影仪的 LAN 控制端口 9005,发送导航与电源菜单指令;
  • MQTT 桥接:订阅命令主题、发布状态主题,方便自动化编排。

为什么值得关注

投影仪这类设备的官方 App 通常只支持手机、且难以接入自动化。这个项目把「开机 → 切 HDMI1 → 关机」这类日常动作固化成了 MQTT 命令,接上 Home Assistant 后可以和灯光、幕布、音响做场景联动,比如「观影模式」一键完成降幕布、开投影、切 HDMI、调暗灯光。

硬件与依赖

  • 开发板:ESP32 Dev Module / DevKit、ESP32-WROOM-32、ESP32-WROVER 系列均可
  • 框架:PlatformIO + Arduino
  • 关键库:
    • h2zero/NimBLE-Arduino(BLE 广播唤醒)
    • knolleary/PubSubClient(MQTT 客户端)
  • 环境要求:JMGO 投影仪与 ESP32 在同一局域网,另需一个 MQTT Broker(Mosquitto 或 Home Assistant 内置 MQTT)

已测试机型

  • JMGO N1
  • JMGO N1S
  • JMGO N1 Ultra

同系列机型大概率可用,但 LAN 指令序列和端口是否一致需要自行验证。

MQTT 用法

默认主题:

jmgo/remote/cmd
jmgo/remote/state

支持的命令:

命令 动作
wake 仅发送 BLE 唤醒广播
on / wake_hdmi1 / power_on 唤醒投影仪,等待启动后切到 HDMI1
hdmi1 执行切 HDMI1 的 LAN 导航宏
power_menu 打开电源菜单
power_off / off 打开电源菜单、下移、确认关机
up / down / right / ok / enter 发送单个 LAN 遥控按键

示例:

mosquitto_pub -h <mqtt-host> -p 1883 -u <user> -P '<password>' \
  -t jmgo/remote/cmd -m hdmi1

状态主题使用 retained 消息,重启后的订阅者也能立刻拿到当前状态。

配置与烧录

项目不把密钥写进仓库,需要在 PlatformIO 的 include 路径下自建 secrets.h,填写 Wi-Fi、MQTT、OTA、投影仪 IP 等参数;.env.example 只是同名变量的说明。

pio run -e esp32dev                 # 编译
pio run -e esp32dev -t upload      # USB 烧录
pio run -e esp32ota -t upload      # OTA 烧录
pio device monitor -b 115200        # 串口日志

使用建议

  • 先在串口把投影仪 IP 固定下来(路由器里做 DHCP 静态绑定),避免 IP 变化导致控制失效。
  • 唤醒后需要留出启动时间再切 HDMI,固件里已有等待逻辑,但不同机型启动速度不同,可以按需调整。
  • 关机是「菜单 + 下移 + 确认」的按键宏,如果投影仪菜单布局变化,需要同步修改按键序列。
  • 建议在 Home Assistant 里封装成 button / switch 模板实体,配合「观影模式」脚本使用。

适用场景

想把投影仪纳入全屋自动化、又不想依赖厂商云服务的用户;手上有闲置 ESP32、且投影仪就在同一网段的情况最合适。

按更新时间依次阅读