2021-01-23

本文是一篇小白教程,教你如何使用ESP8266模块配合小爱同学,实现5个普通灯和6个智能插座的语音控制,通过Blinker库轻松编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP8266+点灯科技+小爱同学

小白教程

小爱同学语音可控制5灯,点灯科技可控11灯
关注西瓜视频——小灏搞搞阵实验室,有小白教程
在这里插入图片描述
在这里插入图片描述
话不多说直接上码

#define BLINKER_WIFI
#define BLINKER_MIOT_MULTI_OUTLET    //设置为小爱多个插座的模式

#include <Blinker.h>

char i;
char auth[] = "93ddf3f2XXX";  //填上刚刚记下来的密钥
char ssid[] = "xxxX"; //填上你家WiFi名字
char pswd[] = "LGH12"; //填上你家WiFi密码
bool oState[11] = { false };
//io口定义
int kg1=D1;
int kg2=D2;
int kg3=D3;
int kg4=D4;
int kg5=D5;
int kg6=D6;
int kg7=D7;
int kg8=D8;
int kg9=D9;
int kg10=D10;
int kg11=D0;
int sj=1000;//延迟时间
//****新建组件对象****
BlinkerButton Button1("btn-kg1"); //设置app按键的键名
BlinkerButton Button2("btn-kg2"); //设置app按键的
BlinkerButton Button3("btn-kg3"); //设置app按键的键名
BlinkerButton Button4("btn-kg4");  //设置app按键的键名
BlinkerButton Button5("btn-kg5"); //设置app按键的键名
BlinkerButton Button6("btn-kg6"); //设置app按键的键名
BlinkerButton Button7("btn-kg7"); //设置app按键的键名
BlinkerButton Button8("btn-kg8");  //设置app按键的键名
BlinkerButton Button9("btn-kg9"); //设置app按键的键名
BlinkerButton Button10("btn-kg10");  //设置app按键的键名
BlinkerButton Button11("btn-kg11");  //设置app按键的键名


void miotPowerState(const String & state, uint8_t num)  
{
    BLINKER_LOG("need set outlet: ", num, ", power state: ", state); 
    i=0;   //初始化  重要!!
    if(num==1)
    {
      i=D1;         
    }
    else if(num==2)
    {
      i=D2;
    }
    else if(num==3)
    {
      i=D5;
    }
else if(num==4)
    {
      i=D4;
    }
    else if(num==5)
    {
      i=D3;
    }
else if(num==6)
  {
     i=D6;
    }
   else if(num==7)
    {
    i=D7;
    }
else if(num==8)
    {
      i=D8;
    }
else if(num==9)
    {
      i=D9;
    }
 else if(num==10)
    {
      i=D10;           
    }
 else if(num==11)
    {
      i=D0;           
    }
    
    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 button1_callback(const String & state) {
    BLINKER_LOG("1#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg1, HIGH);
         Button1.color("#FF0000");   //2#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button1.text("已开灯");
        Button1.print("on");
        BLINKER_LOG ("1#灯已开灯on");  //串口打印
    } else if(state=="off"){
         digitalWrite(kg1, LOW);
         
        // 反馈开关状态
        Button1.text("已关灯");
        Button1.print("off");
        BLINKER_LOG ("1灯已关灯off");
    }
}
void button2_callback(const String & state) {
    BLINKER_LOG("2#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg2, HIGH);
         Button2.color("#FF0000");   //2#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button2.text("已开灯");
        Button2.print("on");
        BLINKER_LOG ("2#灯已开灯on");  //串口打印
    } else if(state=="off"){
         digitalWrite(kg2, LOW);
         
        // 反馈开关状态
        Button2.text("已关灯");
        Button2.print("off");
        BLINKER_LOG ("2#灯已关灯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 button4_callback(const String & state) {
    BLINKER_LOG("4#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg4, HIGH);
         Button4.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button4.text("已开灯");
        Button4.print("on");
        BLINKER_LOG ("4#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg4, LOW);
        
        // 反馈开关状态
        Button4.text("已关灯");
        Button4.print("off");
        BLINKER_LOG ("4#灯已关灯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 button8_callback(const String & state) {
    BLINKER_LOG("8#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg8, HIGH);
         Button8.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button8.text("已开灯");
        Button8.print("on");
        BLINKER_LOG ("8#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg8, LOW);
        
        // 反馈开关状态
        Button8.text("已关灯");
        Button8.print("off");
        BLINKER_LOG ("8#灯已关灯off");
    }
}
void button9_callback(const String & state) {
    BLINKER_LOG("9#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg9, HIGH);
         Button9.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button9.text("已开灯");
        Button9.print("on");
        BLINKER_LOG ("7#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg9, LOW);
        
        // 反馈开关状态
        Button9.text("已关灯");
        Button9.print("off");
        BLINKER_LOG ("7#灯已关灯off");
    }
}
void button10_callback(const String & state) {
    BLINKER_LOG("10#灯,状态: ", state);
    if (state=="on") {
         digitalWrite(kg10, HIGH);
         Button10.color("#FF0000");   //4#按钮按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button10.text("已开灯");
        Button10.print("on");
        BLINKER_LOG ("10#灯已开灯on");  //串口打印
    } else if(state=="off"){
        digitalWrite(kg10, LOW);
        
        // 反馈开关状态
        Button10.text("已关灯");
        Button10.print("off");
        BLINKER_LOG ("10#灯已关灯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);

    pinMode(D1, OUTPUT);
    digitalWrite(D1,  LOW);
    pinMode(D2, OUTPUT);
    digitalWrite(D2,  LOW);
    pinMode(D3, OUTPUT);
    digitalWrite(D3,  LOW);
    pinMode(D4, OUTPUT);
    digitalWrite(D4,  LOW);
    pinMode(D5, OUTPUT);
    digitalWrite(D5,  LOW);
    pinMode(D6, OUTPUT);
    digitalWrite(D6, LOW);
    pinMode(D7, OUTPUT);
    digitalWrite(D7,  LOW);
    pinMode(D8, OUTPUT);
    digitalWrite(D8,  LOW);
    pinMode(D9, OUTPUT);
    digitalWrite(D9,  LOW);
    pinMode(D10, OUTPUT);
    digitalWrite(D10,  LOW);
    pinMode(D0, OUTPUT);
    digitalWrite(D0,  LOW);
    
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);



//****app关联函数****
//app上操作必须的注册回调函数关联按键名“Button1-Button4”和判断程序“button1_callback"
  Button1.attach(button1_callback); 
  Button2.attach(button2_callback); 
  Button3.attach(button3_callback);
  Button4.attach(button4_callback); 
  Button5.attach(button5_callback); 
  Button6.attach(button6_callback); 
  Button7.attach(button7_callback);
  Button8.attach(button8_callback);
  Button9.attach(button9_callback);
  Button10.attach(button10_callback);
   Button11.attach(button11_callback);
}

void loop()
{
    Blinker.run();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值