• 物联网之点灯app按键事件绑定,远程开灯


     接上文物联网ESP8266之温湿度上传到点灯科技blinkerapp

    本文主要是使用点灯科技blinker app进行按键绑定的示例,在智能家居应用开发中,app控制家电开关是个比较典型的使用案例。

    示例完整代码:MQTT_PUB.ino 

    1. // 新建组件对象对应的是app中的组件名称
    2. BlinkerButton Button1("btn-abc");
    3. BlinkerNumber Number1("num-abc");

    远程开机绑定的函数,通过按键事件,可以开关灯,这些是智能家居中最常见的app控制电器开关。

    1. // 按下按键即会执行该函数进行开关灯
    2. void button1_callback(const String & state)
    3. {
    4. BLINKER_LOG("get button state: ", state);
    5. digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    6. }
    7. // 改进:
    8. // 因为app端不知道当前灯的状态,所以改动button为switch类型
    9. void button1_callback(const String & state)
    10. {
    11. BLINKER_LOG("get button state: ", state);
    12. // digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    13. if (state=="on") {
    14. digitalWrite(LED_BUILTIN, LOW);
    15. // 反馈开关状态
    16. Button1.print("on");
    17. } else if(state=="off"){
    18. digitalWrite(LED_BUILTIN, HIGH);
    19. // 反馈开关状态
    20. Button1.print("off");
    21. }
    22. }

     绑定数据,当app按下button时,通过串口查看实践,button按下事件string为tap

    如果是开关按键: 

    三种类型区别如下:
    **普通按键**  
    每次按下发送的指令为  

    {"btn-abc":"tap"}
    

    **开关按键**  
    按键本身会保存开关状态,默认为off,按下时会发送  
    {"btn-abc":"on"}
    保存的状态为on时,按下会发送  
    {"btn-abc":"off"}
     

    1. // 此函数用于捕捉手机上的所有的请求,此函数在窜口可以观察到数据
    2. void dataRead(const String & data)
    3. {
    4. BLINKER_LOG("Blinker readString: ", data);
    5. counter++;
    6. Number1.print(counter); //回传数据到app组件
    7. if (BLINKER_PROTOCOL_MQTT != NULL) {
    8. String pub_topic = String("/device/") + Blinker.deviceName() + String("/s");
    9. String pub_data = "{\"toDevice\":\"the device name you need pub to\",\"data\":{\"hello\":\"blinker\"}}";
    10. BLINKER_PROTOCOL_MQTT->publish(pub_topic.c_str(), pub_data.c_str());
    11. }
    12. }

    setup函数

    上文用的温湿度传感器的gpio口我改到了3,这样温湿度读取不影响观察远程开关的灯亮灭。

    1. void setup()
    2. {
    3. Serial.begin(115200);
    4. BLINKER_DEBUG.stream(Serial);
    5. // 初始化有LED的IO
    6. pinMode(LED_BUILTIN, OUTPUT);
    7. digitalWrite(LED_BUILTIN, LOW);
    8. dht.begin();
    9. // 初始化blinker
    10. Blinker.begin(auth, ssid, pswd);
    11. Blinker.attachHeartbeat(heartbeat);//将传感器回调函数加载,回传数据
    12. // attach callback function
    13. Blinker.attachData(dataRead);
    14. Button1.attach(button1_callback);
    15. }

    上传后,在app端按钮会看到开灯和关灯的效果了。

  • 相关阅读:
    外贸路上越来越精明的客户
    Elasticsearch(四) es出现的问题:填坑
    MQTT 服务器搭建(基于mosquitto)
    【Apache Spark 】第 5 章Spark SQL 和 DataFrames:与外部数据源交互
    Multi-scale multi-intensity defect detection in ray image of weld bead
    Verilog 拼接操作符号
    浅析即时通讯开发前置 HTTP SSO 单点登陆接口的原理
    Unity游戏Mod/插件制作教程04 - 如何创建配置文件
    幸福心理与抗逆力培养的工控系统安全实验课程研究
    玩机教程:阿里云无影云电脑怎么使用?
  • 原文地址:https://blog.csdn.net/u011995159/article/details/127712677