使用ESP8266(基於官方SDK)接入阿里雲物聯網平臺

引言

作爲物聯網開發者,ESP8266應該一點都不陌生了。只需十幾塊錢淘寶一個小開發板,就可以連上Wi-Fi接入互聯網,盡情享受從手機端或Web端控制設備的樂趣。ESP8266接入Wi-Fi是沒問題,但是用戶端不能直接設計成與ESP8266通信,還是需要一箇中心服務器作爲用戶端和設備端的代理。一種方案是自己搭建設計這麼一箇中心服務器,只是費時費力;另一種方案,就是直接使用大廠提供的物聯網平臺服務,使設計方案PaaS化

上網搜尋物聯網平臺方案,百度、阿里、騰訊早就推出了自己的物聯網平臺了,同時也收集了一點其他公司的平臺。之後我就對這三大平臺以及一些常見的平臺簡單評估了一下。最後還是選擇了阿里雲物聯網平臺(以下簡稱阿里雲IoT hub)深入瞭解。

那麼,關於ESP8266和阿里雲IoT hub,首先要告訴大家,樂鑫官方github上已經有了「ESP8266 對接阿里雲」的repository了,github:https://github.com/espressif/esp8266-aliyun-demo

但是!當我下載下來並經過一陣焦頭爛額的編譯測試後,依舊沒法成功編譯!最最最關鍵的是,不支持安信可ESP8266 IDE,似乎是因爲修改了頂層Makfile文件。

一氣之下!我根據阿里雲IoT hub提供的文檔,首先使用Python腳本模擬設備對接阿里雲IoT Hub,然後使用ESP8266嘗試連接MQTT Broker,最後使用ESP8266基於官方SDK,自己弄了一個esp8266 app,接入了阿里雲物聯網平臺。github:https://github.com/AngelLiang/esp8266_aliyun_mqtt_app

適合讀者

本文適合有ESP8266開發經驗的讀者閱讀,如果熟悉安信可ESP8266 IDE更佳。熟悉阿里雲IoT hub和開發環境的讀者可以直接跳到「四、下載aliyun_mqtt_app並導入」小節。

一、獲取阿里雲IoT設備認證三元組

本小節主要講如何獲取阿里雲IoT hub設備認證三元組,熟悉的讀者可以跳過了。

第一步:開通平臺

首先,需要進入阿里雲IoT hub控制檯進行操作,如果沒有開通直接開通即可,免費。控制檯連接:https://www.aliyun.com/product/iot

物聯網平臺

第二步:創建產品

開通後我們首先需要創建產品,產品名稱隨便輸入即可,其他默認。

創建產品

第三步:創建設備

然後是創建設備,隨便輸入一個DeviceName即可。

創建設備

第四步:獲取認證三元組

最後就得到了設備認證三元組:ProductKeyDeviceNameDeviceSecret

獲取認證三元組

二、安信可ESP8266 IDE

下面是如何搭建安信可ESP8266 IDE環境的文檔,熟悉的讀者可以直接跳過了:

三、ESP8266官方SDK

最後是如何下載ESP8266官方SDK,可以到樂鑫官網或github或者下載。熟悉的讀者也可以直接跳過。本人開發所使用的SDK是目前最新的版本:ESP8266_NONOS_SDK-2.2.1,aliyun_mqtt_app理論上支持SDK 2.0+。

下載官方SDK後,把driver_libexamplesthird_party三個文件夾壓縮備份再刪除,以免編譯的時候出現干擾信息。

工程目錄

四、下載aliyun_mqtt_app並導入

