☰
ESP8266+MQTT打造远程门铃:从硬件接线到Home Assistant联动
2026/10/12 3:34:15 网站建设 项目流程

1. 从一个“按不响的门铃”说起:这个项目到底在解决什么问题

先聊一个特别接地气的场景。家里有老人,腿脚不太方便,偏偏住的是老式小区,单元门铃是那种最传统的按压式——按下去,屋里响,松开,声音停。问题来了:老人从客厅走到门口需要时间,访客按了两下没人应就走了;或者老人正在午睡,门铃响了,等他挪到门口,人早没影了。更麻烦的是,有些门铃装在门外,屋里那台“响铃器”位置固定,声音还小,厨房开着抽油烟机根本听不见。

这个项目的出发点就是:把门铃从“物理线路”里解放出来,让它变成一个可以被远程感知、远程触发、甚至远程回应的东西。核心硬件选型是 ESP8266,一个便宜到离谱、但功能足够强的 Wi-Fi 微控制器模块。整个系统做的事情可以概括成一句话:门外有人按铃,ESP8266 检测到这个动作,通过 Wi-Fi 把信号发出去,你的手机、电脑或者另一个房间的蜂鸣器就能收到通知并做出响应;反过来,你也可以在手机上点一下,让门口的蜂鸣器响起来,起到“远程应答”或者“远程驱赶”的作用。

我最早接触这类需求,是帮一个朋友改造他工作室的门禁。他那个工作室在一栋老厂房里,门口没有门铃,访客只能打电话,但他手机常年静音,经常漏接。后来我们用 ESP8266 加一个按钮和一个有源蜂鸣器,做了个最简版本:按钮按下,ESP8266 通过 MQTT 发一条消息到手机上的通知 App,同时本地蜂鸣器响一声作为“已触发”反馈。就这么个东西,成本不到三十块,解决了他大半年的痛点。

所以这个项目适合谁看?如果你手头有 ESP8266 开发板(NodeMCU、Wemos D1 mini 都行),会一点 Arduino 编程,想做一个“能远程控制、能远程被通知”的小玩意儿,那这篇内容就是给你写的。不需要你懂复杂的网络协议,也不需要你买额外的网关设备,ESP8266 自己就能连 Wi-Fi、自己就能发消息。下面我会把整个设计思路、硬件接线、代码实现、踩坑记录全部拆开讲,你照着做就能复现。

2. 整体设计思路:为什么选 ESP8266,为什么用 MQTT

2.1 核心需求拆解:远程“按铃”和远程“响铃”是两件事

很多人一上来就把需求想成“远程控制门铃”,但实际拆开看,它包含两个方向的数据流:

  • 上行方向:本地按钮被按下 → ESP8266 检测到 → 通过网络通知远程端(手机/电脑/另一个设备)。这叫“远程感知”或者“远程触发通知”。
  • 下行方向:远程端(手机/电脑)发出指令 → ESP8266 收到 → 本地蜂鸣器响。这叫“远程控制”。

这两个方向可以独立存在,也可以合在一起。比如你只想要“有人按门铃,我手机响”,那只需要上行;你只想要“我在楼上按一下手机,楼下蜂鸣器响”,那只需要下行。但大多数实际场景是两者都要:访客按门铃,我手机收到通知,我点一下手机,门口蜂鸣器响一声表示“知道了,稍等”。这就是一个完整的双向交互。

ESP8266 在这两个方向里都扮演核心角色:它既是输入设备(读按钮状态),又是输出设备(驱动蜂鸣器),同时还是网络节点(收发消息)。一颗芯片全包了,这是它最吸引人的地方。

2.2 为什么不用蓝牙、不用 433MHz 射频、不用 4G

选型这件事,我一般从三个维度看:覆盖范围、功耗、成本。

蓝牙的覆盖范围通常只有十米左右,穿一堵墙就衰减得厉害,适合手机和耳机这种近距离配对,不适合“我在外面也能收到门铃通知”的场景。433MHz 射频模块便宜、穿墙好,但它只能做单向或简单的双向通信,而且需要额外的接收端和发射端配对,没法直接和手机交互,你还得再做一个网关把射频信号转成网络信号,复杂度反而上去了。4G 模块(比如 SIM800 系列)覆盖最广,但成本高、功耗大、还需要插卡和流量费,对于“家里门铃”这种固定场景属于杀鸡用牛刀。

