BabyOS增加MQTT服务

MQTT在物联网中比较常见,早些时间BabyOS也分享过基于WiFi模组的MQTT例子,当时使用AT指令,MQTT逻辑运行在WIFI模组里面;

为了适用性更广,BabyOS里面增加MQTT也是必要的选择;准备分多个阶段进行:

https://gitee.com/notrynohigh/BabyOS/issues/IAHOVM

  1. 实现mqtt qos0;使用者可利用 “小豆子爱编程”公众号完成对设备的控制

  2. 实现mqtt qos1; qos1需要耗费更多的资源,并增加重发逻辑;

  3. 实现mqtts的连接;

以上3条实现后,再考虑实现qos2;

先看看qos0,1,2的区别:

uml

目前dev分支的代码已经实现了任务1,可以让使用者很方便的控制设备;对于DIY和演示demo很有用;

下面介绍如何使用以及代码逻辑:

代码实现引入第三方代码的MQTTPacket目录源码:

https://github.com/eclipse/paho.mqtt.embedded-c/tree/master

代码里按照如下步骤运行:

flow

使用只需要两步:

  1. 配置自己的topic(”小豆子爱编程公众号”的每个关注者都有一个topic)

img

  1. 调用接口

linux平台可运行 bos/test/mqtt/ 目录代码体验;

其他平台参考例程仓库代码。

void bMqttCallback(bMqttEvent_t evt, bMqttEvtParam_t *param, void *user_data)
{
    switch (evt)
    {
        case B_MQTT_EVT_CONN:
            b_log_i("bMqttEvent_Connected\r\n");
            break;
        case B_MQTT_EVT_DISCONN:
            b_log_i("bMqttEvent_Disconnected\r\n");
            break;
        case B_MQTT_EVT_PUB:
            b_log("topic:%.*s\r\n", param->pub.topic_len, param->pub.topic);
            b_log("payload:%.*s\r\n", param->pub.payload_len, param->pub.payload);
            break;
        default:
            break;
    }
}

int main()
{
    port_init();
    bInit();
    bMqttSrvStartWithCfg(bMqttCallback, NULL); //调用此接口
    while (1)
    {
        bExec();
    }
    return 0;
}

img

例程仓库中的代码是使用公众号发送消息 “1”,“0” 开关屏幕背光;


目前代码还处于第一阶段,有兴趣的开发者可以共同开发,代码可以提交到 feat-mqtt 分支;