使用ESP8266(基于官方SDK)接入阿里云物聯(lián)網(wǎng)平臺(tái)

引言

作為物聯(lián)網(wǎng)開(kāi)發(fā)者,ESP8266應(yīng)該一點(diǎn)都不陌生了。只需十幾塊錢(qián)淘寶一個(gè)小開(kāi)發(fā)板,就可以連上Wi-Fi接入互聯(lián)網(wǎng),盡情享受從手機(jī)端或Web端控制設(shè)備的樂(lè)趣。ESP8266接入Wi-Fi是沒(méi)問(wèn)題,但是用戶(hù)端不能直接設(shè)計(jì)成與ESP8266通信,還是需要一個(gè)中心服務(wù)器作為用戶(hù)端和設(shè)備端的代理。一種方案是自己搭建設(shè)計(jì)這么一個(gè)中心服務(wù)器,只是費(fèi)時(shí)費(fèi)力;另一種方案,就是直接使用大廠(chǎng)提供的物聯(lián)網(wǎng)平臺(tái)服務(wù),使設(shè)計(jì)方案PaaS化。

上網(wǎng)搜尋物聯(lián)網(wǎng)平臺(tái)方案,百度、阿里、騰訊早就推出了自己的物聯(lián)網(wǎng)平臺(tái)了,同時(shí)也收集了一點(diǎn)其他公司的平臺(tái)。之后我就對(duì)這三大平臺(tái)以及一些常見(jiàn)的平臺(tái)簡(jiǎn)單評(píng)估了一下。最后還是選擇了阿里云物聯(lián)網(wǎng)平臺(tái)(以下簡(jiǎn)稱(chēng)阿里云IoT hub)深入了解。

那么,關(guān)于ESP8266和阿里云IoT hub,首先要告訴大家,樂(lè)鑫官方github上已經(jīng)有了「ESP8266 對(duì)接阿里云」的repository了,github:https://github.com/espressif/esp8266-aliyun-demo

但是!當(dāng)我下載下來(lái)并經(jīng)過(guò)一陣焦頭爛額的編譯測(cè)試后,依舊沒(méi)法成功編譯!最最最關(guān)鍵的是,不支持安信可ESP8266 IDE,似乎是因?yàn)樾薷牧隧攲覯akfile文件。

一氣之下!我根據(jù)阿里云IoT hub提供的文檔,首先使用Python腳本模擬設(shè)備對(duì)接阿里云IoT Hub,然后使用ESP8266嘗試連接MQTT Broker,最后使用ESP8266基于官方SDK,自己弄了一個(gè)esp8266 app,接入了阿里云物聯(lián)網(wǎng)平臺(tái)。github:https://github.com/AngelLiang/esp8266_aliyun_mqtt_app

適合讀者

本文適合有ESP8266開(kāi)發(fā)經(jīng)驗(yàn)的讀者閱讀,如果熟悉安信可ESP8266 IDE更佳。熟悉阿里云IoT hub和開(kāi)發(fā)環(huán)境的讀者可以直接跳到「四、下載aliyun_mqtt_app并導(dǎo)入」小節(jié)。

一、獲取阿里云IoT設(shè)備認(rèn)證三元組

本小節(jié)主要講如何獲取阿里云IoT hub設(shè)備認(rèn)證三元組,熟悉的讀者可以跳過(guò)了。

第一步:開(kāi)通平臺(tái)

首先,需要進(jìn)入阿里云IoT hub控制臺(tái)進(jìn)行操作,如果沒(méi)有開(kāi)通直接開(kāi)通即可,免費(fèi)??刂婆_(tái)連接:https://www.aliyun.com/product/iot

物聯(lián)網(wǎng)平臺(tái)

第二步:創(chuàng)建產(chǎn)品

開(kāi)通后我們首先需要?jiǎng)?chuàng)建產(chǎn)品,產(chǎn)品名稱(chēng)隨便輸入即可,其他默認(rèn)。