ESP8266 的优势在于:它自带 Wi-Fi 协议栈,只要家里有路由器,它就能连上网;它的 GPIO 足够驱动按钮和蜂鸣器;它的价格在十块钱上下;它的开发环境(Arduino IDE)极其成熟,库多、例子多、社区活跃。对于这个项目,Wi-Fi 的覆盖范围刚好匹配“家”这个场景——路由器在客厅,门铃在门口,中间隔一堵墙,信号通常没问题。如果实在信号弱,加一个便宜的中继或者换一个带外置天线的 ESP8266 模块就能解决。

2.3 通信协议选 MQTT 而不是 HTTP 轮询

这是整个项目里最关键的一个技术决策。很多人第一反应是用 HTTP:ESP8266 作为客户端,定时向服务器发请求,问“有没有新指令”。但轮询有两个致命问题:一是延迟高,你设 5 秒轮询一次,那最坏情况下指令要 5 秒后才生效;二是耗电和耗流量,即使没有指令,ESP8266 也要不停地发请求,对于长期通电的设备来说虽然电费不多,但网络请求频繁会增加不稳定因素。

MQTT 是发布/订阅模型。ESP8266 连上 MQTT 服务器(Broker)后,订阅一个主题(Topic),比如doorbell/command。当手机端向这个主题发布一条消息时,Broker 会立刻把消息推送给 ESP8266,延迟通常在几十毫秒级别。反过来,ESP8266 检测到按钮按下,向doorbell/event主题发布一条消息,手机端订阅了这个主题,就能立刻收到通知。整个过程是事件驱动的,没有轮询,没有空转,效率高得多。

我实测下来,在同一局域网内,从按钮按下到手机收到 MQTT 消息,延迟基本在 100 毫秒以内;如果 Broker 在公网(比如自己租的轻量服务器),延迟大概在 200 到 500 毫秒,取决于网络状况。这个延迟对于门铃场景完全够用。

注意:MQTT Broker 可以自己搭(比如用 Mosquitto),也可以用公共的测试 Broker。但公共 Broker 安全性无法保证,任何人都可能订阅你的主题。如果只是家里玩玩,可以用公共 Broker 加一个随机字符串作为主题前缀;如果在意隐私,建议在局域网内搭一个 Mosquitto,或者用带认证的云服务。

2.4 硬件清单与成本估算

这个项目的硬件极其简单,我列一个表,你照着买就行:

组件型号/规格数量参考单价(元)作用
主控板NodeMCU ESP8266 或 Wemos D1 mini112~20核心控制器,连 Wi-Fi
按钮6x6mm 轻触开关10.5模拟门铃按钮
蜂鸣器有源蜂鸣器 5V11.5本地响铃
电阻10kΩ10.1按钮下拉
电阻1kΩ10.1蜂鸣器限流(可选)
面包板400 孔15免焊接搭建
杜邦线公对公若干2连接

总成本控制在 25 元以内。如果你用 Wemos D1 mini,体积更小,可以直接塞进一个 3D 打印的小盒子里。有源蜂鸣器意味着给它通电就响,不需要 ESP8266 输出 PWM 波形,代码更简单。如果你手头只有无源蜂鸣器,那就需要用tone()函数输出特定频率,稍微麻烦一点,但也能做。

3. 核心细节解析:GPIO 电平、按钮消抖、MQTT 主题设计

3.1 ESP8266 的 GPIO 编号与电平逻辑

ESP8266 的 GPIO 编号和物理引脚编号不是一一对应的,这是新手最容易懵的地方。NodeMCU 开发板上印的 D0、D1、D2 是板级编号,对应到芯片内部的 GPIO 编号是另一套。比如 D1 对应 GPIO5,D2 对应 GPIO4,D5 对应 GPIO14,D6 对应 GPIO12。如果你在代码里写digitalRead(D1),Arduino 核心库会帮你做映射,但如果你直接操作寄存器或者用底层函数,就必须用 GPIO 编号。

我建议在代码里统一用板级编号(D1、D2 这种),可读性好,不容易出错。但要注意,ESP8266 有几个引脚有特殊功能:GPIO0 影响启动模式(拉低进入 Flash 下载模式),GPIO2 和 GPIO15 也有启动时的电平要求,GPIO16 不支持内部上拉。所以选引脚的时候,尽量避开这些“敏感引脚”,用 D1、D2、D5、D6、D7 这些比较省心的。

