將ESP8266通過MQTT協議鏈接阿里云IoT物聯網平臺

1 申請阿里云IoT平臺

登錄阿里云,申請開通IoT平臺。https://iot.console.aliyun.com/lk/summary

1.1 注冊產品和設備

在【設備管理】-【產品】中創(chuàng)建產品。


創(chuàng)建產品

在【設備管理】-【設備】中創(chuàng)建設備,其中DeviceName可以自動生成。


創(chuàng)建設備

1.2 添加產品的屬性

在【設備管理】-【產品】-【功能定義】


功能定義

在自定義功能中添加屬性。


添加屬性

1.3 獲取產品和設備信息

在【設備管理】-【設備】-【設備詳情】可以找到DeviceName,DeviceSecret,ProductKey等信息,后續(xù)在接入時會需要。


設備詳情

如果需要ProductSecret可以在【設備管理】-【產品】-【產品詳情】中找到。

2 ESP8266設備端使用arduino開發(fā)

實現需要準備好ESP8266的開發(fā)板和Arduino開發(fā)環(huán)境,詳細參考另一篇文章。http://www.itdecent.cn/p/d236f8983871

2.1 獲取MQTT的sample

事先在【Tools】- 【Manage Libraries】中安裝PubSubClient庫。
可以參考【File】-【Samples】-【PubSubClient】中的mqtt-esp8266例子。

2.2 支持MQTT協議

導入PubSubClient庫,實現MQTT協議的傳輸。
修改例子中的Server地址,端口,用戶名,以及命令的BODY和TOPIC。

#define MQTT_SERVER       PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT         1883
#define MQTT_USRNAME      DEVICE_NAME "&" PRODUCT_KEY

#define ALINK_BODY_FORMAT         "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST     "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"

2.3 集成阿里云IoT接入鑒權函數

參考MQTT連接簽名示例,推薦直接引用里面的函數實現鑒權過程。
https://help.aliyun.com/document_detail/116333.html?spm=a2c4g.11186623.6.652.d9f63f86nJPMqY
參考鏈接的響應碼,如果error為-4,就是鑒權失敗。

iotx_dev_meta_info_t meta_info;
iotx_sign_mqtt_t sign_mqtt;

memset(&meta_info, 0, sizeof(iotx_dev_meta_info_t));
memcpy(meta_info.product_key, PRODUCT_KEY, strlen(PRODUCT_KEY));
memcpy(meta_info.product_secret, PRODUCT_SECRET, strlen(PRODUCT_SECRET));
memcpy(meta_info.device_name, DEVICE_NAME, strlen(DEVICE_NAME));
memcpy(meta_info.device_secret, DEVICE_SECRET, strlen(DEVICE_SECRET));

IOT_Sign_MQTT(IOTX_CLOUD_REGION_SHANGHAI, &meta_info, &sign_mqtt);

2.4 發(fā)送設備狀態(tài)和云端設置狀態(tài)命令的實現

sprintf(param, "{\"idle\":%d}", digitalRead(SENSOR_PIN));
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
boolean bRet = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
Serial.println(bRet ? "OK" : "NG");

事先在【Tools】- 【Manage Libraries】中安裝ArduinoJson庫。
導入ArduinoJson庫,實現Json串的解析。

StaticJsonDocument<MQTT_MAX_PACKET_SIZE> doc;
DeserializationError error = deserializeJson(doc, (char *)payload);  

if (!error) //檢查反序列化是否成功
{
    //讀取json節(jié)點
    Serial.println(doc["id"].as<char*>());
    boolean isIdle = doc["params"]["idle"];
    Serial.println(isIdle);
}

3 調試

3.1 云端調試

利用阿里云的在線調試功能,可以接收設備Post的信息,也可以發(fā)送set命令給設備。
在【監(jiān)控運維】-【在線調試】中選擇設備后,選擇調試的功能和方法,修改值發(fā)送指令給設備。

云端調試set命令

3.2 設備端調試

利用Arduino中的Serial Monitor監(jiān)控串口的調試信息輸出。

ESP8266相關文章閱讀

《利用USB轉TTL鏈接mini ESP8266進行開發(fā)和調試》 http://www.itdecent.cn/p/2207a44dedc5
《ESP8266在線升級OTA的Arduino IDE實現方法之WebServer》 http://www.itdecent.cn/p/b54b18f56d6a
《ESP8266串口數據錯誤不準確問題的解決》http://www.itdecent.cn/p/7ddefcfc2acd
《如何利用Arduino IDE開發(fā)ESP8266程序?》http://www.itdecent.cn/p/d236f8983871
《將ESP8266通過MQTT協議鏈接阿里云IoT物聯網平臺》 http://www.itdecent.cn/p/4d6e216c2280

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容