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)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。