天天看點

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

簡介: 學習物聯網一段時間,做過若幹練習,但都是從練習角度出發。現在依據實際情況做了個實物,是以就有了這款智能花盆。實作根據土壤濕度進行澆水,以維持在合适水準。
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

主要功能:

  1、收集環境資訊(土壤濕度,空氣溫濕度)上傳至阿裡物聯網平台。

  2、當土壤濕度低于控制值下限時,自動澆水。

  3、可以通過安卓應用,設定土壤濕度控制值範圍,以及手動澆水。

特點:

  由于這次開發闆設計,加入藍牙子產品,以便配置終端的連網設定(WIFI),比過往做的練習(固定WIFI資訊),更具産品性。

  這個想法是從家裡的小米攝像頭應用學習過來的,由于智能花盆是用WIFI網絡聯網,是以使用藍牙子產品進行WIFI網絡配置(SSID,PWD),開發更友善。

設計背景

  土壤濕度受【灌澆程度,空氣溫濕度,日照時長,植物生長活躍度】等影響。傳統滴灌系統,即使通過定時澆灌,也不一定能夠給予植物最合适的土壤濕度環境。

  設計加入土壤濕度傳感器,以擷取準确濕度,進行定量水澆灌,以確定土壤保持合适濕度。

開發闆設計

1. 系統架構示意圖

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

2. 智能花盆連接配接圖

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

3. 資料指令流向圖

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

  說明:初次使用時,[使用者]通過[安卓終端]運作應用程式,啟動[藍牙裝置],與智能花盆的[藍牙子產品],進行配對。配對成功後,便可通過藍牙通訊,向智能花盆發送WIFI的SSID以及PWD。

采購物料清單

名稱 圖檔 數量 單價 總價 描述
nodeMCU
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 14 14 微處理器
人體紅外感應
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 3 3 傳感器
藍牙子產品
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 7 7 通信子產品
觸摸傳感子產品
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
2 1 2 傳感器
空氣溫濕子產品
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 4 4 傳感器
面包闆
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
3 2 6
杜邦線
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
N -- --
0.96'OLED顯示屏
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 11 11 輸出子產品
電容式土壤濕度子產品
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 8 8 傳感器
直流潛水泵
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 3 3 執行裝置
自制花灑
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 -- -- 自制.。。。 執行裝置
單相繼電器
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 4 4 執行裝置
薄荷
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:
1 4 4 堅強的薄荷一盆
合計 72
如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

物聯網平台

建立物模型

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

  上圖說明:屬性中的 土壤濕度以及空氣溫濕控限,是浮點型[上限]與[下限]組成的結構體。實際開發中,僅用到土壤濕度下限,以觸發澆水。

  

  服務說明:

    澆水服務:響應平台進行澆水,主要用于手動澆水。

    裝置參數設定:響應平台進行參數設定,主要用于設定終端運作參數[土壤濕度下限,澆水量]

    上傳資料:響應平台,即時進行環境資訊上傳。

  事件說明:

    澆水事件:停用了,改用澆水時終端更新屬性[澆水記錄],使用0,1區分手動與自動澆水。

代碼部分

代碼就不貼出來了,僅僅把需要引用的包以及注意事項的作個描述。

一、裝置終端開發

  說明:使用ArduinoIDE 對nodeMCU 進行代碼編寫以及燒寫

  引用包說明:均在庫管理器查詢即可

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

