用ESP8266和小爱同学语音实现智能开关

通过ESP8266模块与Blinker对接,并接入小爱同学,实现语音控制

1. 硬件准备

  • ESP8266开发板
  • 继电器
  • 烧入设备CH340
  • 220V转5V电灯
  • 一条充电器线

2. 软件准备

  • 安装 Arduino IDE 和 ESP8266 扩展包

    Arduino IDE默认没有集成ESP8266扩展包,因此需要单独安装。扩展包可以通过Arduino IDE中开发板管理器安装,也可以使用离线安装包。安装扩展包后,即可在Arduino IDE菜单 > 工具 > 开发板中选择对应的开发板

    其中,Arduino IDE下载需要1.8.x及以上版本,ESP8266扩展需要2.5.0版本

  • 手机下载 点灯科技APP 

3. 开发

  1. 生成Key
  2. 添加独立设备
  3. 通过WIFI接入,并选择阿里云.生成key,并复制到剪贴板以备用

4. 烧录

  1. 安装 Arduino IDE
  2. 打开light.in 

    #define BLINKER_WIFI
    #define BLINKER_MIOT_LIGHT//小爱同学
    
    #include <Blinker.h>
    
    char auth[] = "f00c2c8069d2"; //Key
    char ssid[] = "H3C_3AAF1E";
    char pswd[] = "trj19611120";
    
    bool wsState;
    uint8_t wsMode = BLINKER_CMD_MIOT_DAY;
    
    BlinkerButton ButtonAll("btn-lightAll"); //定义按钮数据
    BlinkerButton ButtonR("btn-lightR");     //定义按钮数据
    BlinkerButton ButtonG("btn-lightG");     //定义按钮数据
    BlinkerButton ButtonB("btn-lightB");     //定义按钮数据
    
    BlinkerButton ButtonOffAll("btn-unlightAll"); 
    BlinkerButton ButtonOffR("btn-unlightR"); 
    BlinkerButton ButtonOffG("btn-unlightG"); 
    BlinkerButton ButtonOffB("btn-unlightB"); 
    
    BlinkerButton Button3("btn-aaa");  
    
    bool oState = false;
    int counter = 0;
    
    
    void miotPowerState(const String & state)
    {
        BLINKER_LOG("need set power state: ", state);
    
        if (state == BLINKER_CMD_ON) {     //小爱同学控制开命令
            digitalWrite(5, LOW);
            digitalWrite(4, LOW);
            digitalWrite(0, LOW);
    
            BlinkerMIOT.powerState("on");
    
            BlinkerMIOT.print();
    
            oState = true;
        }
        else if (state == BLINKER_CMD_OFF) {   //小爱同学控制关命令
            digitalWrite(5,HIGH);
            digitalWrite(4,HIGH);
            digitalWrite(0,HIGH);
    
            BlinkerMIOT.powerState("off");
    
            BlinkerMIOT.print();
    
            oState = false;
        }
    }
    
    void miotMode(uint8_t mode)
    {
        BLINKER_LOG("need set mode: ", mode);
    
        if (mode == BLINKER_CMD_MIOT_DAY) { //红色
          digitalWrite(5, LOW);
          digitalWrite(4, HIGH);
          digitalWrite(0, HIGH);
        }
        
        else if (mode == BLINKER_CMD_MIOT_NIGHT) { //绿色
          digitalWrite(5, HIGH);
          digitalWrite(4, LOW);
          digitalWrite(0, HIGH);
            // Your mode function
        }
        
        else if (mode == BLINKER_CMD_MIOT_COLOR) { //蓝色
          digitalWrite(5, HIGH);
          digitalWrite(4, HIGH);
          digitalWrite(0, LOW);
        }
        
        else if (mode == BLINKER_CMD_MIOT_WARMTH) { //黄色
          digitalWrite(5, LOW);
          digitalWrite(4, LOW);
          digitalWrite(0, HIGH);
        }
        
        else if (mode == BLINKER_CMD_MIOT_TV) { //紫色
          digitalWrite(5, LOW);
          digitalWrite(4, HIGH);
          digitalWrite(0, LOW);
        }
        
        else if (mode == BLINKER_CMD_MIOT_READING) { //青色
          digitalWrite(5, HIGH);
          digitalWrite(4, LOW);
          digitalWrite(0, LOW);
        }
        
        else if (mode == BLINKER_CMD_MIOT_COMPUTER) {
          digitalWrite(5, HIGH);
          digitalWrite(4, HIGH);
          digitalWrite(0, LOW);
        }
    
        wsMode = mode;
    
        BlinkerMIOT.mode(mode);
        BlinkerMIOT.print();
    }
    
    
    void miotQuery(int32_t queryCode)      //小爱同学控制
    {
        BLINKER_LOG("MIOT Query codes: ", queryCode);
    
        switch (queryCode)
        {
            case BLINKER_CMD_QUERY_ALL_NUMBER :
                BLINKER_LOG("MIOT Query All");
                BlinkerMIOT.powerState(oState ? "on" : "off");
                BlinkerMIOT.print();
                break;
            case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
                BLINKER_LOG("MIOT Query Power State");
                BlinkerMIOT.powerState(oState ? "on" : "off");
                BlinkerMIOT.print();
                break;
            default :
                BlinkerMIOT.powerState(oState ? "on" : "off");
                BlinkerMIOT.print();
                break;
        }
    }
    
    void dataRead(const String & data)      // 如果未绑定的组件被触发,则会执行其中内容
    {
        BLINKER_LOG("Blinker readString: ", data);
    
        Blinker.vibrate();
        
        uint32_t BlinkerTime = millis();
        
        Blinker.print("millis", BlinkerTime);
    }
    
    void buttonAll_callback(const String & state)     //点灯app内控制按键触发
    {
        
        digitalWrite(5,LOW);
        digitalWrite(4,LOW);
        digitalWrite(0,LOW);
        BLINKER_LOG("get button state:on", state);
    
    }
    
    void buttonR_callback(const String & state)     //点灯app内控制按键触发
    {
        
        digitalWrite(5,LOW);
        BLINKER_LOG("get button state:on", state);
        
    }
    
    void buttonG_callback(const String & state)     //点灯app内控制按键触发
    {
        
        digitalWrite(4,LOW);
        BLINKER_LOG("get button state:on", state);
    
    }
    
    void buttonB_callback(const String & state)     //点灯app内控制按键触发
    {
        
        digitalWrite(0,LOW);
        BLINKER_LOG("get button state:on", state);
    
    }
    
    void buttonOffAll_callback(const String & state)     //点灯app内控制按键触发
    {
        digitalWrite(5,HIGH);
        digitalWrite(4,HIGH);
        digitalWrite(0,HIGH);
        BLINKER_LOG("get button state:off", state);
    }
    
    void buttonOffR_callback(const String & state)     //点灯app内控制按键触发
    {
        digitalWrite(5,HIGH);
        BLINKER_LOG("get button state:off", state);
    }
    
    void buttonOffG_callback(const String & state)     //点灯app内控制按键触发
    {
        digitalWrite(4,HIGH);
        BLINKER_LOG("get button state:off", state);
    }
    
    void buttonOffB_callback(const String & state)     //点灯app内控制按键触发
    {
        digitalWrite(0,HIGH);
        BLINKER_LOG("get button state:off", state);
    }
    
    
    void button3_callback(const String & state)     //点灯app内控制按键触发
    {  
      
        BLINKER_LOG("get button state:on", state);
         Blinker.print(state);
        if(state=="on"){
        digitalWrite(5,LOW);
       // Button3.print("on");
         }else if(state =="off"){
                digitalWrite(5,HIGH);
            
        //        Button3.print("off");
        }
    }
    
    void setup()
    {
        Serial.begin(115200);
        BLINKER_DEBUG.stream(Serial);
    
        pinMode(5, OUTPUT);              //定义io口为输出
        pinMode(4, OUTPUT);              //定义io口为输出
        pinMode(0, OUTPUT);              //定义io口为输出
        
        digitalWrite(5, HIGH);           //定义io默认为高电平
        digitalWrite(4, HIGH);           //定义io默认为高电平
        digitalWrite(0, HIGH);           //定义io默认为高电平
        
        wsState = true;
        
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachData(dataRead);
        
        BlinkerMIOT.attachPowerState(miotPowerState);
        BlinkerMIOT.attachMode(miotMode);
        BlinkerMIOT.attachQuery(miotQuery);
        
        ButtonAll.attach(buttonAll_callback); 
        ButtonR.attach(buttonR_callback); 
        ButtonG.attach(buttonG_callback); 
        ButtonB.attach(buttonB_callback); 
    ;    
        ButtonOffAll.attach(buttonOffAll_callback); 
        ButtonOffR.attach(buttonOffR_callback); 
        ButtonOffG.attach(buttonOffG_callback); 
        ButtonOffB.attach(buttonOffB_callback); 
            
        Button3.attach(button3_callback);   
    }
    
    void loop()
    {
        Blinker.run();
    }
    
  3. 点击开发者管理器搜索8266选择安装 (不建议选最新版本)
  4. 安装后退出,烧入器插入电脑,选择端口

