查看: 5225|回复: 104

[分享] 又双叒更新同步开关状态 ,小爱同学+app+本地按键控制状.....

[复制链接]
  • TA的每日心情
    开心
    2020-4-18 15:28
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2020-3-4 07:13 | 显示全部楼层 |阅读模式
    本帖最后由 z01228 于 2020-4-19 16:00 编辑

    你有没有发现app上面的按键在操作完毕后你就不知道开关的状态了;或者小爱操作完毕后与app上面的状态不同步。下面的程序就是解决这个问题的。晚上无聊就这个问题解决了一下方便大家,我使用的是板载的led做为指示,具体应用场景大家自己发挥一下。使用了心跳包大概30s~60s同步一次状态。

    2020年3月4日今天更新了!今天更新了下添加了本地按键 毕竟有时候手机不在身边。这个时候本地按键就方便了

    2020年4月18日15:11:06今天更新了!esp8266运行一些时间网络就情况了。今天加入软件重启,但是有一个问题就是如果原来是熄的 在网络断开重启后就会亮,。如果用EEPROM记录开关状态。如果电灯已经熄灭在发生网络断开重启时,电灯可以维持原来的状态。但如果断开电源再合上电灯将不会被点亮,只能软件操作或者本地开关(轻触开关)操作。
    12.jpg

    使用的模块照片,模块不一样程序可能需要小修改一下。
    2.jpg 3.jpg

    方案1.通过心跳包统一状态,不足的地方就是需要30-60s进行状态同步。

    kittenblock中小学创客名师推荐的图形化编程软件

    /************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
         十六进制颜色码
         (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
         程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
         使用的单片机是esp8266-01s,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))
         
    */
         
    
    #define BLINKER_WIFI                    //官方wifi协议库
    #define BLINKER_MIOT_LIGHT              //小爱灯类库
    #define BLINKER_PRINT Serial            //串口协议库
    #include <Blinker.h>                    //官方库
    
    char auth[] = "2b1****2b";           //设备key号
    char ssid[] = "mi";                     //wifi名称
    char pswd[] = "123**780";              //wifi密码
    
    //**软重启定义
    uint32_t con_time = 0;    //断网记时
    int con_flag = 0;    //断网标记,1为断网
    void(*resetFunc) (void) = 0;//定义一个reset函数(用于重启)
    
    int kg=0;//继电器输出
    int kg2=2;//本地轻触开关,io2与gnd接时动作
    //*******新建组件对象
    BlinkerButton Button1("btn-abc");              //设置app按键的键名
    
    //*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
    void button1_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了!: ", state);                //串口打印
    
      if (digitalRead(kg)==LOW) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg, HIGH); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");                         //反馈回按键状态是开
      }
      else if (digitalRead(kg)==HIGH) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg,LOW);
        Button1.color("#0000FF");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");                      //反馈回按键状态是关
      }
    }
    //*******如果小爱有对设备进行操作就执行下面
    void miotPowerState(const String & state)
    {
        BLINKER_LOG("小爱语音操作!");              //串口打印
    
        if (state == BLINKER_CMD_ON){
            digitalWrite(kg,LOW);
            BlinkerMIOT.powerState("on");
            BLINKER_LOG("亮灯!"); 
            BlinkerMIOT.print();
        }
        else if (state == BLINKER_CMD_OFF){
            digitalWrite(kg,HIGH);
            BlinkerMIOT.powerState("off");
            BLINKER_LOG("灭灯!"); 
            BlinkerMIOT.print();
        }
    }
      //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
    void heartbeat()
    {
      BLINKER_LOG("状态同步!"); 
       if (digitalRead(kg)==LOW) 
        { 
          Button1.print("on");
          Button1.color("#0000FF");              //设置app按键是浅蓝色
          Button1.text("亮");
        }
        else 
        {
        Button1.print("off");
        Button1.color("#00FFFF");              //设置app按键是深蓝色
        Button1.text("灭");
        }
    }
    ///如果本地开关有动作执行下面手动模式
    void sdms(){ 
    if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg2)==HIGH){                
              BLINKER_LOG("本地开关动作!");      
       BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg,LOW);
            Button1.color("#0000FF");                  //设置app按键是浅蓝色
            Button1.text("亮");
            Button1.print("on");
            }
    }
    if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {              
        Blinker.delay(150);
        if (digitalRead(kg2)==HIGH){
       BLINKER_LOG("本地开关动作!"); 
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg, HIGH); 
            Button1.color("#00FFFF");                     //设置app按键是深蓝色
            Button1.text("灭");
            Button1.print("off");
            }
    }
    }
    void setup()
    {
      // 初始化串口
      Serial.begin(115200);
      BLINKER_DEBUG.stream(Serial);
    
      // 初始化有LED的IO
      pinMode(kg, OUTPUT);
      digitalWrite(kg, LOW);              //默认上电是开  LOW 时的是接通继电器。
      pinMode(kg2,INPUT_PULLUP);         //输入上拉
      
      // 初始化blinker
      Blinker.begin(auth, ssid, pswd);
      Button1.attach(button1_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
      BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数
      Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    }
    
    void loop() {
      sdms();//本地开关手动模式函数
    
    //**软重启
    if (Blinker.connected())//Blinker.connected()函数反馈网络连接状态
    {
      con_flag = 0;
    } else
    {
      if (con_flag == 0)
      {
        con_time = millis();    //给断网时间赋初始值
        con_flag = 1;
      } else
      {
        if ((millis() - con_time) >= 90000)    //判断断网时间超90秒后执行重启,这个时间可根据实际需要调整
        {
          resetFunc();//启用这个函数就软重启设备
        }
      }
    }
    
      Blinker.run();
      }




    方案2:直接在小爱的操作函数里反馈开关状态。不设置心跳包,可以实时的反馈开关状态。但是存在不同步的可能。


    kittenblock中小学创客名师推荐的图形化编程软件

    /************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
         十六进制颜色码
         (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
         程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
         使用的单片机是esp8266-01s,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))
         
    */
         
    
    #define BLINKER_WIFI                    //官方wifi协议库
    #define BLINKER_MIOT_LIGHT              //小爱灯类库
    #define BLINKER_PRINT Serial            //串口协议库
    #include <Blinker.h>                    //官方库
    
    char auth[] = "2b1fdcb2ba2b";           //设备key号
    char ssid[] = "mi";                     //wifi名称
    char pswd[] = "123456780";              //wifi密码
    
    int kg=0;//继电器输出
    int kg2=2;//本地轻触开关,io2与gnd接时动作
    
    //**软重启定义
    uint32_t con_time = 0;    //断网记时
    int con_flag = 0;    //断网标记,1为断网
    void(*resetFunc) (void) = 0;//定义一个reset函数(用于重启)
    
    
    
    //*******新建组件对象
    BlinkerButton Button1("btn-abc");              //设置app按键的键名
    
    //*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
    void button1_callback(const String & state){              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
      BLINKER_LOG("app操作了!: ", state);                //串口打印
    
      if (digitalRead(kg)==LOW) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg, HIGH); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");                         //反馈回按键状态是开
      }
      else if (digitalRead(kg)==HIGH) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg,LOW);
        Button1.color("#0000FF");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");                      //反馈回按键状态是关
      }
    }
    
    //*******如果小爱有对设备进行操作就执行下面
    void miotPowerState(const String & state){
        BLINKER_LOG("小爱语音操作!");              //串口打印
    
        if (state == BLINKER_CMD_ON){
            digitalWrite(kg,LOW);
            BlinkerMIOT.powerState("on");
            BLINKER_LOG("亮灯!"); 
            Button1.color("#0000FF");                  //设置app按键是浅蓝色
            Button1.text("亮");
            Button1.print("on");                      //反馈回按键状态是关
            BlinkerMIOT.print();
        }
        else if (state == BLINKER_CMD_OFF){
            digitalWrite(kg,HIGH);
            BlinkerMIOT.powerState("off");
            Button1.color("#00FFFF");                     //设置app按键是深蓝色
            Button1.text("灭");
            Button1.print("off");                         //反馈回按键状态是开
            BLINKER_LOG("灭灯!"); 
            BlinkerMIOT.print();
        }
    }
    
    ///如果本地开关有动作执行下面手动模式
    void sdms(){
      //BLINKER_LOG("本地开关动作!");  
    if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg2)==HIGH){
            BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg,LOW);
            Button1.color("#0000FF");                  //设置app按键是浅蓝色
            Button1.text("亮");
            Button1.print("on");
            }
    }
    if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {              
        Blinker.delay(150);
        if (digitalRead(kg2)==HIGH){
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg, HIGH); 
            Button1.color("#00FFFF");                     //设置app按键是深蓝色
            Button1.text("灭");
            Button1.print("off");
            }
    }
    }
    
    void setup()
    {
      // 初始化串口
      Serial.begin(115200);
      BLINKER_DEBUG.stream(Serial);
    
      // 初始化有LED的IO
      pinMode(kg, OUTPUT);
      digitalWrite(kg, LOW);              //默认上电是开  LOW 时的是接通继电器。
      pinMode(kg2,INPUT_PULLUP);         //输入上拉
      
      // 初始化blinker
      Blinker.begin(auth, ssid, pswd);
      Button1.attach(button1_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
      BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数
    }
    
    void loop() {
      sdms();//本地开关手动模式函数
    
    //**软重启
    if (Blinker.connected())//Blinker.connected()函数反馈网络连接状态
    {
      con_flag = 0;
    } else
    {
      if (con_flag == 0)
      {
        con_time = millis();    //给断网时间赋初始值
        con_flag = 1;
      } else
      {
        if ((millis() - con_time) >= 90000)    //判断断网时间超90秒后执行重启,这个时间可根据实际需要调整
        {
          resetFunc();//启用这个函数就软重启设备
        }
      }
    }
    
    
      Blinker.run();
    }












    该用户从未签到

    发表于 2020-3-19 20:32 | 显示全部楼层
    本帖最后由 YLGZS 于 2020-3-19 20:36 编辑

    这是我根据楼主的代码稍加更改的。加了自动配网


    kittenblock中小学创客名师推荐的图形化编程软件

    /************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
         十六进制颜色码
         (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
         程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
         使用的单片机是esp8266-01s,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))
         
    */
         
     
    #define BLINKER_WIFI                    //官方wifi协议库
    #define BLINKER_ESP_SMARTCONFIG         // 进行配网
    #define BLINKER_MIOT_LIGHT              //小爱灯类库
    #define BLINKER_PRINT Serial            //串口协议库
    #include <Blinker.h>                    //官方库
     
    char auth[] = "**************";           //设备key号
    //char ssid[] = "mi";                     //wifi名称
    //char pswd[] = "123**780";              //wifi密码
     
     int kg=0;//继电器输出
     int kg2=2;//本地轻触开关,io2与gnd接时动作
    //*******新建组件对象
    BlinkerButton Button1("btn-abc");              //设置app按键的键名
     
    //*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
    void button1_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了!: ", state);                //串口打印
     
      if (digitalRead(kg)==HIGH) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg, LOW); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");                         //反馈回按键状态是开
      }
      else if (digitalRead(kg)==LOW) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg,HIGH);
        Button1.color("#0000FF");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");                      //反馈回按键状态是关
      }
    }
     //*******如果小爱有对设备进行操作就执行下面
     void miotPowerState(const String & state)
    {
        BLINKER_LOG("小爱语音操作!");              //串口打印
     
        if (state == BLINKER_CMD_ON){
            digitalWrite(kg,HIGH);
            BlinkerMIOT.powerState("on");
            BLINKER_LOG("亮灯!"); 
            BlinkerMIOT.print();
        }
        else if (state == BLINKER_CMD_OFF){
            digitalWrite(kg,LOW);
            BlinkerMIOT.powerState("off");
            BLINKER_LOG("灭灯!"); 
            BlinkerMIOT.print();
        }
    }
      //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
    void heartbeat()
    {
      BLINKER_LOG("状态同步!"); 
       if (digitalRead(kg)==HIGH) 
        { 
          Button1.print("on");
          Button1.color("#0000FF");              //设置app按键是浅蓝色
          Button1.text("亮");
        }
        else 
        {
        Button1.print("off");
        Button1.color("#00FFFF");              //设置app按键是深蓝色
        Button1.text("灭");
        }
    }
    ///如果本地开关有动作执行下面手动模式
    void sdms(){ 
     if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) { //
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg2)==HIGH){                
            BLINKER_LOG("本地开关动作!");      
            BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg,HIGH);
            Button1.color("#0000FF");                  //设置app按键是浅蓝色
            Button1.text("亮");
            Button1.print("on");
            }
     }
     if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) {              
        Blinker.delay(150);
        if (digitalRead(kg2)==HIGH){
            BLINKER_LOG("本地开关动作!"); 
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg, LOW); 
            Button1.color("#00FFFF");                     //设置app按键是深蓝色
            Button1.text("灭");
            Button1.print("off");
            }
    }
    }
    void setup()
    {
      // 初始化串口
      Serial.begin(115200);
      BLINKER_DEBUG.stream(Serial);
     
      // 初始化有LED的IO
      pinMode(kg, OUTPUT);
      digitalWrite(kg, LOW);              //默认上电是关 LOW 时的是断开继电器。
      pinMode(kg2,INPUT_PULLUP);         //输入上拉
      
      // 初始化blinker
      Blinker.begin(auth);//, ssid, pswd
      Button1.attach(button1_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
      BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数
      Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    }
     
    void loop() {
      sdms();//本地开关手动模式函数
      Blinker.run();
    }




    界面配置代码

    {¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨light¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-power-off¨¨mode¨É¨t0¨¨文本1¨¨t1¨¨文本2¨¨bg¨É¨cols¨Ë¨rows¨Ë¨key¨¨btn-abc¨´x´Ì´y´Ñ¨speech¨|÷¨lstyle¨Ê}{ßA¨deb¨ßEÉßJÉßKÑßLÌßM¨debug¨´x´É´y´Í}÷¨actions¨|÷¨triggers¨|÷}

    该用户从未签到

    发表于 2020-3-21 18:06 | 显示全部楼层
    四路本地控制+小爱同学+配网+反馈【根据楼主代码更改+B站学习】

    原理:插座多路控制。

    注意:下面大多注释不正确,我太累了不想修改。不影响使用。

    代码有些累赘,有大神可以的话帮忙修改一下,谢谢。


    kittenblock中小学创客名师推荐的图形化编程软件

    /************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
         十六进制颜色码
         (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
         程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
         使用的单片机是esp8266-12E,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))
         
    */
         
     
    #define BLINKER_WIFI                    //官方wifi协议库
    #define BLINKER_ESP_SMARTCONFIG         // 进行配网
    #define BLINKER_MIOT_MULTI_OUTLET    //设置为小爱多个插座的模式
    #define BLINKER_PRINT Serial            //串口协议库
    #include <Blinker.h>                    //官方库
     
    char auth[] = "e2b8e75b7b29";           //设备key号
    //char ssid[] = "mi";                     //wifi名称
    //char pswd[] = "123**780";              //wifi密码
    
    
         //灯
     int kg1=14;//1 D5
     int kg2=12;//2 D6
     int kg3=13;//3 D7
     int kg4=15;//4 D8
    
         //开关
     int kg5=5;//1本地轻触开关,io2与gnd接时动作 D1
     int kg6=4;//2  D2
     int kg7=0;//3  D3
     int kg8=2;//4  D4
     
    //*******新建组件对象   设置app按键的键名
    BlinkerButton Button1("btn-1");         
    BlinkerButton Button2("btn-2");
    BlinkerButton Button3("btn-3");
    BlinkerButton Button4("btn-4");
    
     
    //*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
     ////////////////////////////////////////////////////////////////////////////1
    void button1_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了 按键1 : ", state);                //串口打印
    
      if (digitalRead(kg1)==HIGH) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg1, LOW); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");                         //反馈回按键状态是关
      }
      else if (digitalRead(kg1)==LOW) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg1,HIGH);
        Button1.color("#FFFF00");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");                      //反馈回按键状态是开
      }
    }
    ///////////////////////////////////////////////////////////////////////////////2
    void button2_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了 按键2 : ", state);                //串口打印
      
     if (digitalRead(kg2)==HIGH) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg2, LOW); 
        Button2.color("#00FFFF");                     //设置app按键是深蓝色
        Button2.text("灭");
        Button2.print("off");                         //反馈回按键状态是关
      }
    
    else if (digitalRead(kg2)==LOW) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg2,HIGH);
        Button2.color("#0000FF");                  //设置app按键是浅蓝色
        Button2.text("亮");
        Button2.print("on");                      //反馈回按键状态是开
      }
    }
    
    
    //////////////////////////////////////////////////////////////////////////3
    void button3_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了 按键3 : ", state);                //串口打印
      
     if (digitalRead(kg3)==HIGH) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg3, LOW); 
        Button3.color("#00FFFF");                     //设置app按键是深蓝色
        Button3.text("灭");
        Button3.print("off");                         //反馈回按键状态是关
      }
    
    else if (digitalRead(kg3)==LOW) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg3,HIGH);
        Button3.color("#FF0000");                  //设置app按键是浅蓝色
        Button3.text("亮");
        Button3.print("on");                      //反馈回按键状态是开
      }
    }
    
    
    /////////////////////////////////////////////////////////////////////////4
    void button4_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了 按键4 : ", state);                //串口打印
    
    if (digitalRead(kg4)==HIGH) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg4, LOW); 
        Button4.color("#00FFFF");                     //设置app按键是深蓝色
        Button4.text("灭");
        Button4.print("off");                         //反馈回按键状态是关
      }
      else if (digitalRead(kg4)==LOW) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg4,HIGH);
        Button4.color("#006400");                  //设置app按键是浅蓝色
        Button4.text("亮");
        Button4.print("on");                      //反馈回按键状态是开
      }
    
    
    }
    
    
    
    void Set_Butt(int num) //on反馈
    {
        if (num == 1) {
            Button1.color("#FFFF00");                  //设置app按键是浅蓝色
        Button1.text("亮");
            Button1.print("on");      
        } else if (num == 2) {
            Button2.color("#0000FF");                  //设置app按键是浅蓝色
        Button2.text("亮");
            Button2.print("on");
        } else if (num == 3) {
            Button3.color("#FF0000");                  //设置app按键是浅蓝色
        Button3.text("亮");
            Button3.print("on");
        } else if (num == 4) {
            Button4.color("#006400");                  //设置app按键是浅蓝色
        Button4.text("亮");
            Button4.print("on");
        }   
    }
    void Reset_Butt(int num) //off反馈
    {
        if (num == 1) {
              Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
            Button1.print("off");      
        } else if (num == 2) {
              Button2.color("#00FFFF");                     //设置app按键是深蓝色
        Button2.text("灭");
            Button2.print("off");
        } else if (num == 3) {
              Button3.color("#00FFFF");                     //设置app按键是深蓝色
        Button3.text("灭");
            Button3.print("off");
        } else if (num == 4) {
              Button4.color("#00FFFF");                     //设置app按键是深蓝色
        Button4.text("灭");
            Button4.print("off");
        }   
    }
    
    
     //*******如果小爱有对设备进行操作就执行下面
     char Port;
    int Feedback = 0;
    int OnorOff = 0;
     void miotPowerState(const String & state, uint8_t num)     //小爱控制函数
    {
      BLINKER_LOG("need set outlet: ", num, ", power state: ", state);
      if (num == 1) {
        Feedback = 1;
        Port = kg1;        //指定每一路开关对应在开发板上的通道接口
      } else if (num == 2) {
        Feedback = 2;
        Port = kg2;
      } else if (num == 3) {
        Feedback = 3;
        Port = kg3;
      } else if (num == 4) {
        Feedback = 4;
        Port = kg4;
      }
    
      if (state == BLINKER_CMD_ON) {
        OnorOff = 1;
        if(num == 0)
        {
            Feedback = 5;
            digitalWrite(kg1, HIGH);
            digitalWrite(kg2, HIGH);
            digitalWrite(kg3, HIGH);
            digitalWrite(kg4, HIGH);
        }
        else
        {
            digitalWrite(Port, HIGH);
        }
    
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();
      }
      else if (state == BLINKER_CMD_OFF) {
        OnorOff = 2;
        if(num == 0)
        {
            Feedback = 5;
            digitalWrite(kg1, LOW);
            digitalWrite(kg2, LOW);
            digitalWrite(kg3, LOW);
            digitalWrite(kg4, LOW);
        }
        else
        {
            digitalWrite(Port, LOW);
        }
    
        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();
      }
    }
    
      //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
    void heartbeat()
    {
      BLINKER_LOG("状态同步!");
    
       //////////////////////////////////////////////1
       if (digitalRead(kg1)==HIGH) 
        { 
          Button1.print("on");
          Button1.color("#FFFF00");              //设置app按键是浅蓝色
          Button1.text("亮");
        }
        else 
        {
        Button1.print("off");
        Button1.color("#00FFFF");              //设置app按键是深蓝色
        Button1.text("灭");
        }
    ////////////////////////////////////////////////2
    if (digitalRead(kg2)==HIGH) 
        { 
          Button2.print("on");
          Button2.color("#0000FF");              //设置app按键是浅蓝色
          Button2.text("亮");
        }
        else 
        {
        Button2.print("off");
        Button2.color("#00FFFF");              //设置app按键是深蓝色
        Button2.text("灭");
        }
    //////////////////////////////////////////////////3
    
    if (digitalRead(kg3)==HIGH) 
        { 
          Button3.print("on");
          Button3.color("#FF0000");              //设置app按键是浅蓝色
          Button3.text("亮");
        }
        else 
        {
        Button3.print("off");
        Button3.color("#00FFFF");              //设置app按键是深蓝色
        Button3.text("灭");
        }
    
    
    //////////////////////////////////////////4
    
        if (digitalRead(kg4)==HIGH) 
        { 
          Button4.print("on");
          Button4.color("#006400");              //设置app按键是浅蓝色
          Button4.text("亮");
        }
        else 
        {
        Button4.print("off");
        Button4.color("#00FFFF");              //设置app按键是深蓝色
        Button4.text("灭");
        }
    
        
        
    }
    
        
          ///如果本地开关有动作执行下面手动模式
    void sdms(){ 
    
      //////////////////////////////////////////////////////////////
     if (digitalRead(kg1)==LOW&&digitalRead(kg5)==LOW) { 
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg5)==HIGH){                
            BLINKER_LOG("本地开关1");      
            BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg1,HIGH);
            Button1.color("#FFFF00");                  //设置app按键是浅蓝色
            Button1.text("亮");
            Button1.print("on");
            }
     }
     if (digitalRead(kg1)==HIGH&&digitalRead(kg5)==LOW) {              
        Blinker.delay(150); //延时150ms不能太少标准按键成功率
        if (digitalRead(kg5)==HIGH){
            BLINKER_LOG("本地开关1"); 
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg1, LOW); 
            Button1.color("#00FFFF");                     //设置app按键是深蓝色
            Button1.text("灭");
            Button1.print("off");
            }
    }
    ////////////////////////////////////////////////////////////////////////////
    
     if (digitalRead(kg2)==LOW&&digitalRead(kg6)==LOW) { 
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg6)==HIGH){                
            BLINKER_LOG("本地开关2");      
            BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg2,HIGH);
            Button2.color("#0000FF");                  //设置app按键是浅蓝色
            Button2.text("亮");
            Button2.print("on");
            }
     }
     if (digitalRead(kg2)==HIGH&&digitalRead(kg6)==LOW) {              
        Blinker.delay(150); //延时150ms不能太少标准按键成功率
        if (digitalRead(kg6)==HIGH){
            BLINKER_LOG("本地开关2"); 
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg2, LOW); 
            Button2.color("#00FFFF");                     //设置app按键是深蓝色
            Button2.text("灭");
            Button2.print("off");
            }
    }
    ///////////////////////////////////////////////////////////
    
     if (digitalRead(kg3)==LOW&&digitalRead(kg7)==LOW) { 
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg7)==HIGH){                
            BLINKER_LOG("本地开关3");      
            BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg3,HIGH);
            Button3.color("#FF0000");                  //设置app按键是浅蓝色
            Button3.text("亮");
            Button3.print("on");
            }
     }
     if (digitalRead(kg3)==HIGH&&digitalRead(kg7)==LOW) {              
        Blinker.delay(150); //延时150ms不能太少标准按键成功率
        if (digitalRead(kg7)==HIGH){
            BLINKER_LOG("本地开关3"); 
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg3, LOW); 
            Button3.color("#00FFFF");                     //设置app按键是深蓝色
            Button3.text("灭");
            Button3.print("off");
            }
    }
    /////////////////////////////////////////////////////
     if (digitalRead(kg4)==LOW&&digitalRead(kg8)==LOW) { 
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg8)==HIGH){                
            BLINKER_LOG("本地开关4");      
            BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg4,HIGH);
            Button4.color("#006400");                  //设置app按键是浅蓝色
            Button4.text("亮");
            Button4.print("on");
            }
     }
     if (digitalRead(kg4)==HIGH&&digitalRead(kg8)==LOW) {              
        Blinker.delay(150); //延时150ms不能太少标准按键成功率
        if (digitalRead(kg8)==HIGH){
            BLINKER_LOG("本地开关4"); 
            BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg4, LOW); 
            Button4.color("#00FFFF");                     //设置app按键是深蓝色
            Button4.text("灭");
            Button4.print("off");
            }
    }
    
    
    
    
    }
    
    
    
    void setup()
    {
      // 初始化串口
      Serial.begin(115200);
      BLINKER_DEBUG.stream(Serial);
     
      // 初始化有LED的IO
      
      pinMode(kg1, OUTPUT);
      digitalWrite(kg1, LOW);              //默认上电是开  LOW 时的是断开继电器。
      pinMode(kg5,INPUT_PULLUP);         //输入上拉
      ///////////////////////////////////////////
      pinMode(kg2, OUTPUT);
      digitalWrite(kg2, LOW);              //默认上电是开  LOW 时的是断开继电器。
      pinMode(kg6,INPUT_PULLUP);         //输入上拉
      ////////////////////////////////
        pinMode(kg3, OUTPUT);
      digitalWrite(kg3, LOW);              //默认上电是开  LOW 时的是断开继电器。
      pinMode(kg7,INPUT_PULLUP);         //输入上拉
      ////////////////////////////////////
        pinMode(kg4, OUTPUT);
      digitalWrite(kg4, LOW);              //默认上电是开  LOW 时的是断开继电器。
      pinMode(kg8,INPUT_PULLUP);         //输入上拉
    
    
    
    
    
      
      
      // 初始化blinker
      Blinker.begin(auth);//, ssid, pswd
      
      Button1.attach(button1_callback);   //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
      Button2.attach(button2_callback);   //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
      Button3.attach(button3_callback);   //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
        Button4.attach(button4_callback);   //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
        
    BlinkerMIOT.attachPowerState(miotPowerState); //小爱语音操作注册函数
      Blinker.attachHeartbeat(heartbeat);            //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    }
    
    
    int i=0;
    long F_time = 0;
    int count=0;
    
    
    void loop() {
      sdms();//本地开关手动模式函数
      Blinker.run();
    
    if(OnorOff == 0)
        {
          
        }
        else if(OnorOff == 1)//如果是ON状态
        {
            delay(1000);
            if(Feedback < 5)//小于5 是单独控制 1-4
            {
                Set_Butt(Feedback);//反馈1-4
                OnorOff = 0;
            }else if(Feedback == 5)//等于5 是打开所有然后1.2s每个的速度反馈所有
            {
                if(millis() - F_time >=0)
                {
                     F_time = millis();
                     i++;
                     Set_Butt(i);
                     i%=4;
                     if(i == 0) //当所有状态反馈完毕则退出
                     {
                         Feedback = 0;
                         OnorOff = 0;
                     }
                }   
            }
        }
        else if(OnorOff == 2)
        {
            delay(1000);
            if(Feedback < 5)//小于5 是单独控制 1-4
            {
                Reset_Butt(Feedback);//反馈1-4
                OnorOff = 0;
            }else if(Feedback == 5)//等于5 是 关闭 所有然后1.2s每个的速度反馈所有
            {
                if(millis() - F_time >=0)
                {
                     F_time = millis();
                     i++;
                     Reset_Butt(i);
                     i%=4;
                     if(i == 0) //当所有状态反馈完毕则退出
                     {
                         Feedback = 0;
                         OnorOff = 0;
                     }
                }   
            }
        }
    
    
    }




    手机界面代码:

    {¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨light¨¨background¨{¨img¨¨assets/img/bg/f2.jpg¨¨isFull¨»}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-lightbulb-on¨¨mode¨Ê¨t0¨´1´¨t1¨¨文本2¨¨bg¨É¨cols¨Í¨rows¨Í¨key¨¨btn-1¨´x´É´y´Ñ¨speech¨|÷¨lstyle¨Ë}{ßAßBßCßDßEÊßF´2´ßGßHßIÉßJÍßKÍßL¨btn-2¨´x´Í´y´ÑßN|÷ßOË}{ßAßBßCßDßEÊßF´3´ßGßHßIÉßJÍßKÍßL¨btn-3¨´x´É´y´¤CßN|÷ßOË}{ßAßBßCßDßEÊßF´4´ßGßHßIÉßJÍßKÍßL¨btn-4¨´x´Í´y´¤CßN|÷ßOË}{ßA¨deb¨ßEÊßIÉßJÑßKÍßL¨debug¨´x´É´y´ÉßN|÷ßOÊ}÷¨actions¨|÷¨triggers¨|÷}
  • TA的每日心情
    擦汗
    2020-3-25 08:20
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2020-3-4 08:36 | 显示全部楼层
    注释很到位,解释很清楚!
  • TA的每日心情
    开心
    2020-4-18 15:28
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2020-3-6 10:42 | 显示全部楼层
    本帖最后由 z01228 于 2020-3-7 12:43 编辑
    sunofsun 发表于 2020-3-4 08:36
    注释很到位,解释很清楚!

    要的就是方便新人   毕竟我也是这样过来的

    点评

    谢谢!我这新人有福了。  发表于 2020-3-15 22:15
  • TA的每日心情
    开心
    2020-5-23 19:37
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2020-3-6 17:21 | 显示全部楼层
    你好,楼主,我现在在想,在电路中增加一个按键,按一下开或关。同时将状态同步在app中的按钮。我现在一直找不到解决办法。想问一下有什么解决方法。
  • TA的每日心情
    开心
    2020-4-18 15:28
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2020-3-7 08:00 | 显示全部楼层
    本帖最后由 z01228 于 2020-3-7 08:01 编辑
    一入极客深似海 发表于 2020-3-6 17:21
    你好,楼主,我现在在想,在电路中增加一个按键,按一下开或关。同时将状态同步在app中的按钮。我现在一直 ...

    这个很好解决吧 但是1s不知道可不可以用。我假设控制的io开是o低电平触发+硬件防抖  在loop  这个里面加这个

    kittenblock中小学创客名师推荐的图形化编程软件

    if(digitalRead(LED_BUILTIN)==LOW&&digitalRead(0)==LOW){    BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(LED_BUILTIN,LOW);
        Button1.color("#0000FF");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");  }
    
    if(digitalRead(LED_BUILTIN)==HIGH&&digitalRead(0)==LOW){           
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(LED_BUILTIN, HIGH); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");  }
    
  • TA的每日心情
    开心
    2020-5-23 19:37
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2020-3-7 10:12 | 显示全部楼层
    z01228 发表于 2020-3-7 08:00
    这个很好解决吧 但是1s不知道可不可以用。我假设控制的io开是o低电平触发+硬件防抖  在loop  这个里面加这 ...

    好的,我试一下,谢谢
  • TA的每日心情
    开心
    2020-5-23 19:37
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2020-3-7 11:28 | 显示全部楼层
    z01228 发表于 2020-3-7 08:00
    这个很好解决吧 但是1s不知道可不可以用。我假设控制的io开是o低电平触发+硬件防抖  在loop  这个里面加这 ...

    楼主 ,我把你程序中的LED_BUILTIN定义了一个引脚并输出。这一块没问题。然后加上你给的按键中的程序就有一行一直不能编译通过。
    劳您大驾,给看看是怎么回事?

    kittenblock中小学创客名师推荐的图形化编程软件

    /*我自定义的了一个读取按键状态的引脚*/
    #define Socket2 D6    //  电路中的按键 
    
    /*引脚设为输入状态*/     
    void setup()
    {
       pinMode(Socket2, INPUT);
    }
    
    /*这一段是整个loop中的函数*/
    void loop() {
      Blinker.run();
      if(digitalRead(LED_BUILTIN) ==LOW&&digitalRead(Socket2)==LOW){ 
        BLINKER_LOG("亮灯!");                         //串口打印
        digitalWrite(LED_BUILTIN,LOW);
        Button1.color("#0000FF");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");                                          }
     
     if(digitalRead(LED_BUILTIN)==HIGH&&digitalRead(Socket2)==LOW){    //编译在这一行出错显示内容为  :stray '\357' in program       
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(LED_BUILTIN, HIGH); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");  }
    }


    你这一段程序,我什么都不加,直接放进去也不行。也是那一行编译不通过


  • TA的每日心情
    开心
    2020-2-22 11:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-3-7 12:22 | 显示全部楼层
    一入极客深似海 发表于 2020-3-6 17:21
    你好,楼主,我现在在想,在电路中增加一个按键,按一下开或关。同时将状态同步在app中的按钮。我现在一直 ...

    你是怎样实现即用物理开关控制又用APP控制的呢?求教
  • TA的每日心情
    开心
    2020-4-18 15:28
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2020-3-7 12:27 | 显示全部楼层
    本帖最后由 z01228 于 2020-3-8 13:20 编辑
    不会飞的猪 发表于 2020-3-7 12:22
    你是怎样实现即用物理开关控制又用APP控制的呢?求教

    你用这个试一试。我加了程序防抖。这个程序可以app+小爱+本地按键控制。状态也可以同步。


    kittenblock中小学创客名师推荐的图形化编程软件

    /************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************
         十六进制颜色码
         (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)
         程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键
         使用的单片机是esp8266-01s,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))
         
    */
         
     
    #define BLINKER_WIFI                    //官方wifi协议库
    #define BLINKER_MIOT_LIGHT              //小爱灯类库
    #define BLINKER_PRINT Serial            //串口协议库
    #include <Blinker.h>                    //官方库
    
    char auth[] = "2b1****2b";           //设备key号
    char ssid[] = "mi";                     //wifi名称
    char pswd[] = "123**780";              //wifi密码
    
     int kg=0;//继电器输出
     int kg2=2;//本地轻触开关,io2与gnd接时动作
    //*******新建组件对象
    BlinkerButton Button1("btn-abc");              //设置app按键的键名
    
    //*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
    void button1_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
    {
      BLINKER_LOG("app操作了!: ", state);                //串口打印
     
      if (digitalRead(kg)==LOW) {              //如果state是on状态
        BLINKER_LOG("灭灯!");                           //串口打印
        digitalWrite(kg, HIGH); 
        Button1.color("#00FFFF");                     //设置app按键是深蓝色
        Button1.text("灭");
        Button1.print("off");                         //反馈回按键状态是开
      }
      else if (digitalRead(kg)==HIGH) {       //如果state是off状态
        BLINKER_LOG("亮灯!");                         //串口打印
         digitalWrite(kg,LOW);
        Button1.color("#0000FF");                  //设置app按键是浅蓝色
        Button1.text("亮");
        Button1.print("on");                      //反馈回按键状态是关
      }
    }
     //*******如果小爱有对设备进行操作就执行下面
     void miotPowerState(const String & state)
    {
        BLINKER_LOG("小爱语音操作!");              //串口打印
    
        if (state == BLINKER_CMD_ON){
            digitalWrite(kg,LOW);
            BlinkerMIOT.powerState("on");
            BLINKER_LOG("亮灯!"); 
            BlinkerMIOT.print();
        }
        else if (state == BLINKER_CMD_OFF){
            digitalWrite(kg,HIGH);
            BlinkerMIOT.powerState("off");
            BLINKER_LOG("灭灯!"); 
            BlinkerMIOT.print();
        }
    }
      //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次
    void heartbeat()
    {
      BLINKER_LOG("状态同步!"); 
       if (digitalRead(kg)==LOW) 
        { 
          Button1.print("on");
          Button1.color("#0000FF");              //设置app按键是浅蓝色
          Button1.text("亮");
        }
        else 
        {
        Button1.print("off");
        Button1.color("#00FFFF");              //设置app按键是深蓝色
        Button1.text("灭");
        }
    }
    ///如果本地开关有动作执行下面手动模式
    void sdms(){
     if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //
        Blinker.delay(150);  //延时150ms不能太少标准按键成功率
        if (digitalRead(kg2)==HIGH){
           BLINKER_LOG("本地开关动作!");  
     BLINKER_LOG("亮灯!");                         //串口打印
            digitalWrite(kg,LOW);
            Button1.color("#0000FF");                  //设置app按键是浅蓝色
            Button1.text("亮");
            Button1.print("on");
            }
     }
     if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {              
        Blinker.delay(150);
        if (digitalRead(kg2)==HIGH){
            
    BLINKER_LOG("本地开关动作!");  
    BLINKER_LOG("灭灯!");                           //串口打印
            digitalWrite(kg, HIGH); 
            Button1.color("#00FFFF");                     //设置app按键是深蓝色
            Button1.text("灭");
            Button1.print("off");
            }
    }
    }
    void setup()
    {
      // 初始化串口
      Serial.begin(115200);
      BLINKER_DEBUG.stream(Serial);
     
      // 初始化有LED的IO
      pinMode(kg, OUTPUT);
      digitalWrite(kg, LOW);              //默认上电是开  LOW 时的是接通继电器。
      pinMode(kg2,INPUT_PULLUP);         //输入上拉
      
      // 初始化blinker
      Blinker.begin(auth, ssid, pswd);
      Button1.attach(button1_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
      BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数
      Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
    }
     
    void loop() {
      sdms();//本地开关手动模式函数
      Blinker.run();
    }

  • TA的每日心情
    开心
    2020-4-18 15:28
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2020-3-7 12:38 | 显示全部楼层
    一入极客深似海 发表于 2020-3-7 11:28
    楼主 ,我把你程序中的LED_BUILTIN定义了一个引脚并输出。这一块没问题。然后加上你给的按键中的程序就有 ...

    应该是你没有定义好io口 我重新写了下程序你试一试
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    求大神看看哪里有问题,设备在线,米家也同步正常,就.....
    求大神看看哪里有问题,设
    代码: #define BLINKER_PRINT Serial //用于打开串口 #define BLINKER_WIFI #define
    晒图ESP8266一个框架
    晒图ESP8266一个框架
    好久没发帖了,出来活跃活跃一下。ESP8266免身份登录截图。 最近外研究新的架构M2M或P
    Arduino 求助 串口接收数据不正确,数据丢失问题
    Arduino 求助 串口接收数
    问题整了好久,我自己写的C#程序发送数据,arduino接收数据。 但是发现arduino接收的
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表