查看: 804|回复: 10

[分享] 小爱同学控制relay继电器(无光藕版本)并显示状态

[复制链接]
  • TA的每日心情
    开心
    2020-2-28 10:33
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2020-2-25 22:16 | 显示全部楼层 |阅读模式
    先上代码

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

    #define BLINKER_PRINT Serial
    #define BLINKER_WIFI
    #define BLINKER_MIOT_LIGHT
    #include <Blinker.h>
    
    char auth[] = "3你i的密钥";
    char ssid[] = "ssid";
    char pswd[] = "wifi密码";
    
    #define LED 0    //0对应GPIO0  2对应GPIO2
     
    bool oState = false;
     
    BlinkerButton Button1("btn");
     
    //按下按键即会执行该函数
    void button1_callback(const String & state) {
      digitalWrite(LED, !digitalRead(LED));
      BLINKER_LOG("get button state: ", state);
      Button1.print(state);
    }
     
    void miotPowerState(const String & state)
    {
      BLINKER_LOG("need set power state: ", state);
     
      if (state == BLINKER_CMD_ON) {
        digitalWrite(LED, HIGH);
        Button1.text("已打开");//可以自由设置三个字
        Button1.print("on");  
        oState = true;
      } else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED, LOW);
        Button1.text("已关闭");//可以自由设置3个字
        Button1.print("off");
        oState = false;
      }
    }
     
    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 setup()
    {
      Serial.begin(115200);
      BLINKER_DEBUG.stream(Serial);
      pinMode(LED, OUTPUT);
      digitalWrite(LED, LOW);
      Blinker.begin(auth, ssid, pswd);
      Blinker.attachData(dataRead);
      Button1.attach(button1_callback);
      BlinkerMIOT.attachPowerState(miotPowerState);
      BlinkerMIOT.attachQuery(miotQuery);
    }
     
    void loop()
    {
      Blinker.run();
    }

    我的继电器模块是这个样子的
    gaitubao_Fp5wb502bRUPF0sz--yWCIknjNGp.jpg
    因为是新手,所以,程序照抄,但是,悲剧了,不能控制继电器,后来参考Creeper666https://www.arduino.cn/thread-84043-1-1.html,用gpio3,控制,没有成功,后来查看电路,发现继电器一个引脚和gpio0控制,所以,改成了gpio0控制,没想到真的能控制了,不知道是不是个例,反正我的能用。
    今天逛论坛,又看到了https://www.arduino.cn/thread-94320-1-1.html,所以最终改成了这样。
    点灯app里面显示状态的图片奉上。
    gaitubao_PNG图像 2_jpg.jpg gaitubao_PNG图像_jpg.jpg
    这个代码默认上电继电器是关闭状态,可以修改为默认是开启状态。
    东拼西凑,不是原创。我也不会原创,纯新手。有错勿喷,虚心改正。
  • TA的每日心情
    郁闷
    2020-4-8 07:55
  • 签到天数: 187 天

    [LV.7]常住居民III

    发表于 2020-2-26 09:10 | 显示全部楼层
    本帖最后由 Creeper666 于 2020-2-26 13:14 编辑

    那啥,我说用GPIO3是因为我买了个ESP01,结果不能用,才把输出改为3,然后引杜邦线出来接上模块才解决的。如果你用的是ESP01S,输出就用GPIO0,可以直插。
  • TA的每日心情
    开心
    2020-2-28 10:33
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-2-26 15:20 | 显示全部楼层
    Creeper666 发表于 2020-2-26 09:10
    那啥,我说用GPIO3是因为我买了个ESP01,结果不能用,才把输出改为3,然后引杜邦线出来接上模块才解决的。 ...

    新手,勿怪,哈哈
  • TA的每日心情
    擦汗
    2020-3-9 08:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2020-2-26 15:34 | 显示全部楼层
    能否接入小爱
  • TA的每日心情
    开心
    2020-2-28 10:33
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-2-26 15:36 | 显示全部楼层

    可以用小爱控制
  • TA的每日心情
    擦汗
    2020-3-9 08:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2020-2-26 21:46 | 显示全部楼层

    直接接入小爱吗
  • TA的每日心情
    开心
    2020-2-28 10:33
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-2-26 22:12 | 显示全部楼层

    在米家app添加一下就可以了
  • TA的每日心情
    无聊
    2020-2-27 14:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-2-26 23:54 | 显示全部楼层
    你好,我用你的代码怎么点灯APP上没有回馈开关状态,请指教,菜鸟一个,谢谢!
  • TA的每日心情
    擦汗
    2020-3-9 08:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2020-2-27 08:49 | 显示全部楼层
    随缘7906 发表于 2020-2-26 22:12
    在米家app添加一下就可以了

    谢谢啦       我之前用的那个不回传状态  我试试您这个
  • TA的每日心情
    开心
    2020-2-28 10:33
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-2-27 16:16 | 显示全部楼层
    凸轮轴 发表于 2020-2-26 23:54
    你好,我用你的代码怎么点灯APP上没有回馈开关状态,请指教,菜鸟一个,谢谢!
    ...

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

    #define BLINKER_WIFI
    #define BLINKER_MIOT_OUTLET
    
    #include <Blinker.h>
    
    char auth[] = "666666";
    char ssid[] = "666666";
    char pswd[] = "z666666";
    
    #define LED 0    //0对应GPIO0  2对应GPIO2
    
    bool oState = false;
    
    BlinkerButton Button1("btn");
    
    void heartbeat()
    {
       if (oState) 
        { Button1.print("on");
          
        }
        else 
        {
          Button1.print("off");
        
        }
    }
    
    //按下按键即会执行该函数
    void button1_callback(const String & state) {
      BLINKER_LOG("get button state: ", state);
      if (state == BLINKER_CMD_ON) {
        digitalWrite(LED, HIGH);
      
        oState = true;
        //Button1.text("已开启");
        
      } else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED, LOW);
      
        oState = false;
        //Button1.text("已关闭");
        
      }
      Button1.print(state);
      BlinkerMIOT.powerState(oState ? "on" : "off");
      BlinkerMIOT.print();
    }
    
    
    void miotPowerState(const String & state)
    {
        BLINKER_LOG("need set power state: ", state);
    
        if (state == BLINKER_CMD_ON) {
            digitalWrite(LED, HIGH);
    
            BlinkerMIOT.powerState("on");
            BlinkerMIOT.print();
            Button1.text("已开启");
            oState = true;
            
        }
        else if (state == BLINKER_CMD_OFF) {
            digitalWrite(LED, LOW);
    
            BlinkerMIOT.powerState("off");
            BlinkerMIOT.print();
            Button1.text("已关闭");
            oState = false;
            
        }
    }
    
    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 setup()
    {
        Serial.begin(115200);
        BLINKER_DEBUG.stream(Serial);
    
        pinMode(LED, OUTPUT);
        digitalWrite(LED, LOW);
    
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachData(dataRead);
        Button1.attach(button1_callback);
        BlinkerMIOT.attachPowerState(miotPowerState);
        BlinkerMIOT.attachQuery(miotQuery);
        Blinker.attachHeartbeat(heartbeat); 
        BLINKER_DEBUG.stream(Serial);
        BLINKER_DEBUG.debugAll();
    }
    
    void loop()
    {
        Blinker.run();
    }


    用这个,心跳包是i分钟一次,所以,肯定会有1分钟一次的状态更新。
    另外,我的按钮用的中间那个按钮,是可以实时显示开关状态的。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    《Color Unit免费申请试用》
    《Color Unit免费申请试用
    COLOR 是一款颜色识别 Unit,其内部集成TCS3472彩色光数字转换器,能够将其检测到颜色
    编译时空白行出现stray '\345' in program
    编译时空白行出现stray &#
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    siri+小爱+小度+天猫控制灯
    siri+小爱+小度+天猫控制
    以上是颜色代码 本程序控制的是8266的 io 0 默认上电LOW 有需求可以知己改写 siri
    siri控制8266
    siri控制8266
    //本程序是操作8266的GPIO 0 口// 程序如下 #include const char* ssid = "TP-11222";
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表