阿里雲搭建

轉載:https://blog.csdn.net/spiremoon/article/details/104754432?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weighthtml

文章目錄

利用模組+MCU的方式接入阿里雲物聯網有兩種選擇:1.選擇模組內集成了阿里雲SDK的模組廠商,這樣就能夠經過簡單的AT指令實現接入阿里雲及消息通信;2.使用模組內部未集成阿里雲SDK的模組,而是在MCU上集成阿里雲SDK,再經過調用相關API實現上雲和通信。
因手頭上暫時沒有集成了阿里雲SDK的模組,且使用集成了SDK的模組的話實現上雲並無什麼道道,故選擇了從將SDK移植到MCU上的方式,如下上雲過程的幾個關鍵點,看不懂先不要慌,後邊會細說:
關鍵點一(阿里雲平臺須要注意的):
1.嵌入式作多了固然但願以透傳的方式上雲,而不是用JSON方式,故產品建立時要選擇透傳模式;
2.爲物聯網產品添加合適的屬性;
3.根據示例文檔,照葫蘆畫瓢用Javascript寫出數據解析程序,緣由是選擇了透傳數據的方式,而云平臺的標準接口時JSON,故須要對透傳上來的二進制數據作一個簡單的解析,使它變成JSON格式。
關鍵點二(MCU上移植SDK須要注意的):
1.SDK配置選對;
2.耐心填充wapper.c中須要填充的函數;
3.根據不一樣的模組的AT指令進行模組驅動;
4.可靠的重試機制和穩妥的內存操做。app

下面簡單介紹如下雲平臺->SDK移植的完整步驟函數

1 雲平臺準備

1.1 建立產品

放上連接阿里雲物聯網產品建立,建立產品時按下圖選擇主要就是選自定義品類和連網方式、數據格式。在這裏插入圖片描述post

1.2 功能定義

產品建立好後進入功能定義,添加一些屬性。好比添加一個名爲「當前電流」的屬性,必定要認真命名標識符,覺得這個標識符將是你上傳數據到當前電流的重要接口,以下圖所示。在這裏插入圖片描述ui

1.3 編寫數據解析函數

經過閱讀官方文檔可知,當數據上傳時,會調用rawDataToProtocol(bytes)函數,它傳入一組二進制數據,並以你編寫的規則返回JSON。好比我規定數據透傳中,第一個字節爲功能呢幹碼,0x00爲上傳、0x01爲下發;第2-5個字節是設備ID;以後的4字節是當前電流的數值。那麼在數據解析中,填充rawDataToProtocol函數以下阿里雲