終端功能說明:

  1、 藍牙通訊:

    裝置與安卓應用APP比對,以及WIFI網絡配置

    邏輯說明

      ● 先通過USB轉序列槽方法,對藍牙子產品進行初始化,比如

 主從模式:主             波特率:9600
           

  藍牙名稱:Smart_Pot 配對碼:8888

      ● 定義屬于自己一套的指令頭,指令關鍵字進行通信,以保障通信準确性,私密性。比如

       指令頭:+SP:

       指令關鍵字:ConnectIOT(連接配接終端)

       SSID:(WIFI的 SSID内容頭) PWD:(WIFI的PWD内容頭)等等

      ● 連接配接成功後,終端會把燒錄好的三元組資訊向安卓終端發送并儲存,以確定應用與裝置之間 一對一的管理關系。

  2、 WIFI聯網:

    智能花盆通電啟動或重新開機後,自動聯網。

    邏輯說明:

      ● 通過藍牙接收到的WIFI配網資訊(SSID,PWD)進行聯網,聯網成功後,ESP8266将自動保 存SSID以及PWD資訊,即使斷電亦不會丢失。

      ● 通過WIFI包提供的網絡狀态檢查指令,在WIFI斷網時進行重新連接配接,實作WIFI斷網重連。

  3、 資料采集及上傳物聯網平台:空氣溫度,濕度,土壤濕度

    每15分鐘,上傳資料至物聯網平台

    邏輯說明:

      ● 空氣溫濕度直接改寫Arduino提供的示例即可。

      ● 土壤濕度傳感器,需要在純水以及空氣中進行一次濕度資料擷取濕度100%~0%的電壓範圍。

      ● 土壤濕度除了每15分鐘上傳一次外,在達到控制下限澆水時,馬上上傳一次,以擷取準确的下限觸發時間點。

  4、 LED顯示屏:亮屏30秒後,自動關閉,作節能作用

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

  當人靠近智能花盆時(1.5米左右),經由[人體紅外傳感器]感應,自動點亮螢幕。

    資訊顯示内容:

      環境資訊:土壤濕度(%),空氣溫度(℃),空氣濕度(%)

      裝置狀态:WIFI網絡狀态(WIFI_OK),資料送出狀态(POSTed)

  5、 觸摸按鍵

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

    按鍵A:點亮螢幕

    按鍵B:手動上傳資料

  6、 澆水

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

    自動執行:

      當檢測到的實時土壤濕度低于控制下限時,自動按定義澆水量進行澆水。

      邏輯說明:

        ● 每次自動澆水至少相隔15分鐘。避免澆水後土壤濕度未及時提升,在下一次濕度下限判斷時,造成連續觸發澆水。

        ● 實質控制範圍是大于 0 少于等于控制下限,因為有時接觸不良的時候,會出現測量土壤濕度為0,造成誤澆水,影響運作。考慮實際運作時,不可能出現土壤濕度為 0 的情況,是以作這個邏輯判斷。

    手動執行:

      響應來自平台的澆水服務調用。

  7、 運作參數維護

    響應來自平台的屬性修改

    土壤濕度控制下限 以及 澆水量

    邏輯說明:

      對屬性修改完成後,通過 nodeMCU 的 SPIFFS 進行數值儲存持久化。以 確定智能花盆在斷電重新開機後,或者斷網時,仍然能以最後配置的屬性運作。

二、背景開發

  1、在阿裡租用一台ECS雲伺服器。

  2、使用ASP.NET MVC3 開發一個背景,通過TCP/IP以處理安卓終端與阿裡物聯網平台資料互動

  相關的開發指引,阿裡這邊相當詳細,不作過多描述。

三、安卓開發

  功能說明:

  1、藍牙配置WIFI

    a) 通過安卓裝置藍牙子產品與智能花盆藍牙子產品比對

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

    邏輯說明:大抵邏輯在上面裝置終端已經說明,僅作簡單描述了

      安卓掃描周邊藍牙裝置,并篩選出指定裝置名的清單。通過應用配對碼連接配接完成後,儲存來自終端裝置的三元組資訊。憑此三元組資訊與平台互動,以通路及控制終端裝置。完成應用與終端比對的工作。

      連接配接藍牙時,安卓預設是彈出框,讓使用者輸入配對碼。但是這個配對碼是用于保護終端裝置藍牙通路安全性,是以需要進行代碼隐藏彈出框,并自動配對碼發送。

      儲存本地的三元組資訊,目前是以明文儲存,進一步開發時,應該是需要加密儲存。

    b) 發送需要連接配接WIFI網絡的SSID以及PWD

      邏輯說明:大抵邏輯在上面裝置終端已經說明,僅作簡單描述了

      安卓應用對終端裝置的操作,必須按定義的指令頭及指令關鍵字進行。

      目前發送SSID以及PWD,都是需要手動填寫,其實是可以自動發送SSID以及PWD的,但是我未能找到這方面的代碼。

  2、智能花盆控制端

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

    a) 運作狀态顯示:定時重新整理由花盆每15分鐘上傳到平台的運作資料

      土壤濕度   空氣溫度   空氣濕度

    b) 運作參數設定:

      ● 土壤濕度下限    機關:百分比

      ● 澆水量       機關:秒

    c) 更新環境資訊

      邏輯說明

      由安卓終端通過背景執行物聯網平台接口,調用智能花盆服務,即時上傳運作資料到物聯網平台

    d) 澆水

      邏輯說明

      邏輯上同,僅調用智能花盆不同服務實作手動即時澆水。

