将裝置接入阿裡雲并且能顯示資料

協定
首先我們需要了解阿裡雲IOT的 ALINK JSON協定,其實這個協定很簡單
{
"id":1,
"version":"1.0",
"params":
{
"Frequency":5000,
"direction":0,
"onoff":1
},
"method":"thing.event.property.post"
}
以上就是标準的Alink Json協定的範本,params的标簽下面就是我們之前建構的裝置模型的參數,隻要将資料比對進去雲端就可以正确解析我們裝置建構的資料了
我們來建構硬體程式(标準的arduino ESP8266 C++源碼)
用到如下庫:
https://github.com/MINI-Qiang/aliIotLink【阿裡雲IOT連結】
https://github.com/bblanchon/ArduinoJson/tree/5.x【arduinoJSON第5版,如果使用6版本注意自行修改】
#include <aliIotLink.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "OCROBOT";
const char* password = "12345678";
static const char ProductKey[] PROGMEM = "a15mLG9bUxt";
static const char DeviceName[] PROGMEM = "uJCypeOEunEP4R5MJEar";
static const char DeviceSecret[] PROGMEM = "YXlW9wW2EYtXweZfwCZcUFbYhnDgnVr7";
static const char postTopic[] PROGMEM = "/sys/a15mLG9bUxt/uJCypeOEunEP4R5MJEar/thing/event/property/post"; //上報消息topic
static const char setTopic[] PROGMEM = "/sys/a15mLG9bUxt/uJCypeOEunEP4R5MJEar/thing/service/property/set"; //伺服器消息topic
WiFiClient espClient; //執行個體化 wifi網絡
PubSubClient client(espClient); //将網絡傳入MQTT
AliIotLink aliLink(client); //将mqtt傳入服務
void working(uint16_t delayTime, float temps);
//回調函數(本項不用)
//void Callbacks(char* topic, byte* payload, unsigned int length)
//{
//}
void setup()
{
Serial.begin(115200);
//初始化WIFI
WiFi.mode(WIFI_STA); // 接入端模式
WiFi.begin(ssid, password); //初始化并且連結wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
//初始化阿裡雲
aliLink.subTopic(FPSTR(setTopic)); //訂閱伺服器下行消息
//aliLink.setCallback(Callbacks); //注冊下發消息回調函數(本項目不使用)
aliLink.begin(FPSTR(DeviceName), FPSTR(ProductKey), FPSTR(DeviceSecret)); //完成初始化配置 三元素(DeviceName,ProductKey,DeviceSecret)
}
void loop()
{
//阿裡雲連結維持
aliLink.loop();
if (aliLink.state() != 0) //錯誤消息列印
{
Serial.println(aliLink.state()); //傳回平台連結消息代碼
}
working(10000); //上報業務,每10秒(10000ms)上報一次
}
// 建構Alink協定
String updateAlinkJson(uint16_t _id, JsonObject &_AliIotJson)
{
StaticJsonBuffer<256> jsonBuffer;
JsonObject& AlinkJson = jsonBuffer.createObject();
AlinkJson["id"] = _id;
AlinkJson["version"] = "1.0";
AlinkJson["params"] = _AliIotJson;
AlinkJson["method"] = "thing.event.property.post";
String JsonStr;
AlinkJson.printTo(JsonStr);
return JsonStr;
}
//定時上報資料與狀态
void working(uint16_t delayTime)
{
uint32_t thisTime = millis();
if ((thisTime % delayTime) == 0)
{
StaticJsonBuffer<130> jsonBuffer; //定義json緩沖區
JsonObject& paramsJson = jsonBuffer.createObject(); //初始化對象
paramsJson["Frequency"] = 4999; //将頻率資料填為5000
//paramsJson["direction"] = false; //
//paramsJson["onoff"] = true; //
String data = updateAlinkJson(random(1, 100), paramsJson); //提供一個随機ID,并且将負載消息加入
aliLink.publish(postTopic, data.c_str());
Serial.println(data); //序列槽同步輸出消息
}
}
代碼結構非常簡單,填寫自己的wifi帳号密碼,然後按照之前我們建立裝置的時候提供的連結參數進行修改
然後使用ArduinoJSON支援庫建構一個阿裡雲ALINKJSON的标準架構送出資料即可完成資料資料上行
我們确認下,新裝置是沒有任何資料的
程式上傳
打開IDE 上傳我們的程式到控制器,注意,上傳的時候不能堆疊485子產品,因為上傳程式也會使用序列槽,如果堆疊會造成信道沖突緻使失敗
注意确認選擇闆卡 速率和端口
然後點選上傳,上傳完成後,硬體會自動連接配接WIFI,然後開始向阿裡雲發送資料
從雲端的裝置運作狀态就可以看出來,裝置上報的資料已經在了。而且裝置本身的狀态也變成了線上,至此,我們的硬體與阿裡雲IOT的連結就完成了
内容總結:本章内容需仔細閱讀源碼,了解如何通過json和阿裡雲進行上報資料的
系列連結
【實踐】工業用變頻器上雲 【1】 硬體介紹 與阿裡雲IOT裝置建立