/** * 將設備的自定義格式數據轉換爲Alink協議的數據,設備上報數據到物聯網平臺時調用 * 入參:rawData byte[]數組     不能爲空 * 出參:jsonObj Alink JSON對象 不能爲空 */function rawDataToProtocol(bytes) {    var uint8Array = new Uint8Array(bytes.length);    for (var i = 0; i < bytes.length; i++) {        uint8Array[i] = bytes[i] & 0xff;    }    var dataView = new DataView(uint8Array.buffer, 0);    var jsonMap = {};    var fHead = uint8Array[0]; // command    if (fHead == 0x00) {        jsonMap['method'] = 'thing.event.property.post'; //ALink JSON格式 - 屬性上報topic        jsonMap['version'] = '1.0'; //ALink JSON格式 - 協議版本號固定字段        jsonMap['id'] = '' + dataView.getInt32(1); //ALink JSON格式 - 標示該次請求id值        var params = {};        params['Current'] = dataView.getInt16(5); //對應產品屬性中 prop_int16        jsonMap['params'] = params;    }     return jsonMap;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

這段代碼是根據官方文檔照葫蘆畫瓢而來,編寫完成後,能夠在下邊的模擬輸入中輸入一串十六進制數據,看是程序是否正常輸出,以下圖所示。
在這裏插入圖片描述在這裏插入圖片描述
自此,一個簡單的雲端就佈置好了,而後再去添加設備,接下來就是移植SDK讓你的設備上雲了。上雲後,只須要經過發送透傳上行的topic :/sys/a18rm0j1Ow4/${deviceName}/thing/model/up_raw,而後緊跟着一串二進制數據,好比上圖所示的0x00000000010042,就能夠根據你編寫的數據解析程序,更新當前電流數值到你的雲平臺了。spa

2.SDK移植

2.1 SDK獲取及配置

從官網下載SDK
而後運行目錄下的config.bat,根聽說明進行配置config.bat說明,以後運行extract.bat抽取代碼到output文件夾中。.net

2.2 添加SDK代碼到你的工程

這一步不用多說了,就是把output文件夾下的全部.h .c添加到你的工程中。

2.3 填充wapper.c中的函數

咱們所須要作的就是把wapper.c中的函數填滿,整個步驟最難的就是這一部分。大大小小十幾二十個函數,須要根據咱們本身的板子狀況填充,看上去很複雜,其實關鍵函數就幾個:
1.HAL_Free和HAL_Malloc必填,若是你沒有內存池機制,能夠用free和malloc這倆函數代替;
2.HAL_GetDeviceName、HAL_GetDeviceSecret、HAL_GetProductKey這三個必填,就是得到你的設備的「三要素」,也就是設備名、設備密鑰、產品密鑰,在你的設備頁能夠查看,以下圖所示。
在這裏插入圖片描述
這是你接入阿里雲物聯網的關鍵。這三個函數具體填充方法很簡單,你能夠在mqtt_example.c中看到以下:

char DEMO_PRODUCT_KEY[IOTX_PRODUCT_KEY_LEN + 1] = "";char DEMO_DEVICE_NAME[IOTX_DEVICE_NAME_LEN + 1] = "";char DEMO_DEVICE_SECRET[IOTX_DEVICE_SECRET_LEN + 1] = "";
  • 1
  • 2
  • 3

分別複製到對應的數組裏就行了,而後在三個函數中來個memcpy就能夠了。

3.HAL_Snprintf必填,填寫方法能夠參考例程,以下:

int HAL_Snprintf(char *str, const int len, const char *fmt, ...){    va_list args;    int rc;     va_start(args, fmt);    rc = vsnprintf(str, len, fmt, args);    va_end(args);    return rc; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4.HAL_UptimeMs和HAL_SleepMs要填,具體要看你的程序,是怎麼過的毫秒級更新的,是怎麼進行毫秒級延時的。
5.最重要的就是TCP四個相關的函數了:HAL_TCP_Destroy、HAL_TCP_Establish、HAL_TCP_Read、HAL_TCP_Write
填充這幾個函數的前提是,你有一套好用的模組驅動程序,好比向模組發送AT指令,而後根據模組的返回值進行處理。
若是有一套好使的模組驅動,那麼以上四個函數也不難填充,無非根據模組的AT指令手冊進行TCP鏈接的創建、銷燬、讀、寫。固然,在進行這些以前,你還要肯定你的模組正常,好比發AT能反OK,已注網、有信號等等。

2.3 修改mqtt_example.c中的main函數

修改mqtt_example.c中的main函數,好比改爲mqtt_example(),而後進入到裏邊的example_publish函數,修改const char *fmt爲 「/sys/%s/%s/thing/model/up_raw」,這樣的意思就是將topic設置成系統默認的透明上傳的topic。而後將payload指針指向你想要發送的原始數據,好比一個0x00,0x00,0x00,0x00,0x01,0x00,0x42的數組(1.3節阿里雲數據解析中實驗的數據),而後將IOT_MQTT_Publish_Simple函數中的最後一個參數改成你要發送的數據的長度,好比此處咱們就是發送了7個字節,原函數中用的strlen,在數據透傳中不適用,由於遇0x00就strlen結束了,長度不對。而後在你的系統任務或者while(1)大循環前調用mqtt_example就好了(由於mqtt_example中已有while(1)循環了)。

3 實驗

以上步驟無誤進行後,首先將會看到雲平臺上你的設備由未激活變成上線,而後當前電流也開始刷新,以下圖所示
在這裏插入圖片描述

4 總結

這一整套下來絕非易事,須要的就是認真閱讀文檔+一遍遍的調試,把存在的問題逐個攻破。阿里雲的官方文檔已經描述的比較清楚,但整個移植過程仍是須要有必定功底的。實在不行,能夠聯繫阿里雲技術支持,提交工單以求幫助。

相關文章
相關標籤/搜索