物联网技术推动:远程按键开关灯的应用实例

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

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

示例完整代码:MQTT_PUB.ino 

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

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

// 按下按键即会执行该函数进行开关灯
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

// 改进:
// 因为app端不知道当前灯的状态,所以改动button为switch类型


void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    // digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    if (state=="on") {
        digitalWrite(LED_BUILTIN, LOW);
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        digitalWrite(LED_BUILTIN, HIGH);
        // 反馈开关状态
        Button1.print("off");
    }
}

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

如果是开关按键: 

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

{"btn-abc":"tap"}

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

// 此函数用于捕捉手机上的所有的请求,此函数在窜口可以观察到数据
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter); //回传数据到app组件

    if (BLINKER_PROTOCOL_MQTT != NULL) {
        String pub_topic = String("/device/") + Blinker.deviceName() + String("/s");
        String pub_data = "{\"toDevice\":\"the device name you need pub to\",\"data\":{\"hello\":\"blinker\"}}";
        BLINKER_PROTOCOL_MQTT->publish(pub_topic.c_str(), pub_data.c_str());
    }
}

setup函数

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

void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
    dht.begin();
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachHeartbeat(heartbeat);//将传感器回调函数加载,回传数据
    // attach callback function
    Blinker.attachData(dataRead);
    Button1.attach(button1_callback);
    
}

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

物联沃分享整理
物联沃-IOTWORD物联网 » 物联网技术推动:远程按键开关灯的应用实例

发表评论