在這篇文章中,我們將介紹如何搭建一款監(jiān)測土壤水分的物聯(lián)網(wǎng)系統(tǒng),用于在土壤干燥時發(fā)出警報,提醒用戶。本項目使用了IoT 云平臺來管理警報系統(tǒng),同時存儲來自傳感器的數(shù)據(jù)。眾所周知,物聯(lián)網(wǎng)是當今熱門話題之一,它將改變我們的未來及生活方式。如今我們可以自己動手搭建物聯(lián)網(wǎng)系統(tǒng),因為市場上已有一些原型板,這使得我們不用花費太多金錢及精力就可以著手物聯(lián)網(wǎng)項目。
構(gòu)建這個項目,我們需要:
該項目的核心理念是搭建一個監(jiān)測土壤水分的 IoT 系統(tǒng),勘測土壤的濕度。Arduino MKR1000 控制傳感器向 Carriots IoT 平臺發(fā)送數(shù)據(jù)。Carriots 平臺反過來存儲來自傳感器的數(shù)據(jù),并檢測存儲的值何時達到閾值。下文我們會分享如何分析數(shù)據(jù)。現(xiàn)在可以假設 Carriots IoT 平臺能夠以某種方式調(diào)用一個 IFFT 服務,并向用戶發(fā)送一個提醒的短消息。構(gòu)建該 IoT 系統(tǒng),我們可以探索如何使用 IoT 生態(tài)系統(tǒng)的組件。此外,該項目使用 LED 矩陣顯示濕度土壤狀態(tài)。接下來,我們看看具體怎么搭建。
步,我們必須讀取傳感器數(shù)據(jù)。該 IoT 項目使用了 YL-38 + YL-69 傳感器,這個是可以插入要檢查的土壤中的模擬傳感器。那么如何將傳感器連接到 Arduino,如下所示:
代碼很簡單。我們 從A1 引腳讀取數(shù)據(jù),然后計算濕度:
float moistureHum = analogRead(A1);
moistureHum = (1023 - moistureHum) * 100 /1023;
此外,還需將 Arduino MKR1000 連接到互聯(lián)網(wǎng),以便它可以發(fā)送數(shù)據(jù):
#include "WiFi101.h" WiFiClient client; void setup() {
Serial.begin(9600);
Serial.print("Starting..."); if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present"); while (true);
}
connectToWifi();
}
connectToWifi() 包含:
void connectToWifi() { while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000);
}
}
這樣,如以上代碼所述,我們可以管理顯示濕度的 LED 矩陣。接下來就聚焦于物聯(lián)網(wǎng)云平臺上。
在將數(shù)據(jù)發(fā)送到云端之前,我們必須配置 Carriots 平臺才能管理數(shù)據(jù)。 Carriots 使用了分層結(jié)構(gòu)來對設備進行分組和管理。因此,在使用設備之前,必須創(chuàng)建此結(jié)構(gòu)。用戶一旦登錄,先點擊“Hierarchy”,再點擊“ Project”,填寫所需的數(shù)據(jù),如下圖:
下一步創(chuàng)建服務,填寫所需的數(shù)據(jù):
后,創(chuàng)建組:
以上的步驟只需做一次。后一步是配置設備。它表示我們用來發(fā)送數(shù)據(jù)的物理設備。該設備屬于在后一步創(chuàng)建的組,組屬于服務,服務屬于項目。配置步驟非常簡單,如下圖所示:
至此,配置步驟已完成。我們需將 Arduino 設備連接到 Carriots 并開始發(fā)送數(shù)據(jù)。上圖中,Id.developer 這個參數(shù)很重要,它代表了將來自 Arduino 設備的數(shù)據(jù)綁定到 Carriots 設備的標識符。另一個重要參數(shù)是 API 密鑰。你可以在設置>API密鑰菜單中找到它。為了發(fā)送數(shù)據(jù),我們將這個函數(shù)添加到上面的代碼中:
void sendData(float data) { if (client.connect(server,80)) {
Serial.println("Connected to the server....");
String jsonData = "{\"protocol\":\"v2\",\"device\":\""+DEVICE_ID+ "\",\"at\":\"now\",\"data\":{\"soil\":\""+
String(data)+"\"}}"; // Make a HTTP request client.println("POST /streams HTTP/1.1"); client.println("Host: api.carriots.com"); client.println("Accept: application/json"); client.println("User-Agent: Arduino-Carriots"); client.println("Content-Type: application/json"); client.print("carriots.apikey: "); client.println(API_KEY); client.print("Content-Length: "); int thisLength = jsonData.length(); client.println(thisLength); client.println("Connection: close"); client.println(); client.println(jsonData);
}
}
注意該函數(shù)發(fā)送一個包含從傳感器讀取的數(shù)據(jù)的 JSON 有效載荷。必須在 loop()方法中調(diào)用此函數(shù)。運行這個程序,我們可以發(fā)現(xiàn)設備向 Carriots 發(fā)送數(shù)據(jù),如下所示:
接下來是監(jiān)控數(shù)據(jù)。通常在物聯(lián)網(wǎng)系統(tǒng)中,我們不僅希望從傳感器獲取數(shù)據(jù),而且當這些值超出特定值時,我們希望監(jiān)視這些信息以采取完善措施。本項目中,當土壤太過干燥時,我們要告知用戶。雖然 Carriots 擁有內(nèi)置的電子郵件系統(tǒng),但我們更傾向于與 Carriots 集成的另一個有用的平臺,即 IFFT。該平臺提供了多種集成服務。
為了提醒用戶,我們需要兩個組件:
作為監(jiān)控數(shù)據(jù)系統(tǒng),本 IoT 系統(tǒng)項目使用 Carriots 監(jiān)聽器。監(jiān)聽是分析輸入值及應用特定規(guī)則的一個過程。當規(guī)則被驗證時,它就會調(diào)用一個腳本。對于 Carriots 的有趣方面是,我們可以使用 Groovy 作為腳本語言來調(diào)用外部服務。
警報系統(tǒng)建立在 IFFT 上。在完成 Carriots 的任務之前,配置 IFFT 非常有必要。如上所述,當濕度達到閾值時,我們想要發(fā)送一條短消息提醒用戶。為了實現(xiàn)這個功能,需要在 IFFT 中配置一個短消息服務。在此之前,我們需要一個免費的帳戶。那么首先我們創(chuàng)建一個新的 Applet:
點擊“+”添加服務并搜索“Maker”服務:
選擇“Maker webhooks”來啟用 IoT Maker。接下來配置 maker 服務,并填入觸發(fā)發(fā)送消息進程的事件名稱:
后,啟動發(fā)送消息服務,配置所有必需的參數(shù),如目標號碼和消息體:
現(xiàn)在,我們來看一下 Carriots 平臺的監(jiān)聽器。首先創(chuàng)建一個新的監(jiān)聽器,調(diào)用與之前剛創(chuàng)建的 Applet 相關的 URL。當監(jiān)聽器調(diào)用 URL 時,IFFT 發(fā)送一條短消息。配置監(jiān)聽器流程如下圖所示:
后一步是配置表達式。我們可以使用 Groovy 寫這個案例。
綜上,我們可以驗證當土壤水分低于閾值水平時,手機上是否會收到一條短信。
通過本文,相信大家已經(jīng)學會了如何使用傳感器、Arduino 和 IoT 云平臺構(gòu)建 IoT 系統(tǒng)。也正如本文所述,我們可以集成現(xiàn)有的平臺和服務來構(gòu)建一款 IoT 系統(tǒng)。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構(gòu)成任何投資及應用建議。本站是一個個人學習交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。