看物聯網開發實戰:20分鐘搭建簡易環境監測站

當前,物聯網可謂是最大的風口,成為市場最大的熱門領域之一,但真實的開發情況卻是另一番情景:協議多、組件多、工具多,用五花八門、琳琅滿目形容也不為過,開發者面對如此情況,往往不知從何下手,開發效率和成果通常得不到有效地保證。那麼,這種局面如何改善?讓我們來聽聽天工用戶的聲音。

百度雲天工物聯網平臺之所以越來越受到開發者的青睞,是因為天工物聯網平臺提供從物端到雲端,從IoT數據接入、設備管理、數據處理、數據存儲到數據可視化、物聯安全、邊緣計算的端到端基礎平臺,大幅降低物聯網應用開發的難度,讓物聯網應用開發者可以專注於應用的創新。

最近,小編收到了一篇投稿,該作者使用百度雲天工物聯網平臺僅僅花費20分鐘就完成一個簡易環境監測站的搭建,實現了環境數據採集和可視化展示,可謂是物聯網應用高效開發的典範。

最近筆者所在公司有個物聯網項目需要採集環境數據並做數據的可視化展示。由於之前沒有做過物聯網硬件相關項目,於是找了找市場上的物聯網解決方案。在具體項目實踐中,我發現物聯網項目不像傳統Web架構LNMP直接搞定,而是有各種協議和組件,如果沒有好的解決方案,開發者需要耗費大量精力在解決數據接入、協議支持、數據處理等方面,開發效率實在是低下。

糾結了很多方案之後,我發現百度雲天工物聯網平臺比較中意。為快速進行可行性驗證,我在開始正式項目(也是基於ESP8266)之前,先用溫溼度作為基礎數據,做了這個小Demo進行練手,整個過程下來20分鐘搞定,並且效果非常不錯,於是整理出一篇文章,希望可以對大家提供一些有用的幫助。

物聯網基礎硬件的準備

在開發板方面,我選擇的是一款叫做NodeMCU的開發板。NodeMCU是一款非常好用且便宜的物聯網開發板,自帶USB轉串口芯片、WiFi及多個GPIO接口,可連接多個傳感器。NodeMCU的硬件基於ESP8266構建,內置WiFi支持。

在傳感器方面,因為這次是通過做Demo來練手,對精度要求不是特別高,所以選擇了一款低成本的溫溼度傳感器:DHT11。DHT11是一款溫溼度傳感器,可以用來測試環境溫溼度,其精度溼度+-5%RH,溫度+-2℃,量程溼度20-90%RH,溫度0~50℃。

物聯網硬件基本選擇完畢,下面讓我們來看看物聯網雲平臺的準備。

物聯網雲平臺的準備

我的目的是要將數據報到雲端,然後做數據的可視化展示。當然如果條件允許,你也可以自行搭建MQTT Broker及數據存儲、展示部分,但是這需要耗費很多時間和精力。這裡為了讓開發更加快捷,我選擇了一個提供物聯網平臺的雲服務。

在評估了多家物聯網平臺後,決定選擇百度雲天工。主要是三個方面的考慮:

  • 百度雲天工支持標準的MQTT接入。
  • 存儲的過程無需編碼。
  • 提供現成的可視化報表製作工具。

之後,就是去百度雲天工平臺進行註冊和操作。

首先,註冊百度雲天工賬號並認證天工-物聯網平臺,在左側「產品服務」-「物聯網服務」中,選擇「物接入」,購買一個月的套餐(根據情況選擇消息條數,因為我上報的數據比較多,所以我這裡選了200萬條)。 隨後,進入項目列表,創建一個設備型項目。點項目名稱可進入到項目詳情頁面,點擊「新建物模型」。

之後,填寫「名稱」、「添加屬性」。這裡的屬性就是我們需要採集的上報的信息,所以這裡我加了兩個屬性:

  • Temperature溫度 number類型
  • Humidity溼度 number類型
看物聯網開發實戰:20分鐘搭建簡易環境監測站

創建完物模型,接下來創建物影子。名稱自定義即可,這個在後面會用到。之後的物模型選擇剛才創建的模型,點擊創建即可完成。創建完成後,獲取連接信息備用(連接信息中,key是僅在生成後顯示一次的)。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

至此,我們的準備工作告一段落,後面數據存儲的部分(時序數據庫TSDB)可在這一步驟開啟,也可連通之後再開啟。接下來,我將分為六步來完成簡易環境監測站的搭建。

一、開發板系統選擇

這款開發板可支持多種操作系統,如NodeMCU(lua)、ESPEasy(WebUI)、MicroPython,以及我們今天要使用的 Mongoose OS(NodeJS)。

不管是以上哪個固件,都可以跑通MQTT。如在百度雲天工文檔中,NodeMCU固件下的lua版本NodeMCU。

因為Mongoose OS刷系統不需要藉助第三方工具,有一個web的控制檯可以便於管理及調試,所以為了方便,我這次就選擇了Mongoose OS的固件。

二、接線

將傳感器與板子之間使用杜邦線連接起來。DHT11一般包含3個接頭,但根據生產商不同,標註和順序有所不同,接線時請查看模塊上的標註。我手上這顆是按如下順序標註的:

  • VCC(+、3.3v等)
  • DATA(D、S、SIG 等)
  • GND(-、G 等)

VCC和GND可與板子上對應標註位連接;DATA接到GPIO口即可。

因為D4距離較近,於是GPIO口我就選了D4 。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

接線圖

看物聯網開發實戰:20分鐘搭建簡易環境監測站

實物圖

三、刷系統

首先需要安裝驅動。

在網上上可買到的NodeMCU,所集成的USB轉串口芯片一般有CP2102和CH340兩種,驅動下載地址分別為:

CP2102:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

CH-340:http://www.wch.cn/search?q=340&t=downloads

下載驅動之後,我們就需要開始安裝。

我們要下載Mongoose OS。根據你的操作系統,在MongooseOS官網:https://mongoose-os.com/software.html選擇對應方式進行安裝。

我自己的操作系統是macOS,所以直接使用以下命令安裝。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

安裝完成後,就會自動打開瀏覽器。這時候你會看到引導界面。

如果沒有啟動,可輸入cd .mos/bin/或者進入自定義的安裝目錄,執行./mos來運行管理界面。(Windows用戶直接雙擊即可)

看物聯網開發實戰:20分鐘搭建簡易環境監測站

接下來是燒錄固件。將板子用Micro-USB的數據線與電腦連接,在引導界面,選擇板子對應的接口,點擊Select。

平臺會默認選擇(ESP8266),App的部分我選擇了demo-js,後面我會在這個App 基礎上進行改動以將數據採集並上報。

WiFi的部分填寫你希望板子連接到的熱點(注意:僅支持2.4G)。隨後點擊Done 即可,這時板子上指示燈會以較快頻率閃動。

四、採集並上報數據

燒錄完成後,即可在瀏覽器中看到代碼編輯界面。系統啟動後會執行init.js,我們的代碼足夠少,所以這裡我們就全部寫到此文件。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

代碼如下,其中:

  • pin是按ESP8266的編號,我們上面接線的D4對應ESP8266 2號GPIO口,所以這裡填的2。
  • $baidu/iot/shadow/xxxxxxxxxxx/update中的xxxxxxxxxxx替換為你在前面百度雲天工中創建的物影子名稱。
看物聯網開發實戰:20分鐘搭建簡易環境監測站

你一定會好奇,前面的連接信息哪裡去了。在MongooseOS裡,MQTT的連接信息是寫在配置文件的。

點擊MongooseOS瀏覽器界面左側的DeviceConf,可看到MQTT 配置界面。將前面的連接信息填寫進來,點擊左上角的Save即可。 另外,還需要切換到Expert View,將RPC模式改為不開啟。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

再回到Projects的代碼編寫界面,點擊那個長得像上傳的圖標(如圖),保存文件並傳輸到板子上重啟。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

這時,你就可以看到Logs裡在打印溫溼度信息,並顯示上報成功(Yes)。如果為 no,可以配合本地Log及天工裡「平臺通用功能」-「日誌」進行錯誤排查。

傳輸成功後,在天工「物影子詳情」頁面上就可以看到剛剛上報的數據了。

看物聯網開發實戰:20分鐘搭建簡易環境監測站

至此,就完成了數據採集到上報的全過程。

等一哈...一開始的第二張圖不是有個好看的圖麼,難道是假的?

當然不是。接下來的部分不需要寫代碼了,直接在雲平臺上配置即可。

五、數據存儲

我展示的圖表裡,有實時值和折線圖。其中折線圖是過去一段時間的歷史數據。所以,我們需要將數據存下來。在一開始,我想著把數據存到MySQL或者MongoDB,在看了一些物聯網平臺,尤其是百度雲天工之後,發現「時序數據庫 TSDB」是一個更好的選擇。

隨後發現,在天工裡,我們上報到物影子的數據,如果需要簡單存儲到TSDB,壓根不用寫代碼。不過如果需要複雜的邏輯處理,好像還是要寫代碼,或者用一個叫規則引擎的服務。

扯遠了,這次我們要存的東西比較簡單,所以就用現成的功能了。在「物詳情」頁面(之前獲取連接信息那有圖),點擊編輯,開啟「存儲配置」,把「不存儲」改成「上報即存儲」,選擇需要存到哪個數據庫(沒有的話先創建個,默認配置就夠用),度量名稱填寫monitor,點擊保存即可。

這樣存儲的部分就配置好了,每次上報的數據,都會自動給存到TSDB裡。可以在左側導航選擇「時序數據庫」,點對應數據庫的「查詢面板」查看存進去的歷史數據了。

六、做個好看的報表

物聯網數據存好之後,接下來就是數據可視化展示。

同樣的,繼續使用天工的一個叫「物可視」的功能。這也是我選用百度雲這套平臺的主要原因之一。

這個功能的引導略少,我是看文檔才瞭解怎麼用,會了之後發現超級超級簡單方便。我以這個項目的報表為例,來大概說一下步驟:

  • 首先進到物可視,點創建「儀表盤」
  • 進入後,頂上有倆標籤,選擇「數據表」
  • 左側新建數據表,因為我有倆儀表指針圖和一個時序折線圖,所以這一步我要創建兩個數據表,一個時序數據庫類型,一個物管理類型
  • 創建完後,返回「儀表盤」。將需要的圖拖動到空白處,點對應的圖,右側設置一下綁定數據,如下圖:
看物聯網開發實戰:20分鐘搭建簡易環境監測站

這裡介紹了一小部分功能,需要展示更多的部分,可以再看看文檔。

結束

至此,一個簡易環境監測站的搭建就算是大功告成啦,來看看具體效果:

看物聯網開發實戰:20分鐘搭建簡易環境監測站

看物聯網開發實戰:20分鐘搭建簡易環境監測站

想知道這個項目一共花費多少錢嗎?

說出來能嚇著你:20元!!!

20元=(NodeMCU板13.5元)+(DHT11傳感器4.5元)+(時序數據庫2元)

這是一套最基礎的溫溼度採集上報系統。我們在此基礎上,也可以繼續提升功能。比如增加紅外,當溫溼度到指定閾值,就觸發開關空調;再開發手機App或微信小程序,控制板子上的紅外遙控……

類似的場景還有很多的,在此就不一一引申了。


分享到:


相關文章: