1. 程式人生 > 其它 >ESP8266 NodeMCU小白手把手入門(實操篇)以土壤溼度和DHT感測器為例講解讀取感測器的值

ESP8266 NodeMCU小白手把手入門(實操篇)以土壤溼度和DHT感測器為例講解讀取感測器的值

物聯網使得現實世界中的實體和數字世界比以往任何時候都更緊密地聯絡在一起。NodeMCU作為其中的一個重要裝置,作用之一就是與感測器相連以實現萬物互聯通訊。這篇關於NodeMCU的實操篇以土壤溼度感測器和DHT感測器為例,詳細介紹瞭如何使用ESP8266獲取感測器的值及相應的示例程式碼。當你瞭解了這篇文章後,NodeMCU與其它大多數感測器的通訊也就迎刃而解了。

物聯網使得現實世界中的實體和數字世界比以往任何時候都更緊密地聯絡在一起。NodeMCU作為其中的一個重要裝置,作用之一就是與感測器相連以實現萬物互聯通訊。這篇關於NodeMCU的實操篇以土壤溼度感測器和DHT感測器為例,詳細介紹瞭如何使用ESP8266獲取感測器的值及相應的示例程式碼。之所以選擇這兩個感測器作為示例進行講解,是因為土壤感測器輸出值的訊號引腳輸出模擬訊號,而DHT感測器的訊號引腳輸出數字訊號,在使用過程中也需要引入庫(也可以不使用庫,程式碼相對複雜)。當你理解了這篇文章後,NodeMCU與其它大多數感測器的通訊也就迎刃而解了。

一、實驗所需裝置及環境

二、連線方式和示例程式碼

三、延伸拓展及注意事項

一、實驗所需裝置及環境

(一)NodeMCU ESP8266

首先你需要了解ESP8266 NodeMCU是什麼及其該裝置的基本操作環境,如果你沒有接觸過的話,請先檢視NodeMCU小白手把手入門。最好選擇ESP-12E型號,關於各個不同型號的NodeMCU的區別看解惑篇的第一部分。

在NodeMCU的引腳圖中包含一些GPIO(通用輸入輸出 general purpose Input Output)引腳,通過它們,可以實現NodeMCU與感測器的通訊。GPIO是積體電路的一種數字引腳,可作為介面裝置的輸入或輸出。如果我們想要控制LED亮度,電機狀態等,那麼我們需要將其配置為輸出。反正,

如果我們想要讀取開關的狀態,感測器資料等,那麼我們就要把GPIO配置為輸入。 很明顯,在本教程中,我們需要配置GPIO為輸入,注意在程式碼中,如需配置GPIO為輸入,相關程式碼pinMode(GPIO, INPUT)可寫可不寫,如配置GPIO為輸出,則把必須使用pinMode(GPIO, OUTPUT)說明。

NodeMCU ESP8266的引腳圖(圖源:lastminuteengineers.com)

(二)土壤感測器YL-69

土壤感測器用於獲取土壤溼度引數,即土壤中的水分百分比。常見的土壤感測器分為兩類,電阻型和電容型土壤溼度感測器。它們的原理大同小異,都是用於測量土壤中水分的體積含量,並以感測器輸入GPIO(0-1024)的電壓值表示水分的多少,電壓值越小,表明水分多,土壤越溼;電壓值越大,表明導電性不好,土壤越幹。詳細的關於土壤感測器的知識請檢視

如何用樹莓派獲取土壤感測器的值中的土壤感測器部分。在本教程中,使用任一土壤感測器即可,價格低廉。

(三)DHT11感測器

用於獲取空氣中的溫度和溼度資料。詳細的關於DHT11的知識請檢視如何用樹莓派獲取DHT感測器的值

(四)Arduino IDE

二、連線方式和示例程式碼

在Arduino IDE中進行如下設定:開發板:NodeMCU 1.0(ESP-12E Module);上傳速度:115200(與程式碼一致);埠:板子所連埠

(一)土壤感測器與NodeMCU的通訊

(1)連線方式

(2) 示例程式碼:

#define soilPin A0

//儲存中間值
int soilValue;
//定義土壤溼度
int soilMoisture;
void setup()
{
      Serial.begin(115200);
     //這句程式碼寫不寫都可
     //pinMode(soilPin, INPUT);
}
void loop()
{
    //讀取土壤感測器上的電壓值
    soilValue = analogRead(soilPin); 
    //把電壓值按照[0,1023]對映到[100,0]
    soilMoisture = map(soilValue,0,1023,100,0);
    //每隔一秒輸出一次值
    delay(1000);
    Serial.print("soilMositure: ");
    Serial.print(soilMoisture);
    Serial.println("%");
}

 (3)輸出結果

(二)DHT11與NodeMCU的通訊

(1)連線方式

(2)下載庫。開啟庫管理器,搜尋DHT,下載DHT sensor libraray。

(3)程式碼實現

#include "DHT.h"

#define DHTPIN D4     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(1000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();

  //如果溫度溼度有一個為空,則輸出“獲=獲取值失敗”
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

   //輸出溫度
  Serial.print(t);
  Serial.print("");
  Serial.print(",");
  //輸出溼度
  Serial.print(h);
  Serial.println("%");
 
}

(4)輸出結果

三、延伸拓展及注意事項

所有應用於NodeMCU的程式碼可以直接用於Arduino,更改相應的引數和引腳名稱即可。

NodeMCU只有一個模擬引腳,只能同時獲取一個輸出模擬訊號的感測器的值,這是它的侷限性。