下面我将为你提供一个从零到一的完整指南,包括原理、所需硬件、接线步骤、代码编写、手机App控制以及扩展功能。

(图片来源网络,侵删)
项目原理
整个系统的核心思想是:
- 感知: Arduino通过Wi-Fi模块(如ESP8266或ESP32)连接到你的家庭网络。
- 控制: Arduino通过一个继电器模块来控制外部电器(如灯泡、风扇)的电源通断,继电器相当于一个“电子开关”,用Arduino的微弱电流去控制220V强电的通断。
- 通信: 手机App(或网页)通过局域网向Arduino发送指令(“打开开关”)。
- 执行: Arduino接收到指令后,控制继电器吸合或断开,从而控制电器的开关状态。
核心组件关系图:
[手机App] <--(Wi-Fi)--> [Arduino + Wi-Fi模块] <--(控制信号)--> [继电器模块] <--(220V交流电)--> [电器]
所需硬件清单
核心部分:
-
主控板:
- 推荐:
ESP8266(如 NodeMCU, Wemos D1 Mini) 或ESP32,这两种板子自带Wi-Fi和足够的GPIO引脚,是做物联网项目的首选,比传统Arduino Uno更合适。 - 为什么不用Arduino Uno? 因为Uno本身不带Wi-Fi,需要额外连接一个Wi-Fi模块(如ESP-01),接线更复杂,ESP8266/ESP32是“一站式”解决方案。
- 推荐:
-
继电器模块:
(图片来源网络,侵删)- 推荐: 1路或2路5V继电器模块,它已经包含了驱动电路,可以直接用Arduino的3.3V或5V信号控制,非常安全方便。
-
连接线: 杜邦线若干。
电源部分(非常重要!):
- 电源适配器:
- 给Arduino供电: 一个5V的USB电源适配器(给手机充电那种即可)。
- 给被控电器供电: 你墙上的插座。
被控电器:
- 你想控制的电器: 例如一盏台灯、一个小风扇等。注意:确保电器的功率在继电器模块的额定范围内(通常为250V AC, 10A)。
接线步骤
⚠️ 安全警告:在操作220V交流电时,务必小心!如果不确定,请寻求专业人士帮助,我们只操作继电器的低压控制端,220V接线最好在断电状态下进行。
Arduino/ESP8266 与 继电器模块接线
继电器模块上通常有3个接线柱:VCC, IN, GND。
| 继电器模块引脚 | ESP8266 / ESP32 引脚 | 功能说明 |
|---|---|---|
VCC |
3V3 或 5V |
为继电器模块供电 |
GND |
GND |
共地 |
IN |
D1 (GPIO5) |
控制信号输入,高电平触发继电器 |
- 注意: 大部分继电器模块是高电平触发(即给高电平,继电器吸合),购买时请确认,模块上通常会有一个
JD-VCC和VCC的跳线帽,我们直接使用VCC供电即可。
继电器模块与220V电器接线
继电器上有3个接线端子,通常用螺丝固定,上面会标有:
- COM: Common (公共端)
- NO: Normally Open (常开端)
- NC: Normally Closed (常闭端)
对于开关功能,我们使用 COM 和 NO。
接线逻辑:
- NO: 连接到你的电器的一端。
- COM: 连接到墙上的火线。
- 电器的另一端: 连接到墙上的零线。
示意图:
[墙上的插座]
|
|----------- (火线 L) ---> [继电器的 COM 端子]
|
|----------- (零线 N) ---> [电器的另一端]
|
[电器的火线端] ---> [继电器的 NO 端子]
- 工作状态: 当继电器未触发时,COM和NO是断开的,电器不通电。
- 工作状态: 当继电器触发时,COM和NO接通,电流形成回路,电器开始工作。
代码编写 (使用Arduino IDE)
我们将使用一个非常流行的库 Blynk 来快速实现手机App控制,它极大地简化了Wi-Fi通信和App界面开发的复杂度。
安装Blynk库
打开Arduino IDE,进入 工具 -> 管理库...,搜索 Blynk 并安装最新版本。
获取Blynk Auth Token
- 在手机应用商店下载并安装 Blynk App。
- 注册一个账号并登录。
- 点击右上角的“+”号,创建一个新项目。
- 选择你的设备(如
ESP8266),给你的项目起个名字(如 "My Smart Switch")。 - 在选择连接方式时,选择
Wi-Fi。 - 创建项目后,Blynk会给你一个 Auth Token (一串长字母数字)。请立即复制并保存好,它相当于你设备的身份证。
上传代码到Arduino/ESP8266
将下面的代码复制到Arduino IDE中,并修改其中的 ssid, password, 和 auth。
#define BLYNK_PRINT Serial // 开启串口打印,方便调试
// 引入库
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
// 你家里的Wi-Fi名称和密码
char ssid[] = "你的Wi-Fi名称";
char pass[] = "你的Wi-Fi密码";
// Blynk Auth Token
char auth[] = "你刚刚复制的Auth_Token";
// 定义继电器连接的引脚
#define RELAY_PIN D1 // 我们之前把继电器IN引脚接到了D1
// Blynk应用中的虚拟引脚号
#define VIRTUAL_PIN V1
// 当App上的按钮被按下时,Blynk会调用这个函数
BLYNK_WRITE(VIRTUAL_PIN) {
int pinValue = param.asInt(); // 获取按钮的状态 (1 或 0)
digitalWrite(RELAY_PIN, pinValue); // 将状态写入继电器引脚
// 我们可以通过串口监视器查看状态变化
Serial.print("App命令: ");
Serial.println(pinValue);
}
void setup() {
// 初始化串口,波特率设为115200
Serial.begin(115200);
// 设置继电器引脚为输出模式
pinMode(RELAY_PIN, OUTPUT);
// 初始状态:继电器关闭(给低电平)
digitalWrite(RELAY_PIN, LOW);
// 连接到Blynk服务器
Blynk.config(auth);
Blynk.connectWiFi(ssid, pass);
Serial.println("正在连接Blynk服务器...");
while (Blynk.connect() == false) {
// 等待连接成功
delay(500);
Serial.print(".");
}
Serial.println("\nBlynk服务器连接成功!");
}
void loop() {
// Blynk.run() 必须在loop()中循环调用,以处理App发来的指令
Blynk.run();
}
上传代码
- 在Arduino IDE中,选择正确的开发板(如
NodeMCU 1.0 (ESP-12E Module))和端口。 - 点击“上传”按钮。
手机App配置
- 打开Blynk App,你刚刚创建的项目应该已经存在了。
- 点击进入项目,点击屏幕上的“+”号,添加一个新组件。
- 选择 Button (按钮)。
- 在组件设置中:
- Pin: 选择
V1(必须和代码中定义的虚拟引脚号一致)。 - Output: 开启。
- Mode: 选择
Switch(开关模式)。
- Pin: 选择
- 保存设置并退出。
将你的Arduino插上电并连接到Wi-Fi,几秒钟后,Blynk App上的按钮应该就能正常工作了!点击按钮,你应该能听到继电器“咔哒”一声,同时连接的电器也相应地开关了。
进阶与扩展功能
当你完成了基础的开关控制后,可以尝试以下功能,让你的项目更“智能”:
定时开关
- 方法: 在Blynk App中添加一个 Time Input (时间输入) 组件。
- 实现: 设置一个特定时间(如每天晚上10点),当时间到达时,Blynk会向你的Arduino发送一个特定指令(例如写入V2引脚为1),你在代码中监听V2引脚,收到指令后就控制继电器动作。
物理按钮控制
- 方法: 在Arduino上再接一个普通的物理按钮。
- 实现: 将按钮一端接地,另一端连接到另一个GPIO引脚(如D2),并启用该引脚的上拉电阻,当按钮按下时,触发中断,在代码中切换继电器的状态,这样即使没有手机,也可以手动开关。
状态同步
- 问题: 如果直接断电再上电,App上的按钮状态可能和继电器实际状态不一致。
- 解决: 在
setup()函数中,你可以读取一次继电器的当前状态(digitalRead(RELAY_PIN)),然后通过Blynk.virtualWrite(VIRTUAL_PIN, state)将这个状态同步到App上,让App的按钮显示正确。
语音控制
- 方法: 使用支持语音助手的平台,如 Home Assistant、Tasmota 或 MQTT 协议。
- 实现:
- 将你的Arduino连接到家庭局域网的MQTT服务器(例如在树莓派上运行的Mosquitto)。
- Arduino订阅一个主题(如
home/office/light/set)。 - 在Home Assistant中,将这个设备添加为MQTT设备。
- 配置完成后,你就可以通过天猫精灵、小爱同学、Google Home等语音助手控制你的开关了。
数据记录与可视化
- 方法: 在Blynk App中添加 Value Display (数值显示) 或 Graph (图表) 组件。
- 实现: 你可以添加一个传感器(如光照传感器、温湿度传感器),将数据定期通过Blynk发送到App,实现远程环境监控。
希望这份详细的指南能帮助你成功制作出自己的Arduino智能开关!祝你玩得开心!