創(chuàng)建產(chǎn)品

第三步:創(chuàng)建設(shè)備

然后是創(chuàng)建設(shè)備,隨便輸入一個(gè)DeviceName即可。

創(chuàng)建設(shè)備

第四步:獲取認(rèn)證三元組

最后就得到了設(shè)備認(rèn)證三元組:ProductKey、DeviceNameDeviceSecret。

獲取認(rèn)證三元組

二、安信可ESP8266 IDE

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

三、ESP8266官方SDK

最后是如何下載ESP8266官方SDK,可以到樂(lè)鑫官網(wǎng)或github或者下載。熟悉的讀者也可以直接跳過(guò)。本人開(kāi)發(fā)所使用的SDK是目前最新的版本:ESP8266_NONOS_SDK-2.2.1,aliyun_mqtt_app理論上支持SDK 2.0+。

下載官方SDK后,把driver_lib、examplesthird_party三個(gè)文件夾壓縮備份再刪除,以免編譯的時(shí)候出現(xiàn)干擾信息。

導(dǎo)入工程

四、下載aliyun_mqtt_app并導(dǎo)入

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

編輯app/include/user_config.h文件,修改下面信息,然后編譯下載并重啟ESP8266,最后應(yīng)該就能在控制臺(tái)看到設(shè)備上線(xiàn)了。

#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"

五、接入成功

編譯、下載、重啟,觀(guān)察串口打印的信息,感覺(jué)沒(méi)有異常后在看看控制臺(tái),可以看到設(shè)備已經(jīng)接入成功了!

接入成功

然后到設(shè)備的topic列表,可以看到 update topic 消息數(shù)加1了,那是因?yàn)槲以诖a里面寫(xiě)了只要連接成功就發(fā)布一條「hello」消息。

接收到設(shè)備消息

然后嘗試一下對(duì)get topic發(fā)布消息!

發(fā)布消息到設(shè)備

可以看到串口打印如下:

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

此時(shí)說(shuō)明「設(shè)備主動(dòng)上報(bào)數(shù)據(jù)到平臺(tái)」和「平臺(tái)下發(fā)指令到設(shè)備」這兩個(gè)功能均測(cè)試成功!

六、關(guān)于阿里云IoT hub

接入方式

根據(jù)文檔,阿里云IoT hub至少支持三種設(shè)備接入方式:

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

其中對(duì)于ESP8266來(lái)說(shuō),最方便的還是基于MQTT-TCP方式。當(dāng)然,阿里云IoT hub除了支持單一設(shè)備接入方式,也支持網(wǎng)關(guān)設(shè)備的接入。

計(jì)費(fèi)方面

目前開(kāi)通平臺(tái)是免費(fèi)。收費(fèi)方法是按消息數(shù)量收費(fèi),不過(guò)每月前100萬(wàn)條消息免費(fèi),對(duì)于我這種物聯(lián)網(wǎng)愛(ài)好者隨便玩玩足夠了。

基礎(chǔ)版和高級(jí)版

實(shí)際上,阿里云IoT hub分為兩個(gè)版本:基礎(chǔ)版和高級(jí)版。高級(jí)版在基礎(chǔ)版所有功能的基礎(chǔ)上,還多了一些實(shí)用功能,當(dāng)然,高級(jí)版也是免費(fèi)開(kāi)通的,收費(fèi)方面高級(jí)版則多了一個(gè)設(shè)備日活費(fèi)用,0.01元/每日活設(shè)備/天,目前每個(gè)帳號(hào)有10個(gè)設(shè)備的免費(fèi)額度。

高級(jí)版令我關(guān)注的有一點(diǎn):設(shè)備的數(shù)據(jù)存儲(chǔ)和查詢(xún)功能。設(shè)備端只要根據(jù)阿里云IoT hub高級(jí)版的物模型和Alink協(xié)議上傳數(shù)據(jù),阿里云IoT hub就會(huì)存儲(chǔ)相關(guān)數(shù)據(jù),同時(shí)還可以通過(guò)云端API獲取歷史數(shù)據(jù)。

