用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
    用ESP8266和小爱同学语音实现智能开关
  2. 添加独立设备
    用ESP8266和小爱同学语音实现智能开关
  3. 通过WIFI接入,并选择阿里云.生成key,并复制到剪贴板以备用用ESP8266和小爱同学语音实现智能开关

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选择安装 (不建议选最新版本)用ESP8266和小爱同学语音实现智能开关
  4. 安装后退出,烧入器插入电脑,选择端口

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

5. 移动端

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

6. 语音控制

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

给TA买糖
共{{data.count}}人
人已买糖
BoxWindows软件玩家投稿

JD推一推

2022-3-27 22:30:06

教程玩家投稿精选文章

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

2022-3-28 23:23:51

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

    继续加油哦,争取发表更多优秀帖子

  2. jerryc

    感谢分享,让我好好学习一下

  3. 幻念

    感谢分享,让我好好学习一下

  4. 幻念

    辛苦了,学习一下

  5. 奈何心善

    学习学习

  6. 七年

    瞅瞅瞅瞅,mark一手

  7. 84896150

    这个好 给赞

  8. 84896150

    打卡升级

  9. 幻念

    前来顶贴!

  10. 84896150

    优秀,学习一下

  11. 七年

    七年前来顶贴!

  12. 84896150

    继续加油哦,争取发表更多优秀帖子

  13. 七年

    辛苦了,学习一下

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