使用ESP32顯示天氣

本教程演示如何創建一個氣象站,該氣象站使用傳感器讀數在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, &amp;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項目,添加新傳感器或新功能。
附國內說明:

  1. ESP32 板

  2. BMP280傳感器

  3. SSD1306

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章