我是靠谱客的博主 缥缈野狼,最近开发中收集的这篇文章主要介绍【基于ESP8266、点灯科技集小爱同学5灯语音控制、本地按键、无线按键、离线语音的灯光控制】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

集小爱同学语音控制、本地按键、无线按键、离线语音的灯光控制


电路图
在这里插入图片描述
代码

#define BLINKER_WIFI
#define BLINKER_MIOT_MULTI_OUTLET    //设置为小爱多个插座的模式
#include <Blinker.h>
#define BLINKER_PRINT Serial       //串口协议库
#define BLINKER_WITHOUT_SSL
char i;
char auth[] = "xxx";  //填上刚刚记下来的密钥
/*******直连(直连时取消注释)*******/  
char ssid[] = "526"; //填上你家WiFi名字
char pswd[] = "XXXX"; //填上你家WiFi密码码
//定义本地开关信号
#define KG_1 5         //定义开关1信号接入GPIO5,D1         /控制D3  io3   0
#define KG_2 4         //定义开关2信号接入GPIO4,D2         /控制D5  io2   14
#define KG_3 2         //定义开关3信号接入GPIO2,D4         /控制D6  io1    12
#define KG_4 3          //定义开关4信号接入GPIO3,D9  RX  /控制D7    24    13  (GPIO15/D8持续低电平,后更改为GPIO3/RX接口)
#define KG_5 1         //定义开关3信号接入GPIO1 D10         /控制D8     23    15
bool oState[6] = { false };
//io口定义
int sj=1000;//延迟时间
int kg11=D0;
int kg3=D3;
int kg5=D5;
int kg6=D6;
int kg7=D7;
int kg8=D8;
//****新建组件对象****
BlinkerButton Button1("btn-kg1"); //设置app按键的键名
BlinkerButton Button3("btn-kg3"); //设置app按键的键名
BlinkerButton Button5("btn-kg5"); //设置app按键的键名
BlinkerButton Button6("btn-kg6"); //设置app按键的键名
BlinkerButton Button7("btn-kg7"); //设置app按键的键名
BlinkerButton Button8("btn-kg8"); //设置app按键的键名
BlinkerButton Button11("btn-kg11");  //设置app按键的键名
//反馈继电器状态函数
void RelayState(int num)
{
  switch(num)
  {
    case 1:   //插座插孔一状态
        if(digitalRead(kg7)==HIGH)
        {
          Button7.color("#FF0000");   //设置app按键是纯黄色,16进制颜色码
          Button7.text("插座1开");          //设置app按键注释“开”
          Button7.print("on");
          oState[1] = true;
        }
        else if(digitalRead(kg7)==LOW)
        {
          
          Button7.text("插座1关");          //设置app按键注释“关”
          Button7.print("off");
          oState[1] = false;
        }
        break;
    case  2:
        if(digitalRead(kg6)==HIGH)
        {
          Button6.color("#FF0000");   //设置app按键是纯黄色,16进制颜色码
          Button6.text("插座2开");          //设置app按键注释“开”
          Button6.print("on");
          oState[2] = true;
        }
        else if(digitalRead(kg6)==LOW)
        {
          Button6.text("插座2关");          //设置app按键注释“关”
          Button6.print("off");
          oState[2] = false;
        }
        break;
    case  3:
        if(digitalRead(kg5)==HIGH)
        {
          Button5.color("#FF0000");   //设置app按键是纯黄色,16进制颜色码
          Button5.text("插座3开");          //设置app按键注释“开”
          Button5.print("on");
          oState[3] = true;
        }
        else if(digitalRead(kg5)==LOW)
        {
          Button5.text("插座3关");          //设置app按键注释“关”
          Button5.print("off");
          oState[3] = false;
        }
        break;
    case  4:
        if(digitalRead(kg11)==HIGH)
        {
          Button11.color("#FF0000");   //设置app按键是纯黄色,16进制颜色码
          Button11.text("插座4开");          //设置app按键注释“开”
          Button11.print("on");
          oState[4] = true;
        }
        else if(digitalRead(kg11)==LOW)
        {
         
          Button11.text("插座4关");          //设置app按键注释“关”
          Button11.print("off");
          oState[4] = false;
        }
        break;

        case  5:
        if(digitalRead(kg3)==HIGH)
        {
          Button3.color("#FF0000");   //设置app按键是纯黄色,16进制颜色码
          Button3.text("插座4开");          //设置app按键注释“开”
          Button3.print("on");
          oState[5] = true;
        }
        else if(digitalRead(kg3)==LOW)
        {
          
          Button3.text("插座4关");          //设置app按键注释“关”
          Button3.print("off");
          oState[5] = false;
        }
        break;
        default:
            break;
  }
}

