一.开发芯片ESP32及OLED显示屏
二.DHT11传感器
三.开发环境(VScode+Platformio)
四.驱动代码
开发芯片:
ESP32-wroom-32-type-c接口
传感器:
简介:DHT11温湿度传感器
温度范围为: 测量范围为-20~+60℃, 精度±2℃
湿度范围为:测量范围为5~95%RH, 精度为±5%RH
显示模块:
0.96寸OLED-ssd1306驱动芯片IIC协议
驱动代码:
注意:
1.本程序导入了两个第三方库<DHT11><u8g2>,在执行本程序时一定要导入并安装这两个库
2.OLED显示屏引脚 (SCL:Pin_22 SDA:Pin_21)(VCC:单片机3.3V GND:单片机GND)
3.DHT11信号引脚 (VCC:单片机3.3V DATA:Pin_5 GND:单片机GND)
#include <Arduino.h> #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #include <u8g2lib.h> U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); #define DHTPIN 2 // Digital pin connected to the DHT sensor // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- // Pin 15 can work but DHT must be disconnected during program upload. // Uncomment the type of sensor in use: // 型号定义 #define DHTTYPE DHT11 // DHT 11 // #define DHTTYPE DHT22 // DHT 22 (AM2302) // #define DHTTYPE DHT21 // DHT 21 (AM2301) // DHT11引脚定义及型号选择 DHT_Unified dht(DHTPIN, DHTTYPE); void setup() { u8g2.begin(); // u8g2初始化 dht.begin(); // DHT11初始化 } void loop() { u8g2.clearBuffer(); // 数据缓存区清除 u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 设置字体 // 测量之间的延迟。 delay(2000); // 定义一个结构成员 sensors_event_t event; // 获取温度事件并打印其值。 dht.temperature().getEvent(&event); float value_t = event.temperature; char t[20]; sprintf(t, "%.2f", value_t); // 将温度浮点型数据转换为字符串数据 // 获取湿度事件并打印其值。 dht.humidity().getEvent(&event); float value_h = event.relative_humidity; char h[20]; sprintf(h, "%.2f", value_h); // 将湿度浮点型数据转换为字符串数据 // 检测是否有数据传入 if (isnan(event.temperature) | isnan(event.relative_humidity)) { u8g2.drawUTF8(8, 30, "未检测到温湿度数据"); u8g2.sendBuffer(); // OLED数据显示 } else { // OLED显示温度 u8g2.drawUTF8(0, 30, "温度:"); u8g2.drawUTF8(32, 30, t); u8g2.drawUTF8(64, 30, "℃"); // OLED显示湿度 u8g2.drawUTF8(0, 50, "湿度:"); u8g2.drawUTF8(32, 50, h); u8g2.drawUTF8(66, 50, "%"); u8g2.sendBuffer(); // OLED数据显示 } }
实验现象:
1.引脚浮空状态
简介:信号引脚浮空时,屏幕显示未检测到温度数据
2.引脚正常接入时
简介:信号引脚正常接入时,可正常获取温湿度数据并输出至在OLED显示屏