wTQZF

ESP32-nano base multi-function temperature and humidity sensor

 
Overview

This is an esp32-nano base connected to a DHT11 temperature and humidity sensor and a 4P OLED display. The technical content is not high and the welding is also very simple. There is a chip resistor and a chip capacitor. Pay attention to the alignment direction when connecting.

1306 display(0x3c, 26, 27         ) ;//SDA SCL//13 15 #include
        Arduino 3.0_SSD1306_display( 0x3c , 26 , 27 ) ;//SDA SCL// 13 15 #include #include #include #define DHTPIN 25 #define DHTTYPE DHT11 DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t delayMS; int Tline[55] = {0}; int Hline[55] = {0}; int led = 22; bool ledmode = 1, count = 1; void setup() { display.setFont(ArialMT_Plain_10); for(int i = 0; i <= 45; ++i){ display.init(); display.drawString(i, 25, "BY"); display.drawString(110 - i, 25, "CY");//The opening animation can be renamed display.display(); delay(10); } Serial.begin(115200 ); dht.begin(); pinMode(led, OUTPUT); Serial.println("Modified Temperature, Humidity Serial Monitor Example"); sensor_t sensor; dht.temperature().getSensor(&sensor); dht.humidity().getSensor(&sensor); delayMS = 1000; } void loop() { // put your main code here, to run repeatedly: delay(delayMS); sensors_event_t event; dht.temperature().getEvent(&event); int warn = 0; char T[10]; float Te; dtostrf(event.temperature,3,1,T); if (isnan(event.temperature)) { Serial.println("Error reading temperature!"); } else { Te = event.temperature; } dht.humidity().getEvent(&even t); char H[10]; dtostrf(event.relative_humidity,3,1,H); if (isnan(event.relative_humidity)) { Serial.println("Error reading humidity!"); } else { float Hu = event.relative_humidity; //float Fa = 1.8 * Te + 32; //float comfort = Fa - (0.55 - 0.55 * Hu) * (Fa - 58); float comfort = (1. 1818 * Te + 18.18) * (0.88 + 0.002 * Hu) + (Te - 32) / (45 - Te) + 17.4; char COMFORT[10]; Serial.println(comfort);




















































































dtostrf(comfort,3,1,COMFORT);
int showx = 50;
display.init();

if(comfort < 0){ //舒适度评价
display.drawString(showx, 10, "ice");
warn = 2;
}
else if(comfort < 25){
display.drawString(showx, 10, "very cold");
warn = 2;
}
else if(comfort < 38){
display.drawString(showx, 10, "cold");
warn = 1;
}
else if(comfort < 50){
display.drawString(showx, 10, "a little cold");
warn = 1;
}
else if(comfort < 58){
display.drawString(showx, 10, "comfortable");
warn = 0;
}
else if(comfort < 70){
display.drawString(showx, 10, "best");
warn = 0;
}
else if(comfort < 75){
display.drawString(showx, 10, "comfortable");
warn = 0;
}
else if(comfort < 79){
display.drawString(showx, 10, "a little hot");
warn = 1;
}
else if(comfort < 84){
display.drawString(showx, 10, "hot");
warn = 1;
}
else if(comfort < 88){
display.drawString(showx, 10, "very hot");
warn = 2;
}
else{
display.drawString(showx, 10, "torridity");
warn = 2;
}

//Very uncomfortable 18
//uncomfortable 13
display.drawString(0, 0, "T: C comfort:");
display.drawString(0, 10, "H: %"); //x,y
display.drawString(12, 0, T);
display.drawString(12, 10, H);
display.drawString(90, 0, COMFORT);

//开始绘制折线

display.drawLine(5, 23, 5, 63);//T坐标轴
display.drawString(3, 20, "^");
display.drawLine(5, 63, 55, 63);
display.drawString(56, 55, "T");

display.drawLine(68, 23, 68, 63);//H坐标轴
display.drawString(66, 20, "^");
display.drawLine(68, 63, 118, 63);
display.drawString(119, 55, "H");

Te = (int)(Te);
Hu = (int)(Hu);
Serial.println(Te);
Serial.println(Hu);
for(int i = 1; i <= 50; ++i){//T折线(笨方法)
Tline[i - 1] = Tline[i];
}
Tline[50] = Te;
for(int i = 1; i < 50; ++i){
display.drawLine(i + 4, 103 - Tline[i] * 2, i + 5, 103 - Tline[i + 1] * 2);
}

for(int i = 1; i <= 50; ++i){//H折线
Hline[i - 1] = Hline[i];
}
Hline[50] = Hu;
for(int i = 1; i < 50; ++i){
display.drawLine(i + 67, 63 - (Hline[i] / 2.5), i + 68, 63 - (Hline[i + 1] / 2.5));
}

if(warn == 1){ //舒适度报警
display.drawString(120, 10, "!");
if(count){
ledmode = !ledmode;
digitalWrite(led, ledmode);
count = 0;
}
else{
count = 1;
}
}
else if(warn == 2){
display.drawString(120, 10, "!!");
ledmode = !ledmode;
digitalWrite(led, ledmode);
}
else{
ledmode = 1;
digitalWrite(led, ledmode);
}

display.display();
}
}
```
初代代码(仅有显示温湿度功能)
```
#include "SSD1306.h"

SSD1306 display(0x3c, 26, 27);//SDA SCL//13 15

//

#include
#include
#include
#define DHTPIN 25 // Pin which is connected to the DHT sensor.

#define DHTTYPE DHT11
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;

void setup() {
display.setFont(ArialMT_Plain_24);
for(int i = 0; i <= 30; ++i){
display.init();//清屏
//display.setFont(ArialMT_Plain_24);
display.drawString(i, 18, "BY");
display.drawString(100 - i, 18, "CY");
display.display();//刷新
delay(10);
}
// put your setup code here, to run once:
Serial.begin(115200);
dht.begin();
Serial.println("Modified Temperature, Humidity Serial Monitor Example");
sensor_t sensor;
dht.temperature().getSensor(&sensor);
dht.humidity().getSensor(&sensor);
//delayMS = sensor.min_delay / 1000;
delayMS = 1000;
}

void loop() {
// put your main code here, to run repeatedly:
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);

char T[10];
dtostrf(event.temperature,3,1,T);

if (isnan(event.temperature)) {
Serial.println("Error reading temperature!");
}
else {

}
dht.humidity().getEvent(&event);

char H[10];
dtostrf(event.relative_humidity,3,1,H);

if (isnan(event.relative_humidity)) {
Serial.println("Error reading humidity!");
}
else {
display.init();//清屏
//display.setFont(ArialMT_Plain_24);
display.drawString(0, 30, "H:");
display.drawString(35, 30, H);
display.drawString(95, 30, "%");
display.drawString(0, 0, "T:");
display.drawString(35, 0, T);
display.drawString(95, 0, "C");
display.display();//刷新
display.display();//刷新
}
}
```
参考设计图片
×
 
 
Search Datasheet?

Supported by EEWorld Datasheet

Forum More
Update:2025-06-21 06:55:54
  • About the problem of inaccurate reading of MAX6675
  • Recommend a small software
  • Circuit design using LED to indicate current amplitude
  • My posts 0 views, 0 replies
  • Positive and negative power supplies made by myself
  • Waveform Generator

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
community

Robot
development
community

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号