下載aliyun_mqtt_app(github:https://github.com/AngelLiang/esp8266_aliyun_mqtt_app)並拷貝aliyun_mqtt_app文件夾過去。

編輯app/include/user_config.h文件,修改下面信息,然後編譯下載並重啓ESP8266,最後應該就能在控制檯看到設備上線了。

#define PRODUCT_KEY     "PRODUCT_KEY"
#define DEVICE_NAME     "DEVICE_NAME"
#define DEVICE_SECRET   "DEVICE_SECRET"

#define WIFI_SSID       "WIFI_SSID"
#define WIFI_PASS       "WIFI_PASS"

五、接入成功

編譯、下載、重啓,觀察串口打印的信息,感覺沒有異常後在看看控制檯,可以看到設備已經接入成功了!

接入成功

然後到設備的topic列表,可以看到 update topic 消息數加1了,那是因爲我在代碼裏面寫了只要連接成功就發佈一條「hello」消息。

平臺接收到設備消息

然後嘗試一下對get topic發佈消息!

平臺發佈消息到設備

可以看到串口打印如下:

TCP: data received 45 bytes
Receive topic: /PRODUCT_KEY/esp8266_test/get, data: hello wolrd! 

此時說明「設備主動上報數據到平臺」和「平臺下發指令到設備」這兩個功能均測試成功!

六、關於阿里雲IoT hub

接入方式

根據文檔,阿里雲IoT hub至少支持三種設備接入方式:

  1. MQTT方式,包括基於TCP的MQTT和基於WebSocket的MQTT
  2. CoAP
  3. HTTP

其中對於ESP8266來說,最方便的還是基於MQTT-TCP方式。當然,阿里雲IoT hub除了支持單一設備接入方式,也支持網關設備的接入

計費方面

目前開通平臺是免費。收費方法是按消息數量收費,不過每月前100萬條消息免費,對於我這種物聯網愛好者隨便玩玩足夠了。

基礎版和高級版

實際上,阿里雲IoT hub分爲兩個版本:基礎版和高級版。高級版在基礎版所有功能的基礎上,還多了一些實用功能,當然,高級版也是免費開通的,收費方面高級版則多了一個設備日活費用,0.01元/每日活設備/天,目前每個帳號有10個設備的免費額度。

高級版令我關注的有一點:設備的數據存儲和查詢功能。設備端只要根據阿里雲IoT hub高級版的物模型和Alink協議上傳數據,阿里雲IoT hub就會存儲相關數據,同時還可以通過雲端API獲取歷史數據。

相關術語:

  • 物模型:阿里雲IoT hub對設備在雲端的功能描述,包括設備的屬性、服務和事件。
  • Alink協議:阿里雲定義的設備與雲端之間的通信協議。

阿里雲高級版示例

那麼有關阿里雲IoT hub的介紹就到這裏,下面是簡單說下我寫的aliyun_mqtt_app。

七、關於aliyun_mqtt_app

自然,我在引言已經提到弄出這麼一個app工程的原因了。下面是對這個app簡單介紹一下。

由於ESP8266官方SDK中已經有了MQTT示例工程,所以我是在此工程的基礎上補充了一點自己的代碼。其中最麻煩的是阿里雲IoT hub設備認證問題,直接使用MQTT示例工程填寫有關MQTT的配置信息也可以,只是mqtt password要先在PC端生成好才行,使用字符串拼接方式靜態生成設備認證三元組似乎還做不了。那就乾脆一點,讓ESP8266能動態生成阿里雲的mqtt password就可以了,也就是一個hmacmd5簽名。

mqtt password生成的核心代碼在 user/aliyun_mqtt.c/gen_mqtt_password() 函數裏。

之後,就是加了點輔助功能,比如可以使用smartconfig配置Wi-Fi,這樣就可以不用把Wi-Fi信息寫死到代碼了。同時,阿里雲IoT hub大多是使用JSON格式傳輸數據,給app上cJSON解析的工作以後有空就考慮考慮(ESP8266使用cJSON解析器已經有了,在我的ESP8266工程示例集合倉庫裏)。

八、結語

自此,洋洋灑灑長篇大論有話沒話寫了那麼多,本文簡而言之就介紹瞭如何使用ESP8266接入阿里雲IoT hub,至於能玩出什麼花樣就要靠開發者的想象力了。話說,某平臺是不是應該給我點軟文費呢~?

相關資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章