設備與阿里雲完成發布訂閱的功能,接下來就是將設備狀態如溫濕度,PM2.5值上報更新至阿里雲。
1.查看Topic。
在阿里雲平台上 設備->Topic列表中查看。在產品中也可以看到對應的Topic類列表,將其中的"${deviceName}"替換成設備的名字,在這個列表中通過后方的描述可以清楚的知道每個Topic對應的系統功能。顯然這里上報的Topic是/sys/a1IVGQbttJv/MyFirstALIYUN/thing/event/property/post
2.ALINK JSON下的數據上報格式。
貼上上報數據源碼:
BOOL ICACHE_FLASH_ATTR
MQTT_Publish(MQTT_Client *client, const char* topic, const char* data, int data_length, int qos, int retain)
{
uint8_t dataBuffer[MQTT_BUF_SIZE];
uint16_t dataLen;
client->mqtt_state.outbound_message = mqtt_msg_publish(&client->mqtt_state.mqtt_connection,
topic, data, data_length,
qos, retain,
&client->mqtt_state.pending_msg_id);
if (client->mqtt_state.outbound_message->length == 0) {
INFO("MQTT: Queuing publish failed\r\n");
return FALSE;
}
INFO("MQTT: queuing publish, length: %d, queue size(%d/%d)\r\n", client->mqtt_state.outbound_message->length, client->msgQueue.rb.fill_cnt, client- >msgQueue.rb.size);
while (QUEUE_Puts(&client->msgQueue, client->mqtt_state.outbound_message->data, client->mqtt_state.outbound_message->length) == -1) {
INFO("MQTT: Queue full\r\n");
if (QUEUE_Gets(&client->msgQueue, dataBuffer, &dataLen, MQTT_BUF_SIZE) == -1) {
INFO("MQTT: Serious buffer error\r\n");
return FALSE;
}
}
system_os_post(MQTT_TASK_PRIO, 0, (os_param_t)client);
return TRUE;
}
簡要分析:mqtt_msg_publish里面將Topic和date進行字符串重組,將其組裝成json格式,QUEUE_Puts再將數據放入隊列中。
其次來看看雲端下發的json格式的數據:(位置: 監控運維->在線調試 )
可以看到設備下發時收到的json數據格式是method+id+params+version
所以 MQTT_Publish(client, TOPIC, "hello", 6, 0, 0)函數中,我們將date的中的數據改為如圖上的數據
整個函數下來是這樣的:
#defined POSTSERVER /sys/a1IVGQbttJv/MyFirstALIYUN/thing/event/property/post // 需要修改對應的POSTSERVER 和函數中的字符串
MQTT_Publish(client, POSTSERVER , "{\"method\":\"thing.event.property.post\",\"id\":\"964754367\",\"params\":{\"PM25\":101},\"version\":\"1.0.0\"}", 96, 0, 0);
這里\"的意思是轉義字符,id中的數值是上報阿里雲對應的編號,上報時自定義數據編號,雲端下發命令時候由雲端自主產生,其次,需要注意的是MQTT_Publish中的數據大小直接用sizeof()函數算出,這里為了方便展示直接將字符串放在MQTT_Publish中,字符串的拼接函數自行編寫。
注:MQTT_Publish中將thing.event.property.post -> thing/event/property/post也可成功上報.
接下來就是編譯固件並燒寫了,燒寫完就可以在阿里雲上看到設備數值和時間都已更新,至此阿里雲更新設備狀態和發布訂閱完成。
附:mqttfx的使用教程:https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11174283.2.44.ecc71668iTfIKk
注:使用mqttfx上報設備數據時不需要加轉義字符。
-------------------今天也是充滿希望的一天~