使用小度音箱+Blinker控制ESP01S Relay继电器模块

文章介绍了如何使用ESP01S模块替代ESP01,优化点包括LED灯和IO引脚的改变。在继电器模块选择上,由于ESP01S的GPIO0上电翻转问题,选择使用RXD(GPIO3)驱动继电器。搭建了ESP8266的Arduino开发环境,并通过BlinkerAPP实现与小度、小爱、天猫精灵等智能音箱的接口,控制继电器的开关。代码已上传至指定链接。

演示视频:

小度智能音箱控制ESP01S继电器模块 blinker APP

一. 使用ESP01S模块,PIN脚定义如下:

管脚功能如下:

ESP01S模块原理图:

ESP01S模块比ESP01模块做了以下优化:

  1. LED灯的管脚发生变化,由ESP01的TXD0变成ESP01s的GPIO2引脚;
  2. ESP01s模块的IO0、RST、EN引脚上加了上拉电阻,也就是说在连接了3v3引脚后这三个引脚也自动连接上高电平,无需再EN引脚上外接高电平。

ESP01模块外接引脚图:

https://i-blog.csdnimg.cn/blog_migrate/7d2bfb62db80390db4df7c71ae4a9e60.png

ESP01S模块外接引脚图:

二. 继电器模块选择:使用以下所示隔离款继电器模块

原理图如下:

模块使用GPIO0驱动继电器,但是ESP01S模块在上电时GPIO0会不受控制翻转,网上很多建议加电容但是效果不是很好,这里直接使用RXD (GPIO3)驱动继电器,需要修改软硬件。

三. 搭建ESP8266 Arduino开发环境:

这部分属于基础内容不再赘述,可以查看本人其它文章博客。

ESP01S模块烧录时选择“Generic ESP8266 Module”

四:程序编写和APP设置

代码支持小度音箱,小爱同学,天猫精灵,如下需定义三种智能音箱接口:

Blinker APP按键定义和功能:

在Blinker APP中新建网络接入设备,获取秘钥用于程序中使用。在APP中新建名字为Relay的开关按键,这样APP上的按键就和程序中的relay_callback功能对应起来。点击Blinker APP上的按键就会开关ESP01S 继电器模块。

最后的连接如下:

#define BLINKER_WIFI #define BLINKER_MIOT_OUTLET #define BLINKER_ALIGENIE_OUTLET #define BLINKER_DUEROS_OUTLET #include <Blinker.h> char auth[] = "40004e56d790"; // 替换为你的设备密钥 char ssid[] = "SBWXK2046"; // 替换为你的WiFi名称 char pswd[] = "08252292046"; // 替换为你的WiFi密码 BlinkerButton Button1("anniu"); // APP按钮组件 #define RELAY_PIN 5 // 使用 GPIO5 控制继电器 bool oState = false; // 插座当前状态 // 按钮回调函数 void button1_callback(const String &state) { BLINKER_LOG("收到按钮指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); oState = false; } Button1.print(state); } // 米家插座控制回调 void miotPowerState(const String &state) { BLINKER_LOG("收到米家指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); BlinkerMIOT.powerState("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); BlinkerMIOT.powerState("off"); oState = false; } BlinkerMIOT.print(); } // 天猫精灵控制回调 void aligeniePowerState(const String &state) { BLINKER_LOG("收到天猫精灵指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); BlinkerAliGenie.powerState("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); BlinkerAliGenie.powerState("off"); oState = false; } BlinkerAliGenie.print(); } // 小度音箱控制回调 void duerPowerState(const String &state) { BLINKER_LOG("收到小度指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); BlinkerDuerOS.powerState("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); BlinkerDuerOS.powerState("off"); oState = false; } BlinkerDuerOS.print(); } void setup() { Serial.begin(115200); BLINKER_DEBUG.stream(Serial); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); // 初始为断电状态 Blinker.begin(auth, ssid, pswd); BlinkerAliGenie.attachPowerState(aligeniePowerState); BlinkerAliGenie.powerState("off"); BlinkerAliGenie.print(); BlinkerMIOT.attachPowerState(miotPowerState); BlinkerMIOT.powerState("off"); BlinkerMIOT.print(); BlinkerDuerOS.attachPowerState(duerPowerState); BlinkerDuerOS.powerState("off"); BlinkerDuerOS.print(); Button1.attach(button1_callback); } void loop() { Blinker.run(); } 1:APP上能显示插座在线不用更改 2:增加ESP 12F控制继电器和插座通电 3: 取消米家 天猫连接
最新发布
08-25
#define BLINKER_WIFI #define BLINKER_MIOT_OUTLET #define BLINKER_ALIGENIE_OUTLET #define BLINKER_DUEROS_OUTLET #include <Blinker.h> char auth[] = "bd362db03847"; // 设备密钥 char ssid[] = "1"; // WiFi 名称 char pswd[] = "2"; // WiFi 密码 BlinkerButton Button1("anniu"); // APP按钮组件 #define RELAY_PIN D1 // 使用 ESP-12F 的 D1(GPIO5)控制继电器 bool oState = false; // 插座当前状态 // 按钮回调函数 void button1_callback(const String &state) { BLINKER_LOG("收到按钮指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); // 通电 oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); // 断电 oState = false; } Button1.print(state); // 同步按钮状态 } // 米家智能插座控制回调 void miotPowerState(const String &state) { BLINKER_LOG("收到米家指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); BlinkerMIOT.powerState("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); BlinkerMIOT.powerState("off"); oState = false; } BlinkerMIOT.print(); } // 天猫精灵控制回调 void aligeniePowerState(const String &state) { BLINKER_LOG("收到天猫精灵指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); BlinkerAliGenie.powerState("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); BlinkerAliGenie.powerState("off"); oState = false; } BlinkerAliGenie.print(); } // 小度音箱控制回调 void duerPowerState(const String &state) { BLINKER_LOG("收到小度指令: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(RELAY_PIN, LOW); BlinkerDuerOS.powerState("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(RELAY_PIN, HIGH); BlinkerDuerOS.powerState("off"); oState = false; } BlinkerDuerOS.print(); } void setup() { Serial.begin(115200); BLINKER_DEBUG.stream(Serial); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); // 初始为断电状态 Blinker.begin(auth, ssid, pswd); BlinkerDuerOS.attachPowerState(duerPowerState); BlinkerMIOT.attachPowerState(miotPowerState); BlinkerAliGenie.attachPowerState(aligeniePowerState); Button1.attach(button1_callback); } void loop() { Blinker.run(); } 修改下列代码的错误项 #define RELAY_PIN D1 // 使用 ESP-12F 的 D1(GPIO5)控制继电器 提示Compilation error: 'D1' was not declared in this scope; did you mean 'y1'?
08-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机毕业设计-远望创客学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值