void miotPowerState(const String & state, uint8_t num)  
{
    BLINKER_LOG("need set outlet: ", num, ", power state: ", state); 
    i=0;   //初始化  重要!!
    if(num==1)
    {
      i=D7;         
    }
    else if(num==2)
    {
      i=D6;
    }
    else if(num==3)
    {
      i=D5;
    }
    else if(num==4)
    {
      i=D0;
    }
    else if(num==5)
    {
      
      i=D3;
      
    }
   
    if (state == BLINKER_CMD_ON) 
    {     
        digitalWrite(i, HIGH);      
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();

        oState[num] = true;     
        
    }
    else if (state == BLINKER_CMD_OFF) 
    { 
        digitalWrite(i, LOW);
        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();

        oState[num] = false;
      /
        if (num == 0)
        {
            for (uint8_t o_num = 0; o_num <12; o_num++)
            {
                oState[o_num] = false;
            }
        }
    }
}



//心跳包刷新状态
 void heartbeat()
 {
  for(int i=0;i<5;i++)
  {
    RelayState(i);
  }
 }
 
 //本地开关控制继电器程序
 void bdms()
 {
  if(digitalRead(KG_1)==LOW)
  {
    digitalWrite(kg3, !digitalRead(kg3));
    //反馈继电器1状态
    RelayState(1);    //调用继电器反馈程序
    Blinker.delay(1000);    //必须加延时,否则灯一直切换状态
  }
  if(digitalRead(KG_2)==LOW)
  {
     digitalWrite(kg5, !digitalRead(kg5));
    RelayState(2);    //调用继电器反馈程序
    Blinker.delay(1000); 
  }
  if(digitalRead(KG_3)==LOW)
  {
  digitalWrite(kg6, !digitalRead(kg6));
    RelayState(3);    //调用继电器反馈程序
    Blinker.delay(1000);
  }
 if(digitalRead(KG_4)==LOW)
  {
   digitalWrite(kg7, !digitalRead(kg7));
    RelayState(4);    //调用继电器反馈程序
    Blinker.delay(1000);
  }

   if(digitalRead(KG_5)==LOW)
  {
    digitalWrite(kg8, !digitalRead(kg8));
    RelayState(5);    //调用继电器反馈程序
    Blinker.delay(1000);
  }
  
 }

