天天看點

【實踐】工業用變頻器上雲 【2】 将硬體裝置接入阿裡雲,并且能正常通訊将裝置接入阿裡雲并且能顯示資料

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

【實踐】工業用變頻器上雲 【2】 将硬體裝置接入阿裡雲,并且能正常通訊将裝置接入阿裡雲并且能顯示資料

協定

首先我們需要了解阿裡雲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的标準架構送出資料即可完成資料資料上行

【實踐】工業用變頻器上雲 【2】 将硬體裝置接入阿裡雲,并且能正常通訊将裝置接入阿裡雲并且能顯示資料

我們确認下,新裝置是沒有任何資料的

程式上傳

【實踐】工業用變頻器上雲 【2】 将硬體裝置接入阿裡雲,并且能正常通訊将裝置接入阿裡雲并且能顯示資料

打開IDE 上傳我們的程式到控制器,注意,上傳的時候不能堆疊485子產品,因為上傳程式也會使用序列槽,如果堆疊會造成信道沖突緻使失敗

注意确認選擇闆卡 速率和端口

【實踐】工業用變頻器上雲 【2】 将硬體裝置接入阿裡雲,并且能正常通訊将裝置接入阿裡雲并且能顯示資料

然後點選上傳,上傳完成後,硬體會自動連接配接WIFI,然後開始向阿裡雲發送資料

【實踐】工業用變頻器上雲 【2】 将硬體裝置接入阿裡雲,并且能正常通訊将裝置接入阿裡雲并且能顯示資料

從雲端的裝置運作狀态就可以看出來,裝置上報的資料已經在了。而且裝置本身的狀态也變成了線上,至此,我們的硬體與阿裡雲IOT的連結就完成了

内容總結:本章内容需仔細閱讀源碼,了解如何通過json和阿裡雲進行上報資料的

系列連結

【實踐】工業用變頻器上雲 【1】 硬體介紹 與阿裡雲IOT裝置建立