BabyOS增加MQTT服务
MQTT在物联网中比较常见,早些时间BabyOS也分享过基于WiFi模组的MQTT例子,当时使用AT指令,MQTT逻辑运行在WIFI模组里面;
为了适用性更广,BabyOS里面增加MQTT也是必要的选择;准备分多个阶段进行:
https://gitee.com/notrynohigh/BabyOS/issues/IAHOVM
实现mqtt qos0;使用者可利用 “小豆子爱编程”公众号完成对设备的控制
实现mqtt qos1; qos1需要耗费更多的资源,并增加重发逻辑;
实现mqtts的连接;
以上3条实现后,再考虑实现qos2;
先看看qos0,1,2的区别:
目前dev分支的代码已经实现了任务1,可以让使用者很方便的控制设备;对于DIY和演示demo很有用;
下面介绍如何使用以及代码逻辑:
代码实现引入第三方代码的MQTTPacket目录源码:
https://github.com/eclipse/paho.mqtt.embedded-c/tree/master
代码里按照如下步骤运行:
使用只需要两步:
配置自己的topic(”小豆子爱编程公众号”的每个关注者都有一个topic)
调用接口
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;
}
例程仓库中的代码是使用公众号发送消息 “1”,“0” 开关屏幕背光;
目前代码还处于第一阶段,有兴趣的开发者可以共同开发,代码可以提交到 feat-mqtt 分支;