背景
我們房子周圍有一些盆栽植物,因為它們所處的位置有點偏僻,所以往往并不能及時的受到養(yǎng)護。正巧我的實施清單上有一個完整的花園監(jiān)控項目,但在此之前,作為朝那個方向邁出的一小步,我想我會從幾個基于 ESP8266 的模塊開始,然后嘗試使用 AWS IoT 將它們整合在一起。
系統(tǒng)總覽
初始系統(tǒng)由三個主要部分組成:
基于電池供電的WeMos D1 mini盆栽土壤濕度監(jiān)測器
一個 基于Adafruit Feather HUZZAH ESP8266的監(jiān)視器模塊,帶有一個NeoPixel FeatherWing ,用于一目了然的顯示
用于發(fā)布和檢索傳感器數據的 AWS IoT
除了 AWS IoT 方面的一個小例外,一切都按預期進行。在我最初想使用 MQTT 發(fā)布和訂閱傳感器數據的地方,我不得不退回到 REST API,因為ESP8266 無法處理 AWS IoT MQTT 連接的特定要求。稍后,讓我們從硬件開始。
土壤濕度傳感器
大多數設備工作都在傳感器方面。項目沒有使用很多傳感器,但添加了一些開關以幫助提高可用性。
土壤濕度傳感器模塊的大腦是基于 ESP-8266EX 的漂亮小巧的 WeMos D1 mini。我在這里焊接了 WeMos 隨附的堆疊接頭,并且它足夠小,可以在兩側使用面包板端子。
土壤濕度傳感器本身是 SparkFun 的一個非常簡單的傳感器。我焊接了幾根電線以將其連接到 WeMos。
我還添加了兩個開關以幫助提高可用性:
第一個開關是啟用/禁用土壤濕度檢查和數據發(fā)布,以防我不希望啟用傳感器和/或激活 wifi 連接和數據發(fā)布過程。關閉模塊后,模塊會在配置的時間內重新進入深度睡眠。要立即(重新)啟用傳感器,請重新打開開關并按下 WeMos 上的重置按鈕。
第二個開關是將 WeMos 置于閃光模式,因此我們需要在設備進入深度睡眠模式之前嘗試對其配置。當開關“打開”或朝向 WeMos 時,模塊已準備好進行正常操作。當“關閉”或遠離 WeMos 時,模塊已準備好閃爍。在上傳固件時,可以將開關重新“打開”,以便在上傳后重置模塊即可正常使用。
一旦傳感器模塊全部連接好,就該讓它閃爍了。
土壤水分顯示
顯示器比傳感器模塊簡單得多,部分原因是我只顯示各種濕度水平的顏色(紅色 -》 黃色 -》 綠色 -》 藍色),還因為這完全是使用 Adafruit Feather 組件構建的,所以它是幾乎只是一個簡單的焊料,即插即用。
NeoPixel FeatherWing 需要默認的封閉跳線切割和另一個焊接(與 Feather HUZZAH ESP8266 #15 引腳對齊)。
NeoPixels 的亮度足以引起任何人的注意,即使在最低亮度時也是如此。
在進入固件之前就差不多了。但首先,需要為 AWS IoT 傳感器和用戶進行一些設置,因為我們需要從那里獲取一些信息才能正確連接。
如果您還沒有設置這一步,則需要“開始”使用 AWS IoT:
https://aws.amazon.com/iot/
當您可以看到 AWS IoT 儀表板,我們就可以添加一個“事物”。
首先,單擊“創(chuàng)建資源”。
然后單擊“創(chuàng)建事物”。
將事物命名為“soil-sensor-one”,然后單擊“創(chuàng)建”。
單擊您剛剛添加的“事物”以查看其詳細信息并記下詳細信息窗格頂部的“REST API 端點”。
正如我之前提到的,MQTT 端點不能真正與 ESP8266 一起使用,因為它無法執(zhí)行所需的基于證書的身份驗證。相反,我們可以使用帶有版本 4 簽名的 REST API。
因此,為了使用 REST API,我們需要添加一個擁有 AWS IoT 權限的新用戶。為此,請單擊頁面頂部的“服務”,然后單擊左側的“IAM”。
點擊“用戶”
然后“創(chuàng)建新用戶”
輸入用戶名,然后單擊“創(chuàng)建”。
創(chuàng)建用戶后,單擊“顯示用戶安全憑據”
并記下密鑰和秘密。稍后固件中的 keys.cpp 文件將需要這些,不要與任何人分享這些內容!
如果需要,也可以下載憑據,然后單擊“關閉”(如果您不下載,它會在關閉時發(fā)出警告)。
現在需要授予新用戶訪問 AWS IoT 的權限。單擊新創(chuàng)建的用戶。
單擊“附加策略”。
在過濾器中輸入“iot”,選擇“AWSIoTDataAccess”,然后單擊“AttachPolicy”。
之后可以賦予用戶以下權限。
{ "Version": "2012-10-17", "Statement":
[
{ "Effect": "Allow", "Action":
[ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:GetThingShadow", "iot:UpdateThingShadow"
], "Resource": "*"
} ]
}
'UpdateThingShadow' 和 'GetThingShadow' 將用于 REST API 訪問。
準備刷新固件
又名,安裝 Arduino 板,安裝 USB 驅動程序和了解通用設備特定的 Arduino 配置。
WeMos D1 mini入門頁面非常清晰,但建議的上傳速度似乎不起作用,因此請嘗試使用 115200 而不是 921600。
Adafruit Feather HUZZAH ESP8266 Arduino 設置信息很棒,無需更改 AFAIK。該頁面上提到,某些版本的 Arduino IDE 可能會導致一些困難,但我對 1.6.7 沒有任何問題(它比那些被挑出來的可能難以使用的版本更新)。
刷新固件
首先,您需要一個適用于 ESP8266 的 AWS IoS Arduino 庫。 這個 特別是 從 Amazon Web Services - Labs org 開始的,但是 為了獲得一些 ESP8266 支持和一些小的改進,它 分叉了一個 叉子。
使庫可用于 Arduino IDE 的一種方法是下載此分支
https://github.com/heskew/aws-sdk-arduino/archive/iot-get-shadow-and-cleanup.zip , 將其解壓縮到驅動器上的某個位置并將 src/esp8266 文件夾符號鏈接到 ~/Documents /Arduino/libraries(在 OSX 上——位置可能因操作系統(tǒng)而異)。然后獲取傳感器代碼
https://github.com/heskew/things-aws-iot-soil-monitor/tree/master/sensor , 添加一個keys.cpp并為keys.h中的所有內容添加值。使用 https://github.com/heskew/things-aws-iot-soil-monitor/tree/master/monitor對監(jiān)視器執(zhí)行相同操作,并對那里的 keys.cpp 執(zhí)行相同操作。
閃存每個設備,可能需要對“端口”和“上傳速度”進行一些調整,僅此而已。
默認情況下,傳感器模塊將讀取讀數,連接到 wifi 并使用標準化值(0-100 刻度)更新傳感器陰影,然后休眠 30 秒(并重復)。
在編寫本文時,監(jiān)視器模塊將每 5 秒讀取一次,并根據值更新 NeoPixel 顏色(使用當前組成的一組范圍為紅色 -》 黃色 -》 綠色 -》 藍色刻度)。
基本上:
紅色:植物可能正在受傷
黃色:植物可以用水
綠色:植物在水位上表現良好
藍色:植物瀕危
-
監(jiān)測器
+關注
關注
0文章
170瀏覽量
38762 -
ESP8266
+關注
關注
50文章
962瀏覽量
44758
發(fā)布評論請先 登錄
相關推薦
評論