Skip to content

Latest commit

 

History

History
82 lines (63 loc) · 1.85 KB

readme.md

File metadata and controls

82 lines (63 loc) · 1.85 KB

Mqtt Provider

English

mqtt provider 是一个 mqtt 包装库,它可以让你只需要几行代码就可以将一个节点接入远程控制。你可以使用自己的界面,也可以使用我准备好的界面

如何接入

1. 传感器节点需要支持以下函数

  • 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);
    }
}
}

2. 接入节点

#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 设计可以查看此处