ESP 8266 01S改小爱+开关+APP

本文介绍了如何使用ESP 8266 01S和Relay模块创建一个可通过小爱同学控制的智能开关,连接物理开关并利用Blinker平台实现远程操控。接线时,将GPIO 2与GND短接以控制继电器。注意在烧录固件时,GPIO 0需接地。尽管存在偶尔的语音控制问题,但整体方案提供了智能家居的便捷体验。
摘要由CSDN通过智能技术生成

硬件:
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也不行。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值