mqtt provider 是一个 mqtt 包装库,它可以让你只需要几行代码就可以将一个节点接入远程控制。你可以使用自己的界面,也可以使用我准备好的界面
int get()
函数,他返回一个 0-100 的数字,代表这个节点检测值。如果是一个 bool 类型只需要返回 0/1。- 受控器还需要支持
void set(int val)
函数,函数接受一个 val(0-100)
建议将每一个节点单独放在一个namespace下
示例:
namespace Led {
int led_pin = D5;
int led_state = LOW;
int btn_pin = D6;
int get()
{
return led_state;
}
void set(int val)
{
led_state = val ? HIGH : LOW;
digitalWrite(led_pin, led_state);
}
void setup()
{
pinMode(led_pin, OUTPUT);
pinMode(btn_pin, INPUT_PULLUP);
digitalWrite(led_pin, led_state);
}
void loop()
{
if(btn_click(btn_pin)){
led_state = led_state ? LOW : HIGH;
set(led_state);
}
}
}
#include <MqttProvider.hpp>
namespace Led {
...........//上面写的led
}
void setup()
{
Serial.begin(115200); //初始化串口
Led::setup(); //led初始化
Mqtt::init("WiFi SSID", "password", "Secret key"); //1. mqtt初始化
Mqtt::MqttNode* led_node = new Mqtt::MqttNode(Mqtt::BOOL_CONTROLLER, "灯光", "厨房", Led::get, Led::set); //2. 添加一个节点
Mqtt::send_alive(); //3. 确保添加完之后同步消息
}
void loop()
{
Led::loop();
Mqtt::loop(); //4. 必须添加此行,实现数据同步等重要功能
}
- 远程控制
- 自动同步数据(物理开关也会同步到远程)
- 存活检测
详细的 mqtt topic 设计可以查看此处