硬件:
ESP 8266 Relay模块
物理开关
我用的是里面的四脚轻触开关
ESP 8266 01S 烧录器
usb转TTL模块
ACDC 220V转5V
给继电器5V供电
接线:
将随意贴拆开,轻触开关按下短接的两个脚,将01S上的GPIO 2 和 GND 接到这两脚上(按下开关,使GPIO2拉低)
esp8266 01S 三控 代码
。
//esp01通过blinker联网
#define BLINKER_WIFI//定义Blinker,初始化函数
#define BLINKER_MIOT_LIGHT//配置小爱同学开关灯接口
#include <Blinker.h>//导入Blinker包
char auth[] = "APP上获取的秘钥";//blinker app获取的产品密钥,通信服务商选择 点灯
char ssid[] = "名称";//WiFi名称
char pswd[] = "密码";//WiFi密码
// 新建组件对象
BlinkerButton Button1("Switch1");//注册开关按钮组件
//定义继电器开关
#define Relay_1 0 //定义继电器1信号接入GPIO0;
//定义物理开关
#define SW1 2 //GPIO2信号
bool oState = false;
void RelayState()
{
if(digitalRead(Relay_1)==LOW)
{
Button1.color("#FFFF00"); //设置app按键是纯黄色,16进制颜色码
Button1.text("开灯"); //设置app按键注释“开”
Button1.print("on");
oState = true;
}
else if(digitalRead(Relay_1==HIGH))
{
Button1.color("#808080"); //设置app按键是灰色,16进制颜色码
Button1.text("关灯"); //设置app按键注释“关”
Button1.print("off");
oState = false;
}
}
//app按键控制
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);//APP中的Monitor控件打印的信息
if (state=="on")
{
digitalWrite(Relay_1, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
RelayState();
//oState = true;
} else if(state=="off")
{
digitalWrite(Relay_1, HIGH);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
RelayState();
//oState = false;
}
}
//小爱控制
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ",state);
if (state == BLINKER_CMD_ON ) {//如果语音接收到是关闭灯就设置GPIO口为高电平
digitalWrite(Relay_1, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
RelayState();
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(Relay_1, HIGH);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
RelayState();
}
}
//刷新心跳包
void heartbeat()
{
RelayState();
//Blinker.delay(10);
}
//物理开关 轻触开关
void bdms()
{
if(digitalRead(SW1) == LOW)
{
digitalWrite(Relay_1, !digitalRead(Relay_1));
//反馈继电器1状态
RelayState(); //调用继电器反馈程序
Blinker.delay(1000); //必须加延时,切换速度
}
}
void setup(){
Serial.begin(115200);
pinMode(Relay_1,OUTPUT);
digitalWrite(Relay_1,HIGH);//初始化,由于继电器是低电平触发。所以刚开始设为高电平
Blinker.begin(auth, ssid, pswd);
//Button1.attach(button1_callback);
pinMode(Relay_1, OUTPUT);
digitalWrite(Relay_1, HIGH);
pinMode(SW1, INPUT_PULLUP); //本地开关输入上拉
Button1.attach(button1_callback); //绑定按键回调
//BlinkerMIOT.attachQuery(miotQuery); //小爱设备查询的回调函数miotQuery
BlinkerMIOT.attachPowerState(miotPowerState);//这段代码一定要加,不加小爱同学控制不了,务必在回调函数中反馈该控制状态
//app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态
Blinker.attachHeartbeat(RelayState);
}
void loop()
{
bdms();
Blinker.run();
}
平台搭建网上有好多教程,升级Blinker,导入开发板这些,网上都有教程。
注意事项:
烧录时将GPIO 0接到GND在上电就进入下载模式
点灯官方资料链接: 接入语音助手-小爱
ACDC电源模块尽量选择小一点可以装入86盒,打开电流在150mA左右,尽量选择3W或5W的电源
语音控制的时候 有概率概率出现 “先帮你操作了 看看设备状态吧”情况,更新为最新的0.3.9的Blinker也不行。