在 rt-thread 提供的 aliot-kit 的软件包中,有提供例程,使能例程并且进行了正确的配置后,设备就可以成功上云
如果有更加复杂的需求,比如获取设备端的数据,就需要进一步的开发了
首先将目光放到软件包提供的例程中,可以看到例程主要的工作都是在 mqtt_client
这个函数中完成的
在 mqtt_client
中,首先是初始化 MQTT 链接相关的参数,比如超时时间、发送接收缓存大小等等;初始化 MQTT 后,就是通过 IOT_MQTT_Subscribe
订阅服务器端的 topic
,下面列出我的设备的 topic
列表
在程序中具体的订阅的代码如下
#define ALINK_SERVICE_SET_SUB "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/service/property/set"
...
IOT_MQTT_Subscribe(pclient, ALINK_SERVICE_SET_SUB, IOTX_MQTT_QOS1, _demo_message_arrive, NULL);
订阅成功之后就可以进行数据的上传了,数据的上传需要通过 IOT_MQTT_Publish
这个接口完成,将需要上传的数据放到 msg_pub
中,比如我这里需要上传 LockState CurrentHumidity CurrentTemperature
三个数据,具体实现如下
#define ALINK_PROPERTY_POST_PUB "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post"
/* Initialize topic information */
memset(msg_pub, 0x0, sizeof(msg_pub));
snprintf(msg_pub, sizeof(msg_pub),
"{\"id\" : \"%d\",\"version\":\"1.0\",\"params\" : "
"{\"LockState\" : %d,"
"\"CurrentHumidity\":\"%d\%\%\"," /* double \% just show one */
"\"CurrentTemperature\":\"%d\℃\"},"
"\"method\":\"thing.event.property.post\"}",
(++pub_msg_cnt)%10000, lock_status, humi, temp);
memset(&topic_msg, 0x0, sizeof(iotx_mqtt_topic_info_t));
topic_msg.qos = IOTX_MQTT_QOS1;
topic_msg.retain = 0;
topic_msg.dup = 0;
topic_msg.payload = (void *)msg_pub;
topic_msg.payload_len = strlen(msg_pub);
IOT_MQTT_Publish(pclient, ALINK_PROPERTY_POST_PUB, &topic_msg);
运行完这段程序就可以在云端查看到设备上传数据了,下图是使用虚拟设备推送的数据