void button1_callback(const String & state) {
    BLINKER_LOG("ALL#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg3, HIGH );
         digitalWrite(kg5, HIGH );
         digitalWrite(kg6, HIGH );
         digitalWrite(kg7, HIGH );
         digitalWrite(kg8, HIGH );
         digitalWrite(kg11, HIGH );
         Button1.color("#FF0000");   //3#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button1.text("已开灯");
        Button1.print("on");
        BLINKER_LOG ("ALL#灯已开灯on");  //串口打印
    } else if(state=="off"){
       digitalWrite(kg3, LOW);
       digitalWrite(kg5, LOW);
       digitalWrite(kg6, LOW);
       digitalWrite(kg7, LOW);
       digitalWrite(kg8, LOW);
       digitalWrite(kg11, LOW);
        // 反馈开关状态
        Button1.text("已关灯");
        Button1.print("off");
        BLINKER_LOG ("ALL#灯已关灯off");
    }
}
void button3_callback(const String & state) {
    BLINKER_LOG("3#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg3, HIGH );
         Button3.color("#FF0000");   //3#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button3.text("已开灯");
        Button3.print("on");
        BLINKER_LOG ("3#灯已开灯on");  //串口打印
    } else if(state=="off"){
       digitalWrite(kg3, LOW);
        // 反馈开关状态
        Button3.text("已关灯");
        Button3.print("off");
        BLINKER_LOG ("3#灯已关灯off");
    }
}
void button8_callback(const String & state) {
    BLINKER_LOG("1#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg8, HIGH);
         Button8.color("#FF0000");   //3#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button8.text("已开灯");
        Button8.print("on");
        BLINKER_LOG ("1#灯已开灯on");  //串口打印
    } else if(state=="off"){
         digitalWrite(kg8, LOW);
       
        // 反馈开关状态
        Button8.text("已关灯");
        Button8.print("off");
        BLINKER_LOG ("3#灯已关灯off");
    }
}
void button5_callback(const String & state) {
    BLINKER_LOG("5#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg5, HIGH);
         Button5.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button5.text("已开灯");
        Button5.print("on");
        BLINKER_LOG ("5#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg5, LOW);
        
        // 反馈开关状态
        Button5.text("已关灯");
        Button5.print("off");
        BLINKER_LOG ("5#灯已关灯off");
    }
}
void button6_callback(const String & state) {
    BLINKER_LOG("6#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg6, HIGH);
         Button6.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button6.text("已开灯");
        Button6.print("on");
        BLINKER_LOG ("6#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg6, LOW);
        
        // 反馈开关状态
        Button6.text("已关灯");
        Button6.print("off");
        BLINKER_LOG ("6#灯已关灯off");
    }
}
void button7_callback(const String & state) {
    BLINKER_LOG("7#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg7, HIGH);
         Button7.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button7.text("已开灯");
        Button7.print("on");
        BLINKER_LOG ("7#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg7, LOW);
        
        // 反馈开关状态
        Button7.text("已关灯");
        Button7.print("off");
        BLINKER_LOG ("7#灯已关灯off");
    }
}

void button11_callback(const String & state) {
    BLINKER_LOG("11#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg11, HIGH);
         Button11.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button11.text("已开灯");
        Button11.print("on");
        BLINKER_LOG ("11#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg11, LOW);
        
        // 反馈开关状态
        Button11.text("已关灯");
        Button11.print("off");
        BLINKER_LOG ("11#灯已关灯off");
    }
}
//

void miotQuery(int32_t queryCode, uint8_t num)
{
    BLINKER_LOG("AliGenie Query outlet: ", num,", codes: ", queryCode);

    switch (queryCode)
    {
        case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("MIOT Query All");
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("MIOT Query Power State");
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
        default :
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
    }
}

void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();
    
    uint32_t BlinkerTime = millis();
    
    Blinker.print("millis", BlinkerTime);
}

void setup()
{
    // 初始化串口,用于调试,后期可删除
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    
    pinMode(D3, OUTPUT);
    pinMode(D5, OUTPUT);
    pinMode(D6, OUTPUT);
    pinMode(D7, OUTPUT);
    pinMode(D8, OUTPUT);
    pinMode(D8, OUTPUT);
    pinMode(D0, OUTPUT);

    digitalWrite(D3,  LOW);
    digitalWrite(D5,  LOW);
    digitalWrite(D6, LOW);
    digitalWrite(D7,  LOW);
    digitalWrite(D8,  LOW);
    digitalWrite(D0,  LOW);

    //初始化本地按键状态
    pinMode(KG_1, INPUT_PULLUP);   //本地开关输入上拉
    pinMode(KG_2, INPUT_PULLUP);   //本地开关输入上拉
    pinMode(KG_3, INPUT_PULLUP);   //本地开关输入上拉
    pinMode(KG_4, INPUT_PULLUP);   //本地开关输入上拉
    pinMode(KG_5, INPUT_PULLUP);   //本地开关输入上拉
/******** 直连(直连时 取消注释) ******/    
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
/**************/    
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);

//****app关联函数****
//app上操作必须的注册回调函数关联按键名“Button1-Button4”和判断程序“button1_callback"
 Button1.attach(button1_callback); 
 Button3.attach(button3_callback); 
 Button5.attach(button5_callback); 
 Button6.attach(button6_callback); 
 Button7.attach(button7_callback);
 Button8.attach(button8_callback);
 Button11.attach(button11_callback);
}
void loop()
{
  bdms();           //本地开关模式
    Blinker.run();
    
}

在这里插入图片描述

最后

以上就是缥缈野狼为你收集整理的【基于ESP8266、点灯科技集小爱同学5灯语音控制、本地按键、无线按键、离线语音的灯光控制】的全部内容,希望文章能够帮你解决【基于ESP8266、点灯科技集小爱同学5灯语音控制、本地按键、无线按键、离线语音的灯光控制】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部