lua編程入門教程,用NodeMCU在OLED上顯示溫濕度


原標題:LEDlua編程入門教程,用NodeMCU在OLED上顯示溫濕度
硬件準備
NodeMCU 開發板(基于 ESP8266)
DHT11 或 DHT22 溫濕度傳感器
0.96 英寸 I2C OLED 顯示屏(通常基于 SSD1306 驅動芯片)
面包板和杜邦線
軟件準備
Arduino IDE(用于編寫和上傳代碼)
NodeMCU 開發板驅動(確保電腦能識別 NodeMCU)
安裝必要的庫:
Adafruit_SSD1306(OLED 驅動庫)
Adafruit_GFX(圖形庫)
DHT(DHT 傳感器庫)
接線說明
DHT 傳感器接線
DHT 引腳 | NodeMCU 引腳
VCC | 3V3
GND | GND
DATA | D4 (GPIO2)
OLED 顯示屏接線
OLED 引腳 | NodeMCU 引腳
VCC | 3V3
GND | GND
SCL | D1 (GPIO5)
SDA | D2 (GPIO4)
代碼實現
以下是 Arduino C++ 代碼,適用于 NodeMCU:
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> // OLED 顯示屏參數 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // NodeMCU 沒有硬件復位引腳,設為 -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // DHT 傳感器參數 #define DHTPIN D4 // DHT 數據引腳連接到 NodeMCU 的 D4 #define DHTTYPE DHT11 // 使用 DHT11 傳感器(如果使用 DHT22,請改為 DHT22) DHT dht(DHTPIN, DHTTYPE); void setup() { // 初始化串口監視器 Serial.begin(115200); Serial.println("DHT11/DHT22 + OLED 顯示示例"); // 初始化 DHT 傳感器 dht.begin(); // 初始化 OLED 顯示屏 if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) { // 默認 I2C 地址為 0x3C Serial.println(F("OLED 初始化失敗")); for (;;); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Initializing..."); display.display(); delay(2000); } void loop() { // 讀取溫濕度數據 float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); // 檢查是否讀取失敗 if (isnan(humidity) || isnan(temperature)) { Serial.println("Failed to read from DHT sensor!"); display.clearDisplay(); display.setCursor(0, 0); display.println("DHT Sensor Error!"); display.display(); return; } // 打印到串口監視器 Serial.print("Humidity: "); Serial.print(humidity); Serial.print(" % "); Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" *C"); // 在 OLED 上顯示 display.clearDisplay(); display.setCursor(0, 0); display.setTextSize(1); display.println("DHT11/DHT22 Sensor"); display.setTextSize(2); display.setCursor(0, 20); display.print("T: "); display.print(temperature); display.print(" C"); display.setCursor(0, 40); display.print("H: "); display.print(humidity); display.print(" %"); display.display(); // 延遲 2 秒 delay(2000); }
代碼說明
庫的作用:
Adafruit_SSD1306 和 Adafruit_GFX:用于驅動 OLED 顯示屏。
DHT:用于讀取 DHT 傳感器的溫濕度數據。
初始化:
初始化串口監視器、DHT 傳感器和 OLED 顯示屏。
數據讀取:
使用 dht.readHumidity() 和 dht.readTemperature() 讀取溫濕度數據。
檢查數據是否有效(避免讀取失敗導致程序崩潰)。
數據顯示:
在 OLED 顯示屏上顯示溫濕度數據,使用 display.setCursor() 設置顯示位置,display.print() 打印文本。
上傳代碼
打開 Arduino IDE,選擇 工具 -> 開發板 -> NodeMCU 1.0 (ESP-12E Module)。
選擇正確的端口(工具 -> 端口)。
點擊“上傳”按鈕,將代碼上傳到 NodeMCU。
運行效果
打開串口監視器(波特率 115200),可以看到溫濕度數據不斷打印。
OLED 顯示屏上會實時顯示當前的溫度和濕度。
注意事項
電源問題:
NodeMCU 和 OLED 顯示屏的工作電壓均為 3.3V,不要直接連接 5V 電源。
I2C 地址:
如果 OLED 顯示屏不顯示,嘗試修改 display.begin(SSD1306_I2C_ADDRESS, 0x3C) 中的地址為 0x3D。
傳感器選擇:
DHT11 精度較低,但價格便宜;DHT22 精度更高,適合需要高精度的場景。
責任編輯:David
【免責聲明】
1、本文內容、數據、圖表等來源于網絡引用或其他公開資料,版權歸屬原作者、原發表出處。若版權所有方對本文的引用持有異議,請聯系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學習使用,不涉及商業目的。
3、本文內容僅代表作者觀點,拍明芯城不對內容的準確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關結果。
4、如需轉載本方擁有版權的文章,請聯系拍明芯城(marketing@iczoom.com)注明“轉載原因”。未經允許私自轉載拍明芯城將保留追究其法律責任的權利。
拍明芯城擁有對此聲明的最終解釋權。