• 物联网之点灯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端按钮会看到开灯和关灯的效果了。

  • 相关阅读:
    vue3 自定义组件 v-model 原理解析
    SQL server2019 Express安装
    Windows安装Jenkins
    肽核酸PNA规格信息|大豆过氧化酶标记肽核酸(Peptide nucleic acid,PNA)
    电线延长寿命小妙招
    JLink更新固件成砖头的Q&A
    聚已内酯偶联小鼠血清白蛋白/小麦麦清白蛋白;PCL-MSA/RSA(试用说明)
    企业电子招投标采购系统源码之电子招投标的组成
    【C#】委托与事件
    SpringBoot配置文件 yaml的使用
  • 原文地址:https://blog.csdn.net/u011995159/article/details/127712677