查看: 1252|回复: 10

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

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

    [LV.2]偶尔看看I

    发表于 2020-2-25 22:16 | 显示全部楼层 |阅读模式
    先上代码
    [mw_shl_code=arduino,true]#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();
    }[/mw_shl_code]
    我的继电器模块是这个样子的
    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-5-9 23:03
  • 签到天数: 201 天

    [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上没有回馈开关状态,请指教,菜鸟一个,谢谢!
    ...

    [mw_shl_code=arduino,true]#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();
    }[/mw_shl_code]

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

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    [Arduino物联网开发实战2]数据反馈
    [Arduino物联网开发实战2]
    [md]上一篇:(https://www.arduino.cn/thread-83177-1-1.html) 除了控制设备外,blin
    小爱同学开电脑 esp8266 12f
    小爱同学开电脑 esp8266 1
    1.mini D1 wifi ESP-12F N ESP8266开发板 2.1路 5V继电器模块 高电平触发 3.AMS1117-3
    服务器平台又挂了么,显示服务器未响应了
    服务器平台又挂了么,显示
    数据读不回来了
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表