四、整體運作(所在地:廣州)

  代碼部分其實好早已經完成開發,但是為了擷取穩定資料,花了很長很長時間調試

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

上圖說明:整月的運作情況已經逐漸趨向穩定,其實從12月開始,已經在試運作收集資料,但是遇到大坑,後續會提到,直到1月才有令我産生信心的資料。

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

上圖說明:放大1月下半月資料,已經趨向穩定,檢測土壤濕度達下限時(60%),自動澆水,能看到土壤濕度拉高的情況。而1-21資料出現異常資料,是由于家裡出現停電造成沒法自動澆水,進而超過監控土壤濕度下限。

運作參數:土壤濕度下限:60% 澆水量:4.5秒

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

上圖說明:澆水記錄(0:自動澆水,1:手動澆水)

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

上圖說明:空氣溫度與空氣濕度曆史資料

總結

遇到的大坑:

  一、關于傳感器:

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

    這是第一大坑,千萬别選購左圖這邊土壤濕度傳感器,我已經玩壞3-4個,基本上2天就腐蝕掉引腳的金屬塗層,由于這種傳感器的問題,白花了我1個月的時候找原因,都快到要放棄這次設計的地步了,最後才發現是傳感器問題。後更換新款的傳感器,目前約1月餘,傳感器尚算穩定使用。

  二、關于與阿裡物聯網互動資料,在ArudinoIDE對nodeMCU進行代碼燒寫時,當需要進行互動時,會出現異常。

  最終在demo版塊的前輩文章中找到方法,十分感謝。

  https://dev.iot.aliyun.com/demo/detail/169050

  附上前輩文章連結

  具體修改内容

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

  AliyunMqttArduino庫依賴于Crypto庫和PubSubClient庫,用于MQTT連接配接

  修改了PubSubClient庫的MQTT最大包長為256和心跳頻率為60s

  三、關于LED顯示屏

    網上大多Arduino應用LED案例,大多引用U8glib.h 包,但是實際燒錄到nodeMCU的時候,會報錯,直到我改用U8g2lib.h 包。

  四、關于藍牙子產品

    由于藍牙子產品,占用nodeMCU的RX/TX引腳,是以在代碼燒寫時,先不要給藍牙子產品上電,否則會出現燒寫不上的情況。

不足之處:

  一、傳感器取值目前為瞬間值,應該記錄若幹值,去除最高,最底,取平均值為妥。

  二、目前開發闆,使用杜邦線連接配接傳感器,偶爾會接觸不良,後續應該焊到闆子上。

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

  三、上圖儲水罐應該加個水位傳感器,有助提示進行加水。

  四、由于本人對園藝并不熟悉,沒法真正掌握植物的合适土壤濕度範圍。後續能對安卓進一步開發,通過拍照上傳至智能服務平台(Bai度AI -- 植物識别)進行植株識别,傳回植物名稱,以及大資料提供光照時長,溫度濕度建議等等,更完善系統。

未能解決問題:

如何利用阿裡物聯網做一個會自動澆水的花盆 主要功能:特點:設計背景開發闆設計采購物料清單物聯網平台代碼部分總結總結:

  當通過筆記本USB口給nodeMCU供電的時候,通電即運作。但是通過插座供電時,總是需要按一次nodeMCU上的RST按鈕才運作,向大家請教這個問題。

總結:

  從穩定的運作資料能看到,自動澆水的間隔并沒有絕對固定,可以對比當天的空氣溫濕度,反應植物的生長旺盛情況對土壤濕度的影響,亦展現智能花盆基于實際土壤濕度進行澆水的實際性。

  過往已經做過NB-IoT的練習,有空會造一個Arduino + 移遠BC26的版本。

  最後的最後,至2020-2-1,智能花盆運作2個月,未曾人工澆水,薄荷~還活着。

  本人首次發文分享,不足不完善之處,萬請指出,感謝。

繼續閱讀