这个项目里,按钮接在 D2(GPIO4),蜂鸣器接在 D1(GPIO5)。按钮一端接 D2,另一端接 GND,同时 D2 通过 10kΩ 电阻上拉到 3.3V。这样按钮未按下时,D2 读到高电平;按下时,D2 被拉到 GND,读到低电平。这就是所谓的“低电平有效”接法,抗干扰能力比高电平有效强,因为 GND 通常比 3.3V 更稳定。

3.2 按钮消抖:为什么你按一下,ESP8266 会认为你按了十下

机械按钮在按下和松开的瞬间,金属触点会有几毫秒到几十毫秒的抖动,产生一串快速的高低电平变化。如果你直接用digitalRead()读,ESP8266 的主频是 80MHz 或 160MHz,它能在这几毫秒里读到几十次变化,结果就是你按一下,程序认为你按了十下。

解决方法有两种:硬件消抖和软件消抖。硬件消抖是在按钮两端并联一个 0.1μF 的电容,把抖动滤掉。软件消抖是在代码里检测到电平变化后,延时 20 到 50 毫秒再读一次,如果还是低电平,才确认按下。我一般用软件消抖,因为不用额外加元件,代码里加几行就行。

const int BUTTON_PIN = D2; int lastButtonState = HIGH; unsigned long lastDebounceTime = 0; const unsigned long DEBOUNCE_DELAY = 50; void checkButton() { int reading = digitalRead(BUTTON_PIN); if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) { if (reading == LOW && lastButtonState == HIGH) { // 确认按下,执行触发逻辑 publishDoorbellEvent(); } } lastButtonState = reading; }

这段代码的逻辑是:每次读到电平变化,就重置计时器;只有电平稳定超过 50 毫秒,才认为是有效动作。实测下来,50 毫秒的延时人眼几乎感觉不到,但能过滤掉绝大多数抖动。

3.3 MQTT 主题设计:别把消息发错地方

MQTT 的主题(Topic)是一个用斜杠分隔的字符串,比如home/doorbell/event。发布者向某个主题发消息,订阅者订阅这个主题就能收到。主题的设计要遵循几个原则:

  • 层级清晰:用斜杠分隔不同维度,比如home/floor1/doorbell/event。
  • 避免通配符滥用:#匹配所有层级,+匹配单层。订阅home/#会收到所有以home开头的消息,方便但容易收到无关消息。
  • 区分上行和下行:我一般用doorbell/event表示按钮触发事件,doorbell/command表示远程控制指令。两个主题分开,逻辑清晰。

这个项目里,ESP8266 启动后做两件事:订阅doorbell/command,这样手机发指令它能收到;同时,当按钮按下时,向doorbell/event发布一条消息,内容可以是"pressed"或者带时间戳的 JSON。手机端(可以用 MQTT 客户端 App,比如 MQTT Dashboard)订阅doorbell/event,就能收到通知。

提示:如果你在公共 Broker 上测试,主题名一定要加随机前缀,比如a1b2c3/doorbell/event,否则别人可能也在用doorbell/event,你的消息会串到别人那里去。

3.4 蜂鸣器驱动:有源和无源的区别

有源蜂鸣器内部有振荡电路,给它 3.3V 或 5V 电压就响,频率固定。无源蜂鸣器需要外部给它一个方波信号,频率决定音调。ESP8266 的 GPIO 输出电流有限,一般不超过 12mA,而蜂鸣器工作电流可能在 20mA 以上,所以直接驱动可能会声音小或者烧引脚。稳妥的做法是加一个 NPN 三极管(比如 S8050)做开关,GPIO 控制基极,蜂鸣器接在集电极和电源之间。

如果你手头只有有源蜂鸣器,而且声音要求不高,可以直接接 GPIO 和 GND,中间串一个 1kΩ 电阻限流。我试过 Wemos D1 mini 直接驱动 5V 有源蜂鸣器,声音确实偏小,但近距离能听见。如果要响亮,还是加三极管。

4. 实操过程:从接线到代码,一步步复现

4.1 硬件接线:面包板上的完整布局

先把 NodeMCU 插在面包板中间,USB 口朝外。然后按下面的对应关系接线:

  • 按钮:一端接 D2,另一端接 GND。D2 和 3.3V 之间接 10kΩ 电阻(上拉)。
  • 蜂鸣器:正极接 D1,负极接 GND。如果是有源蜂鸣器且声音小,正极改接 5V(NodeMCU 的 VU 引脚),D1 通过 1kΩ 电阻接蜂鸣器正极,同时蜂鸣器负极接 GND。这样 GPIO 只提供控制信号,电流从 5V 走。

接线完成后,先别急着写代码,用万用表测一下:按钮未按下时 D2 对 GND 电压应该是 3.3V 左右;按下时应该是 0V。蜂鸣器正极对 GND 应该有电压。确认无误再上电。

4.2 开发环境配置:Arduino IDE 加 ESP8266 支持

如果你还没装 Arduino IDE,先去官网下载。装好后,打开“首选项”,在“附加开发板管理器网址”里填入 ESP8266 的板管理器地址(这个地址在 GitHub 的 esp8266/Arduino 仓库里有,搜一下就能找到)。然后在“工具”->“开发板”->“开发板管理器”里搜索esp8266,安装最新版本。

安装完成后,在开发板列表里选NodeMCU 1.0 (ESP-12E Module)或者LOLIN(WEMOS) D1 mini,端口选你插上 USB 后出现的那个。上传速度选 115200,Flash Size 选 4MB。这些设置不对的话,上传会报错。

4.3 核心代码:连接 Wi-Fi、订阅主题、发布事件

下面是我实际用的代码框架,基于 PubSubClient 库。你需要先在 Arduino IDE 的库管理器里安装PubSubClient。

#include <ESP8266WiFi.h> #include <PubSubClient.h> const char* SSID = "你的Wi-Fi名称"; const char* PASSWORD = "你的Wi-Fi密码"; const char* MQTT_SERVER = "broker地址"; const int MQTT_PORT = 1883; const char* MQTT_USER = ""; const char* MQTT_PASS = ""; const char* TOPIC_EVENT = "a1b2c3/doorbell/event"; const char* TOPIC_COMMAND = "a1b2c3/doorbell/command"; const int BUTTON_PIN = D2; const int BUZZER_PIN = D1; WiFiClient espClient; PubSubClient client(espClient); int lastButtonState = HIGH; unsigned long lastDebounceTime = 0; const unsigned long DEBOUNCE_DELAY = 50; void setup_wifi() { delay(10); WiFi.begin(SSID, PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void callback(char* topic, byte* payload, unsigned int length) { String message; for (unsigned int i = 0; i < length; i++) { message += (char)payload[i]; } if (String(topic) == TOPIC_COMMAND) { if (message == "ring") { digitalWrite(BUZZER_PIN, HIGH); delay(500); digitalWrite(BUZZER_PIN, LOW); } } } void reconnect() { while (!client.connected()) { if (client.connect("ESP8266Doorbell", MQTT_USER, MQTT_PASS)) { client.subscribe(TOPIC_COMMAND); } else { delay(5000); } } } void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(BUZZER_PIN, LOW); setup_wifi(); client.setServer(MQTT_SERVER, MQTT_PORT); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); int reading = digitalRead(BUTTON_PIN); if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) { if (reading == LOW && lastButtonState == HIGH) { client.publish(TOPIC_EVENT, "pressed"); } } lastButtonState = reading; }

这段代码里,INPUT_PULLUP启用了 ESP8266 内部的上拉电阻,所以外部那个 10kΩ 电阻其实可以省掉。但内部上拉电阻阻值较大(约 30kΩ 到 100kΩ),抗干扰能力不如外部 10kΩ,如果环境电磁干扰强,还是建议加外部电阻。

4.4 手机端接收通知:用 MQTT 客户端 App

手机端不需要写代码,装一个 MQTT 客户端 App 就行。安卓上可以用 MQTT Dashboard,iOS 上可以用 MQTTool 或者 EasyMQTT。配置好 Broker 地址和端口,订阅a1b2c3/doorbell/event,然后按一下面包板上的按钮,手机应该立刻收到一条pressed消息。

如果要实现“手机点一下,蜂鸣器响”,就在 App 里向a1b2c3/doorbell/command发布ring。ESP8266 收到后,会驱动蜂鸣器响 500 毫秒。

注意:有些 MQTT App 在后台会被系统杀掉,导致收不到通知。安卓上需要在电池优化里把 App 设为“不优化”,iOS 上需要保持 App 在后台刷新权限开启。如果要求高,可以用 Telegram Bot 或者 Pushover 这类推送服务做中转,但那就需要额外的服务器逻辑,复杂度会上升。

4.5 参数计算:上拉电阻和限流电阻怎么选

上拉电阻的选取:ESP8266 的 GPIO 输入阻抗很高,上拉电阻的作用是在按钮未按下时把引脚拉到高电平。阻值太小,按钮按下时电流大,浪费电;阻值太大,抗干扰能力弱。10kΩ 是一个折中值,按下时电流 3.3V / 10kΩ = 0.33mA,几乎可以忽略;同时 10kΩ 的阻抗对于大多数干扰源来说足够低。

蜂鸣器限流电阻的选取:如果蜂鸣器直接接 GPIO,假设蜂鸣器内阻 100Ω,工作电流 3.3V / 100Ω = 33mA,超过 ESP8266 的 12mA 上限。串一个 1kΩ 电阻后,电流降到 3.3V / 1100Ω = 3mA,声音会小很多。所以直接驱动只适合小电流蜂鸣器,大声音还是要用三极管。

5. 常见问题与排查技巧实录

5.1 ESP8266 连不上 Wi-Fi 怎么办

这是最常见的问题。先确认 SSID 和密码有没有写错,注意大小写和特殊字符。如果路由器开了 5GHz 频段,ESP8266 只支持 2.4GHz,要确保连的是 2.4GHz 的网络。如果路由器设置了 MAC 地址过滤,要把 ESP8266 的 MAC 地址加进去。还有,ESP8266 的天线是板载的,如果放在金属盒子里或者紧贴墙面,信号会很差,尽量让它远离金属和混凝土墙。

我遇到过一次,ESP8266 死活连不上,最后发现是路由器开了“AP 隔离”功能,导致设备之间不能通信。关掉就好了。所以排查的时候,先看路由器设置,再看代码。

5.2 MQTT 连接失败:返回码告诉你原因

PubSubClient 库的client.connect()返回 false 时,可以用client.state()获取具体错误码。常见的有:

返回码含义排查方向
-4连接超时Broker 地址或端口不对,或者网络不通
-3连接丢失网络不稳定,或者 Broker 主动断开
-2连接失败Broker 拒绝连接,检查用户名密码
-1断开连接未连接状态
0连接成功正常
1协议版本不支持Broker 不支持 MQTT 3.1.1
2客户端 ID 被拒绝客户端 ID 重复,换一个
4用户名密码错误检查认证信息
5未授权没有权限发布或订阅该主题

我踩过的一个坑是客户端 ID 重复。ESP8266 默认用"ESP8266Client"作为客户端 ID,如果你有两个设备同时连同一个 Broker,第二个会被踢掉。解决办法是给每个设备一个唯一的 ID,比如加上芯片 ID 的后几位。

5.3 按钮触发不灵敏或者误触发

如果按钮按下去没反应,先检查接线是否松动,特别是面包板上的杜邦线,接触不良是常态。如果误触发频繁,说明消抖时间不够,把DEBOUNCE_DELAY从 50 毫秒加到 100 毫秒试试。如果还是不行,可能是按钮质量太差,换一个品牌好点的轻触开关。

还有一个隐蔽的问题:ESP8266 在 Wi-Fi 发送数据时,射频电路会产生电磁干扰,可能耦合到按钮引脚上,导致误触发。解决办法是在按钮引脚和 GND 之间并联一个 0.1μF 电容,把高频干扰滤掉。

5.4 蜂鸣器声音小或者不响

先确认蜂鸣器是有源还是无源。有源蜂鸣器接反了不响,长脚是正极,短脚是负极。无源蜂鸣器需要tone()函数驱动,直接给高低电平不会响。如果是有源蜂鸣器但声音小,检查供电电压,5V 的蜂鸣器接 3.3V 声音会明显偏小。如果加了三极管还是不响,检查三极管引脚排列,S8050 的引脚顺序是发射极、基极、集电极,不同封装可能不同,用万用表测一下。

5.5 设备运行一段时间后死机

ESP8266 长时间运行可能会因为内存泄漏或者看门狗超时死机。解决办法是在loop()里加yield()或者delay(1),让系统有时间处理后台任务。另外,PubSubClient 库在断线重连时可能会阻塞,建议把重连逻辑放在非阻塞的定时器里,不要用while死等。

我一般会在代码里加一个看门狗,用ESP.wdtFeed()定期喂狗,防止程序卡死。如果还是不稳定,可以考虑用 ESP32 替代,双核处理,稳定性好很多,但成本也高一些。

6. 扩展玩法:从单点控制到场景联动

6.1 接入 Home Assistant 做自动化

如果你家里有 Home Assistant,这个项目可以无缝接入。Home Assistant 内置 MQTT 集成,你只需要在配置文件里加一段:

mqtt: binary_sensor: - name: "Doorbell Button" state_topic: "a1b2c3/doorbell/event" payload_on: "pressed" off_delay: 1 switch: - name: "Doorbell Buzzer" command_topic: "a1b2c3/doorbell/command" payload_on: "ring"

这样门铃按钮就变成了一个二进制传感器,蜂鸣器变成了一个开关。你可以在 Home Assistant 里做自动化:按钮按下时,手机推送通知、客厅灯闪烁、音箱播报“有人按门铃”。这就是从“远程控制”升级到“场景联动”。

6.2 增加离线缓存和重试机制

如果 Wi-Fi 临时断了,按钮按下的事件会丢失。解决办法是在 ESP8266 上做本地缓存:检测到按钮按下时,先把事件存到一个数组里,等 Wi-Fi 恢复后批量发布。PubSubClient 的publish()返回 true 表示发送成功,返回 false 表示失败,可以根据返回值决定是否重试。

但要注意,ESP8266 的内存有限,缓存不能太大,一般存最近 10 条就够了。如果要求高,可以加一个 SPIFFS 文件系统,把事件写到 Flash 里,但 Flash 有写入寿命限制,频繁写会损坏。

6.3 用 Deep Sleep 做电池供电版本

如果门铃位置没有电源插座,可以用电池供电。ESP8266 支持 Deep Sleep 模式,电流可以降到 20μA 左右。但 Deep Sleep 模式下 GPIO 状态会丢失,按钮触发需要用到外部唤醒功能。具体做法是:按钮一端接 RST 引脚,另一端接 GND,按下时把 RST 拉低,ESP8266 复位启动,连 Wi-Fi 发消息,然后再次进入 Deep Sleep。

这个方案的问题是每次唤醒都要重新连 Wi-Fi,耗时 2 到 3 秒,而且电池寿命取决于按钮按下的频率。如果一天按 10 次,用 2000mAh 的电池大概能撑几个月。如果按得很频繁,还是老老实实接电源。

7. 我个人在实际操作中的几点体会

这个项目我从最早的单向通知版本,做到双向控制,再到接入 Home Assistant,前后改了三四版。最大的体会是:硬件项目的稳定性,一半靠代码,一半靠接线。代码写得再漂亮,面包板上有一根线接触不良,照样时好时坏。所以如果你打算长期用,一定要从面包板过渡到洞洞板或者 PCB,焊接比插线可靠得多。

另一个体会是,MQTT 主题的命名一定要提前规划好。我最早用doorbell作为主题,后来想加第二个门铃,发现主题冲突了,只能全部改一遍。如果一开始就用home/floor1/doorbell/event这种层级结构,扩展起来就从容很多。

最后,关于安全性,如果你把 MQTT Broker 暴露在公网,一定要开认证和 TLS。我见过太多人用公共 Broker 不加密码,结果家里的灯被别人控制。虽然门铃这个场景风险不大,但养成好习惯总没错。局域网内用的话,风险可控,但也建议给 Broker 设个用户名密码,多一层保护。

这个项目后续还可以这样扩展:加一个摄像头模块,按钮按下时拍一张照片发到手机;或者加一个 RFID 读卡器,实现刷卡开门;再或者用 ESP-NOW 协议做多个门铃之间的直接通信,不依赖路由器。玩法很多,核心思路都是一样的:感知、传输、响应。把这三点打通了,剩下的就是堆功能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询