相關(guān)術(shù)語(yǔ):

  • 物模型:阿里云IoT hub對(duì)設(shè)備在云端的功能描述,包括設(shè)備的屬性、服務(wù)和事件。
  • Alink協(xié)議:阿里云定義的設(shè)備與云端之間的通信協(xié)議。
高級(jí)版示例

那么有關(guān)阿里云IoT hub的介紹就到這里,下面是簡(jiǎn)單說(shuō)下我寫(xiě)的aliyun_mqtt_app。

七、關(guān)于aliyun_mqtt_app

自然,我在引言已經(jīng)提到弄出這么一個(gè)app工程的原因了。下面是對(duì)這個(gè)app簡(jiǎn)單介紹一下。

由于ESP8266官方SDK中已經(jīng)有了MQTT示例工程,所以我是在此工程的基礎(chǔ)上補(bǔ)充了一點(diǎn)自己的代碼。其中最麻煩的是阿里云IoT hub設(shè)備認(rèn)證問(wèn)題,直接使用MQTT示例工程填寫(xiě)有關(guān)MQTT的配置信息也可以,只是mqtt password要先在電腦生成好才行,直接拼接設(shè)備認(rèn)證三元組還做不到。那就干脆一點(diǎn),我直接讓ESP8266能生成阿里云的mqtt password就可以了,也就是一個(gè)hmacmd5簽名。

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

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

八、結(jié)語(yǔ)

自此,洋洋灑灑長(zhǎng)篇大論有話(huà)沒(méi)話(huà)寫(xiě)了那么多,本文簡(jiǎn)而言之就介紹了如何使用ESP8266接入阿里云IoT hub,至于能玩出什么花樣就要靠開(kāi)發(fā)者的想象力了。話(huà)說(shuō),某平臺(tái)是不是應(yīng)該給我點(diǎn)軟文費(fèi)呢~?

相關(guān)資料

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

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 這個(gè)是學(xué)校的SRP項(xiàng)目。去年12月做了大概3周。直接摘個(gè)人總結(jié)報(bào)告如下:在本次“學(xué)生研究計(jì)劃”項(xiàng)目,研究課題...
    fightfa閱讀 7,295評(píng)論 1 23
  • 摘要: 一、新產(chǎn)品發(fā)布1、云防火墻 商業(yè)化 發(fā)布云防火墻是一款云環(huán)境下的防火墻產(chǎn)品,首創(chuàng)了基于業(yè)務(wù)可視的結(jié)果,實(shí)現(xiàn)...
    貓耳呀閱讀 781評(píng)論 0 1
  • 自己已經(jīng)記不得了,是從哪一天開(kāi)始,每次好像跟自己認(rèn)為會(huì)在一起一輩子的閨蜜們,許過(guò)一個(gè)永久的諾言時(shí),就開(kāi)始離分離不...
    沈時(shí)晴閱讀 762評(píng)論 6 8
  • 從現(xiàn)在開(kāi)始,每周給自己定一點(diǎn)小的計(jì)劃吧,每周讀一本課外書(shū),跑步至少5KM,每天背單詞,聽(tīng)句子,加油! 簡(jiǎn)書(shū)小樹(shù)洞,...
    50f7f351900d閱讀 315評(píng)論 0 0
  • 經(jīng)常能看見(jiàn)他們,但從未想過(guò)會(huì)寫(xiě)他們。 他們是一對(duì)弱智的雙胞胎兄弟,和母親一起生活。全家每天都會(huì)在超市的斜前面賣(mài)水果...
    底氣自帶香氣閱讀 292評(píng)論 0 2

友情鏈接更多精彩內(nèi)容