查看: 315|回复: 5

[已解答] 请教如何自动同步ESP8266引脚状态到blinker APP

[复制链接]
  • TA的每日心情
    开心
    2020-7-20 14:58
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2020-7-12 20:51 | 显示全部楼层 |阅读模式
    小爱音箱控制ESP-01S打开/关闭继电器后,如何同步继电器状态到blinker APP?现在的状态是接通电后,APP按键控制,模块和继电器指示灯同时亮灭,一旦小爱音箱控制一次,指示灯状态就会正好相反!请教代码改进,下面是我现在的代码:
    1. #define BLINKER_WIFI
    2. #define BLINKER_MIOT_OUTLET

    3. #include <Blinker.h>

    4. char auth[] = "cb5******1cf"; // Blinker APP中添加设备时生成的Secret Key
    5. char ssid[] = "ty****op"; // WIFI名称
    6. char pswd[] = "155******25"; // WIFI密码

    7. int GPIO = 0; // 定义继电器输入引脚为GPIO/0

    8. bool oState = false;

    9. // 新建组件对象
    10. BlinkerButton Button1("btn-abc");

    11. // 按下按键即会执行该函数
    12. void button1_callback(const String & state)
    13. {
    14. // digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    15. digitalWrite(GPIO, !digitalRead(GPIO));
    16. BLINKER_LOG("get button state: ", state);

    17. if (state == BLINKER_CMD_BUTTON_TAP) {
    18. BLINKER_LOG("Button tap!");

    19. Button1.icon("fal fa-siren");
    20. Button1.color("#0000FF");
    21. // Button1.text("Your button name or describe");
    22. Button1.print();
    23. }
    24. else if (state == BLINKER_CMD_BUTTON_PRESSED) {
    25. BLINKER_LOG("Button pressed!");

    26. Button1.icon("fal fa-siren-on");
    27. Button1.color("#FFFF00");
    28. // Button1.text("Your button name or describe");
    29. Button1.print();
    30. }
    31. else if (state == BLINKER_CMD_BUTTON_RELEASED) {
    32. BLINKER_LOG("Button released!");

    33. Button1.icon("fal fa-siren");
    34. Button1.color("#FF0000");
    35. // Button1.text("Your button name or describe");
    36. Button1.print();
    37. }
    38. else if (state == BLINKER_CMD_ON) {
    39. BLINKER_LOG("Toggle on!");

    40. Button1.icon("fal fa-light-switch-on");
    41. Button1.color("#0000FF");
    42. Button1.text("ON");
    43. Button1.print("on");
    44. }
    45. else if (state == BLINKER_CMD_OFF) {
    46. BLINKER_LOG("Toggle off!");

    47. Button1.icon("fal fa-light-switch-off");
    48. Button1.color("#FF0000");
    49. Button1.text("OFF");
    50. Button1.print("off");
    51. }
    52. else {
    53. BLINKER_LOG("Get user setting: ", state);

    54. Button1.icon("fal fa-light-switch");
    55. Button1.color("#FFFF00");
    56. // Button1.text("Your button name or describe");
    57. Button1.print();
    58. }
    59. }


    60. // 小爱电源类的操作接口
    61. // 用户自定义电源类操作的回调函数
    62. void miotPowerState(const String & state)
    63. {
    64. BLINKER_LOG("need set power state: ", state);

    65. if (state == BLINKER_CMD_ON) {
    66. // digitalWrite(LED_BUILTIN, HIGH);
    67. digitalWrite(GPIO, LOW);

    68. BlinkerMIOT.powerState("on");
    69. BlinkerMIOT.print();

    70. oState = true;
    71. }
    72. else if (state == BLINKER_CMD_OFF) {
    73. // digitalWrite(LED_BUILTIN, LOW);
    74. digitalWrite(GPIO, HIGH);

    75. BlinkerMIOT.powerState("off");
    76. BlinkerMIOT.print();

    77. oState = false;
    78. }
    79. }

    80. // 小爱设备查询接口
    81. // 用户自定义设备查询的回调函数
    82. void miotQuery(int32_t queryCode)
    83. {
    84. BLINKER_LOG("MIOT Query codes: ", queryCode);

    85. switch (queryCode)
    86. {
    87. case BLINKER_CMD_QUERY_ALL_NUMBER :
    88. BLINKER_LOG("MIOT Query All");
    89. BlinkerMIOT.powerState(oState ? "on" : "off");
    90. BlinkerMIOT.print();
    91. break;
    92. case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
    93. BLINKER_LOG("MIOT Query Power State");
    94. BlinkerMIOT.powerState(oState ? "on" : "off");
    95. BlinkerMIOT.print();
    96. break;
    97. default :
    98. BlinkerMIOT.powerState(oState ? "on" : "off");
    99. BlinkerMIOT.print();
    100. break;
    101. }
    102. }

    103. // 如果未绑定的组件被触发,则会执行其中内容
    104. void dataRead(const String & data)
    105. {
    106. BLINKER_LOG("Blinker readString: ", data);

    107. Blinker.vibrate();

    108. uint32_t BlinkerTime = millis();

    109. Blinker.print("millis", BlinkerTime);
    110. }

    111. void setup()
    112. {
    113. // 初始化串口
    114. Serial.begin(115200);
    115. BLINKER_DEBUG.stream(Serial);
    116. // BLINKER_DEBUG.debugAll();

    117. // 初始化有LED的IO
    118. // pinMode(LED_BUILTIN, OUTPUT);
    119. // digitalWrite(LED_BUILTIN, HIGH);
    120. pinMode(GPIO, OUTPUT); // 设定GPIO0为输出引脚
    121. digitalWrite(GPIO, HIGH); // 设定GPIO0为高电位

    122. // 初始化blinker
    123. Blinker.begin(auth, ssid, pswd);
    124. Blinker.attachData(dataRead);

    125. Button1.attach(button1_callback);

    126. BlinkerMIOT.attachPowerState(miotPowerState); // 注册小爱电源类操作回调函数
    127. BlinkerMIOT.attachQuery(miotQuery); // 注册小爱设备查询的回调函数
    128. }

    129. void loop() {
    130. Blinker.run();
    131. }
    复制代码


  • TA的每日心情
    开心
    2020-7-20 14:58
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-7-12 20:52 | 显示全部楼层
    1. if (state == BLINKER_CMD_BUTTON_TAP) {
    2. BLINKER_LOG("Button tap!");

    3. Button1.icon("fal fa-siren");
    4. Button1.color("#0000FF");
    5. // Button1.text("Your button name or describe");
    6. Button1.print();
    7. }
    8. else if (state == BLINKER_CMD_BUTTON_PRESSED) {
    9. BLINKER_LOG("Button pressed!");

    10. Button1.icon("fal fa-siren-on");
    11. Button1.color("#FFFF00");
    12. // Button1.text("Your button name or describe");
    13. Button1.print();
    14. }
    15. else if (state == BLINKER_CMD_BUTTON_RELEASED) {
    16. BLINKER_LOG("Button released!");

    17. Button1.icon("fal fa-siren");
    18. Button1.color("#FF0000");
    19. // Button1.text("Your button name or describe");
    20. Button1.print();
    21. }
    复制代码
  • TA的每日心情
    开心
    2020-7-20 14:58
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-7-12 20:53 | 显示全部楼层

    普通按键这一块,一般什么情况下用呢,TAP、PRESSED、RELEASED
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2020-7-12 23:48 | 显示全部楼层
    1.blinker只负责通信,如何处理收到的指令,是你自己写的。你自己把GPIO状态按需求写就行了。
    2.tap、press、pressup 对应的是短按、长按、长按释放,什么时候需要,也是你自己决定的。
  • TA的每日心情
    无聊
    2020-8-10 10:48
  • 签到天数: 966 天

    [LV.10]以坛为家III

    发表于 2020-7-13 23:02 | 显示全部楼层
    本帖最后由 skygz 于 2020-7-13 23:12 编辑

    void MIOTpowerState(void)
    {//根据oState 标志 同步给小爱同学,  在button1_callback里面加入MIOTpowerState()调用
      BlinkerMIOT.powerState(oState ? "on" : "off");
      BlinkerMIOT.print();
    }

    void HeartBeat(void)
    { //根据oState 标志 同步 按钮当前状态到APP里
      //Button1.text(oState ? "已开启" : "已关闭");
      Button1.print(oState ? "on" : "off");

    }
    void button1_callback(const String & state)
    {
        digitalWrite(GPIO, !digitalRead(GPIO));
        oState = !oState; //标志也要 改变
        MIOTpowerState(); //同步给小爱
        HeartBeat();//同步给APP
      //app里用的是普通按键 那么都是tap状态, 后面判断长按 短按什么的, 用不上的话可以移除。
      //以上代码, 不论是 长按还是短按 都会触发。如果需要判断状态则如下
       if (state == "tap"){
         //将上面的几句代码 都移进入这里。。。
      }
    }

    void setup()
    {
        ..........省略。
        Blinker.attachHeartbeat(HeartBeat);
    }

  • TA的每日心情
    开心
    2020-7-20 14:58
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-7-14 18:45 | 显示全部楼层
    skygz 发表于 2020-7-13 23:02
    void MIOTpowerState(void)
    {//根据oState 标志 同步给小爱同学,  在button1_callback里面加入MIOTpowerSt ...

    感谢         指导
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    胸卡式儿童红花榜(blinker+三色墨水屏)
    胸卡式儿童红花榜(blinke
    【项目名称】胸卡式儿童红花榜【项目简介】 小朋友有很强的自尊心和荣誉感,也有自
    ADAFRUIT_GFX库 tft屏真彩图怎么取模
    ADAFRUIT_GFX库 tft屏真彩
    请问这种16位的是用什么软件取的,网上找了好久取模软件,取的都是8位的
    温度传感器实验求代码
    温度传感器实验求代码
    求详细代码,急!
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表