本教程演示如何創建一個氣象站,該氣象站使用傳感器讀數在LCD屏幕上解釋和顯示天氣數據。
使用ESP32的本教程介紹瞭如何使用ESP32和BMP280和SSD1306來構建氣象站。 該ESP32項目使用LCD顯示屏顯示傳感器讀數。 使用ESP32構建氣象站是一個簡單的IoT項目,但對ESP32入門並探索其主要功能很有用。 在這個項目中,爲了監控壓力和溫度,我們將使用BMP280。 因此,本ESP32教程探討了如何:
-
使用BMP280或BME280獲取當前溫度和壓力
-
使用SSD1306的LCD顯示屏將顯示傳感器的讀數
爲了構建這個項目,我們將使用帶有PlatformIO插件的VS Code。 這是一個非常有趣的IDE,可以爲我們提供幫助。
最終結果如下圖所示:
所需組件
要遵循本教程,您需要以下組件:
如果沒有BMP280傳感器,可以使用BME280。如果你使用BME280傳感器,你也可以監測溼度。
BMP280傳感器模塊說明
BMP280是一個測量壓力和溫度的傳感器模塊。如果你有BME280,也可以測量溼度。這種傳感器有幾種型號。ESP32氣象站採用I2C通信協議。
SSD1306液晶顯示器
SSD1306是一個LCD顯示器,用於顯示傳感器的讀數。這種液晶顯示器有幾種型號。它們在像素方面有不同的寬度和高度。本項目使用的是128×64單色顯示器。SSD1306使用I2C協議,但也可以使用SPI版本。在這種情況下,您必須更改連接
示意圖:ESP32+BMP280+SSD1306
首先,讓我們看看如何將ESP32連接到BMP280和SSD1306。架構如下所示:
BMP280和SSD1306是I2C設備,因此我們必須連接四個管腳:
-
Vcc引腳
-
接地引腳
-
時鐘時鐘插針
-
數據SDA pin
時鐘和數據管腳連接到EPS32I2C管腳,如上圖所示。
使用ESP32從BMP280傳感器讀取數據
在第一步中,我們將從連接到ESP32的傳感器(BMP280)讀取數據。這很簡單。首先,我們必須導入Adafruit庫來管理BMP280。如果你不知道怎麼做,請閱讀設置ESP32 IDE段落,瞭解如何開始使用ESP32和PlatformIO。
#include <Arduino.h>
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP280.h>
#define BMP_SDA 21
#define BMP_SCL 22
Adafruit_BMP280 bmp280;
void setup() {
Serial.begin(9600);
Serial.println("Initializing BMP280");
boolean status = bmp280.begin(0x76);
if (!status) {
Serial.println("Not connected");
}
}
void loop() {
Serial.println(WiFi.localIP());
float temp = bmp280.readTemperature();
float press = bmp280.readPressure() / 100;
Serial.println("Temperature:");
Serial.println(temp);
}
代碼很簡單。在包含這些定義之後,ESP32代碼在第9行聲明我們將用來連接BMP280傳感器的對象。在setup()方法中,我們在ESP32和BMP280之間建立連接。正如您可能注意到的,代碼使用地址0x76。確保您的傳感器具有相同的I2C地址,或根據需要進行更改。
最後,在loop()方法中,我們讀取溫度和壓力:
- bmp280.readTemperature()
- bmp280.readPressure()
溫度以攝氏度爲單位,壓力以帕斯卡爲單位。要轉換爲毫巴,必須將傳感器讀數除以100。
如果你用的是BME280,你也可以用同樣的方法讀取溼度。僅此而已,我們準備展示結果。
使用ESP32和SSD1306顯示傳感器讀數
在ESP32項目的最後一部分中,我們將顯示從傳感器讀取的值,並使用LCD顯示器(SSD1306)顯示這些值。您可以使用其他兼容的顯示器來顯示結果。讓我們看看代碼:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
...
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.setTextSize(1);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}
void loop() {
Serial.println(WiFi.localIP());
float temp = bmp280.readTemperature();
float press = bmp280.readPressure() / 100;
Serial.println("Temperature:");
Serial.println(temp);
display.clearDisplay();
display.setCursor(0,0);
display.print("Temperature:");
display.println(temp);
display.print("Pressure:");
display.println(press);
display.display();
delay(6000);
}
在這段ESP32代碼中需要注意的一些事情。首先,如果您不知道如何導入庫來管理SSD1306,請轉到下一段。在導入定義之後,在第4行,我們定義將處理顯示的對象。這個ESP32氣象站使用的顯示器是一個128×64的LCD,寬度和高度是定義中使用的值。如果顯示的尺寸不同,請將值替換爲寬度和高度。在第8行,代碼試圖連接到顯示器。最後,它配置顯示設置文本大小和文本顏色。
在loop()方法中,我們只顯示從傳感器讀取的溫度和壓力。就這些。你已經用ESP32建立了你的氣象站。
ESP32是一個很好的設備,它可以在多種情況下使用。例如,您可以閱讀如何將ESP32連接到AWS IoT Core。
設置ESP32 IDE
連接引腳後,我們可以將注意力集中在如何設置用於構建ESP32氣象站項目的IDE上。 如前所述,我們將結合使用Visual Studio Code和Platform IO插件。 您可以從此鏈接下載Visual Studio。 然後單擊左側菜單上的擴展,然後查找PlatformIO插件。 安裝後,您將獲得以下內容:
我們已經準備好使用IDE了。
創建新的ESP32項目
是時候創建一個新的ESP32項目了。打開PlatformIO插件並創建一個新項目。然後,選擇ESP32平臺。僅此而已…現在您可以創建一個新項目,我們將開發ESP32氣象站入門。
導入庫
創建項目後,我們可以導入庫來處理BMP280和SSD1306。單擊庫(左側菜單)並查找:
- BMP280
- SSD1306
一旦找到Adafruit庫,就可以將其導入到項目中,並準備好使用它們。
結束…。
在本文的最後,您將瞭解如何從ESP32開始構建一個簡單的氣象站。本教程介紹瞭如何將ESP32與BMP280連接,以及如何使用SSD1306顯示傳感器讀數。您可以進一步改進這個ESP32項目,添加新傳感器或新功能。
附國內說明: