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


原標題:LEDlua編程入門教程,用NodeMCU在OLED上顯示溫濕度
硬件準備
NodeMCU 開發(fā)板(基于 ESP8266)
DHT11 或 DHT22 溫濕度傳感器
0.96 英寸 I2C OLED 顯示屏(通?;?SSD1306 驅(qū)動芯片)
面包板和杜邦線
軟件準備
Arduino IDE(用于編寫和上傳代碼)
NodeMCU 開發(fā)板驅(qū)動(確保電腦能識別 NodeMCU)
安裝必要的庫:
Adafruit_SSD1306(OLED 驅(qū)動庫)
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)
代碼實現(xiàn)
以下是 Arduino C++ 代碼,適用于 NodeMCU:
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> // OLED 顯示屏參數(shù) #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // NodeMCU 沒有硬件復(fù)位引腳,設(shè)為 -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // DHT 傳感器參數(shù) #define DHTPIN D4 // DHT 數(shù)據(jù)引腳連接到 NodeMCU 的 D4 #define DHTTYPE DHT11 // 使用 DHT11 傳感器(如果使用 DHT22,請改為 DHT22) DHT dht(DHTPIN, DHTTYPE); void setup() { // 初始化串口監(jiān)視器 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() { // 讀取溫濕度數(shù)據(jù) 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; } // 打印到串口監(jiān)視器 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:用于驅(qū)動 OLED 顯示屏。
DHT:用于讀取 DHT 傳感器的溫濕度數(shù)據(jù)。
初始化:
初始化串口監(jiān)視器、DHT 傳感器和 OLED 顯示屏。
數(shù)據(jù)讀取:
使用 dht.readHumidity() 和 dht.readTemperature() 讀取溫濕度數(shù)據(jù)。
檢查數(shù)據(jù)是否有效(避免讀取失敗導(dǎo)致程序崩潰)。
數(shù)據(jù)顯示:
在 OLED 顯示屏上顯示溫濕度數(shù)據(jù),使用 display.setCursor() 設(shè)置顯示位置,display.print() 打印文本。
上傳代碼
打開 Arduino IDE,選擇 工具 -> 開發(fā)板 -> NodeMCU 1.0 (ESP-12E Module)。
選擇正確的端口(工具 -> 端口)。
點擊“上傳”按鈕,將代碼上傳到 NodeMCU。
運行效果
打開串口監(jiān)視器(波特率 115200),可以看到溫濕度數(shù)據(jù)不斷打印。
OLED 顯示屏上會實時顯示當(dāng)前的溫度和濕度。
注意事項
電源問題:
NodeMCU 和 OLED 顯示屏的工作電壓均為 3.3V,不要直接連接 5V 電源。
I2C 地址:
如果 OLED 顯示屏不顯示,嘗試修改 display.begin(SSD1306_I2C_ADDRESS, 0x3C) 中的地址為 0x3D。
傳感器選擇:
DHT11 精度較低,但價格便宜;DHT22 精度更高,適合需要高精度的場景。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點,拍明芯城不對內(nèi)容的準確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對此聲明的最終解釋權(quán)。