1. 程式人生 > >基於 Arduino 和 IoT 雲平臺搭建物聯網系統

基於 Arduino 和 IoT 雲平臺搭建物聯網系統

來看 需要 padding .... nal maker post 分層結構 car

在這篇文章中,我們將介紹如何搭建一款監測土壤水分的物聯網系統,用於在土壤幹燥時發出警報,提醒用戶。本項目使用了IoT 雲平臺來管理警報系統,同時存儲來自傳感器的數據。眾所周知,物聯網是當今熱門話題之一,它將改變我們的未來及生活方式。如今我們可以自己動手搭建物聯網系統,因為市場上已有一些原型板,這使得我們不用花費太多金錢及精力就可以著手物聯網項目。

搭建 IoT 系統項目

構建這個項目,我們需要:

  1. Arduino MKR1000;
  2. 濕度傳感器;
  3. IoT 雲平臺 Carriots 的免費賬戶(點擊這裏創建賬戶);
  4. IFFT 賬戶(點擊這裏,了解更多)。

該項目的核心理念是搭建一個監測土壤水分的 IoT 系統,勘測土壤的濕度。Arduino MKR1000 控制傳感器向 Carriots IoT 平臺發送數據。Carriots 平臺反過來存儲來自傳感器的數據,並檢測存儲的值何時達到閾值。下文我們會分享如何分析數據。現在可以假設 Carriots IoT 平臺能夠以某種方式調用一個 IFFT 服務,並向用戶發送一個提醒的短消息。構建該 IoT 系統,我們可以探索如何使用 IoT 生態系統的組件。此外,該項目使用 LED 矩陣顯示濕度土壤狀態。接下來,我們看看具體怎麽搭建。

檢測傳感器數據

第一步,我們必須讀取傳感器數據。該 IoT 項目使用了 YL-38 + YL-69 傳感器,這個是可以插入要檢查的土壤中的模擬傳感器。那麽如何將傳感器連接到 Arduino,如下所示:

代碼很簡單。我們 從A1 引腳讀取數據,然後計算濕度:

float moistureHum = analogRead(A1);
moistureHum = (1023 - moistureHum) * 100 /1023;

此外,還需將 Arduino MKR1000 連接到互聯網,以便它可以發送數據:

#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 矩陣。接下來就聚焦於物聯網雲平臺上。

連接到 IoT 雲平臺

在將數據發送到雲端之前,我們必須配置 Carriots 平臺才能管理數據。 Carriots 使用了分層結構來對設備進行分組和管理。因此,在使用設備之前,必須創建此結構。用戶一旦登錄,先點擊“Hierarchy”,再點擊“ Project”,填寫所需的數據,如下圖:

技術分享

下一步創建服務,填寫所需的數據:

技術分享

最後,創建組:

技術分享

以上的步驟只需做一次。最後一步是配置設備。它表示我們用來發送數據的物理設備。該設備屬於在最後一步創建的組,組屬於服務,服務屬於項目。配置步驟非常簡單,如下圖所示:

技術分享

至此,配置步驟已完成。我們需將 Arduino 設備連接到 Carriots 並開始發送數據。上圖中,Id.developer 這個參數很重要,它代表了將來自 Arduino 設備的數據綁定到 Carriots 設備的唯一標識符。另一個重要參數是 API 密鑰。你可以在設置>API密鑰菜單中找到它。為了發送數據,我們將這個函數添加到上面的代碼中:

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);
 }
}

註意該函數發送一個包含從傳感器讀取的數據的 JSON 有效載荷。必須在 loop()方法中調用此函數。運行這個程序,我們可以發現設備向 Carriots 發送數據,如下所示:

技術分享

監控物聯網傳感器數據

接下來是監控數據。通常在物聯網系統中,我們不僅希望從傳感器獲取數據,而且當這些值超出特定值時,我們希望監視這些信息以采取完善措施。本項目中,當土壤太過幹燥時,我們要告知用戶。雖然 Carriots 擁有內置的電子郵件系統,但我們更傾向於與 Carriots 集成的另一個有用的平臺,即 IFFT。該平臺提供了多種集成服務。

為了提醒用戶,我們需要兩個組件:

  1. 監控數據系統;
  2. 警報系統。

作為監控數據系統,本 IoT 系統項目使用 Carriots 監聽器。監聽是分析輸入值及應用特定規則的一個過程。當規則被驗證時,它就會調用一個腳本。對於 Carriots 的有趣方面是,我們可以使用 Groovy 作為腳本語言來調用外部服務。

警報系統建立在 IFFT 上。在完成 Carriots 的任務之前,配置 IFFT 非常有必要。如上所述,當濕度達到閾值時,我們想要發送一條短消息提醒用戶。為了實現這個功能,需要在 IFFT 中配置一個短消息服務。在此之前,我們需要一個免費的帳戶。那麽首先我們創建一個新的 Applet:

技術分享

點擊“+”添加服務並搜索“Maker”服務:

技術分享

選擇“Maker webhooks”來啟用 IoT Maker。接下來配置 maker 服務,並填入觸發發送消息進程的事件名稱:

技術分享

最後,啟動發送消息服務,配置所有必需的參數,如目標號碼和消息體牛肉板面:

技術分享

現在,我們來看一下 Carriots 平臺的監聽器。首先創建一個新的監聽器,調用與之前剛創建的 Applet 相關的 URL。當監聽器調用 URL 時,IFFT 發送一條短消息。配置監聽器流程如下圖所示:

技術分享

最後一步是配置表達式。我們可以使用 Groovy 寫這個案例。

綜上,我們可以驗證當土壤水分低於閾值水平時,手機上是否會收到一條短信。

總結

通過本文,相信大家已經學會了如何使用傳感器、Arduino 和 IoT 雲平臺構建 IoT 系統。也正如本文所述,我們可以集成現有的平臺和服務來構建一款 IoT 系統。

基於 Arduino 和 IoT 雲平臺搭建物聯網系統