5. 移动端

  1. 烧入成功后,打开电灯科技APP,设备在线
  2. 点击右上角的 + 配置按钮
  3. 电灯与继电器接线
  4. 通过以上方式,就可以在APP上进行基本的控制开关了

6. 语音控制

  1. 下载米家APP
  2. 进入其他平台设备,找到点灯科技,进行绑定账号同步设备
  3. 打开小爱APP训练计划
  4. 以上,便实现了全部的软件控制与语音控制,感兴趣的小伙伴可以试一下,成本大概20左右。
-> 加入科技玩家交流群组:点击加入 <-
注意:
1.文中二维码和链接可能带有邀请性质,请各位玩家自行抉择。
2.请勿通过链接填写qq号与密码、银行卡号与密码等个人隐私信息。
3.禁止纯拉人头,拉app注册等信息,发现必小黑屋。
4.同一种信息仅发一次,多发会被删除。
5.文章中源码或APP等,无法保证其绝对安全,需自行辨别。
6.文章关联方不想展示也可以微信站长“socutesheep”删除。
本文由 @x64 发布。如若转载,请注明出处: 科技玩家 » 用ESP8266和小爱同学语音实现智能开关

给TA买糖
共{{data.count}}人
人已买糖
教程玩家投稿

JD推一推

2022-3-27 22:30:06

教程玩家投稿精选文章

Joplin笔记云同步方案之对象存储(腾讯云COS)

2022-3-28 23:23:51

57 条回复 A文章作者 M管理员
贴心提醒
请认真对待作者付出,勿发表无意义言论,触发过滤规则的评论将无法提交,包含敏感词的评论会自动变成待审核状态哦。
  1. Carol

    瞅瞅瞅瞅,mark一手

  2. DragonTang

    完全看不懂,不明觉厉

  3. Carol

    mark一手!不错!

  4. DragonTang

    赛高!

  5. 浪

    膜拜大佬

  6. LAzySleep

    又学习到了,写的非常好😁

  7. llzzll

    瞅瞅瞅瞅,mark一手

  8. 原点

    学习学习

  9. ㅤㅤㅤ25706

    这个挺不错

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索