基于ESP8266+DHT11+7脚OLED屏实时监测温湿度(Arduino)

一、前言

  使用esp8266、DHT11、0.96寸7脚oled和点灯科技平台,来制作一个当前室内温湿度+显示到oled上+上传到物联网平台使手机可以远程看到当前温湿度。

二、需要安装的库

安装ESP8266开发板的库

再在Arduino中安装OLED库(分别在搜索框中输入SSD1306(Adafruit SSD1306 by Adafruit库),然后再输入GFX(Adafruit GFX Library by Adafruit))

然后安装DHT传感器库(在搜索框中输入DHT(DHT sensor library by Adafruit库),我用的是1.4.4版本的)

最后装blinker Arduino库(blinker by i3water库),然后重启Arduino,库就安装好了。

三、接线

OLED屏接线:

4脚:3.3V --- VCC

G (GND) --- GND

D1(GPIO5)--- SCL

D2(GPIO4)--- SDA

 7脚spi OLED屏幕改造成IIC屏幕:将模块背面的电阻R3换到R1位置,此时将模块切换为IIC接口;电阻R8可以用0欧姆电阻或是用焊锡短接电阻两端

 

 7脚:CS---GND

DC---GND(在 IIC 通信中 DC 的高低电平是用来选择 IIC 通信地址的;当 DC 接地时 IIC从机地址为:0x78,当 DC 接高电平时 IIC 地址为 0x7A;测试程序中所用的为 0x78; 通常直接将 DC 接地)

RES---RES

D0 为 IIC 时钟线或者SCK为时钟线,

D1 为 IIC 数据线或者SDA为数据线;

GND---GND

VDD---VDD

DHT11接线:

VCC ---- 3V3(+)

GND --- -GND(-)

输出---- D5

四、下载配置Blinker 

点我们新建的页面设置(右上角的…)中进行界面配置,把下面的内容全部复制到里面,然后点击更新配置:{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/bg/f3.jpg¨¨isFull¨»}}¨dashboard¨|{¨type¨¨num¨¨t0¨¨实时温度¨¨ico¨¨fad fa-thermometer-three-quarters¨¨clr¨¨#EA0909¨¨min¨É¨max¨¢1c¨uni¨´℃´¨bg¨É¨cols¨Í¨rows¨Í¨key¨¨temp¨´x´É´y´Ë¨speech¨|÷¨lstyle¨Í}{ßCßDßE¨实时湿度¨ßG¨fad fa-humidity¨ßI¨#389BEE¨ßKÉßLº0ßM´%´ßNÉßOÍßPÍßQ¨humi¨´x´Í´y´ËßS|÷ßTÍ}{ßC¨cha¨ßNɨsty¨¨line¨ßI¨#076EEF¨¨sty1¨ßa¨clr1¨ßJ¨sty2¨ßa¨clr2¨ßWßOÑßPÍßQ´´´x´É´y´¤AßS|÷¨key0¨¨cha-humi¨ßE¨湿度¨ßTʨkey1¨´´¨t1¨´´}{ßC¨tex¨ßE´´ßk¨运行时间¨¨size¨¤EßNÉßG¨fad fa-signal¨ßOÍßPËßQ¨tex-s¨´x´Í´y´ÉßS|÷ßIßbßTÌ}{ßCßYßNÉßZßaßIßJßcßaßdßWßeßaßfßWßOÑßPÍßQ´´´x´É´y´ÏßS|÷ßTÊßg¨cha-temp¨ßE¨温度¨}{ßC¨deb¨¨mode¨ÉßNÉßOÑßPÌßQ¨debug¨´x´É´y´¤E}{ßCßlßE¨ESP8266温湿度计¨ßk¨DHT11+SSD1306¨ßn¨17¨ßNÉßG´´ßOÍßPËßQ¨state¨´x´É´y´ÉßS|÷ßTÌ}÷¨actions¨|÷¨triggers¨|÷´rt´|÷}

五、全部代码

只需要修改密钥、WIFI名称、WIFI密码:

char auth[] = "图2一步骤的密钥";     //点灯科技密钥
char ssid[] = "ssid";        //连接的WIFI名称
char pswd[] = "password";      //连接WIFI的密码

全部代码: 

#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#define BLINKER_MIOT_SENSOR
#include <Blinker.h>
//#include <ESP8266WiFiMulti.h>

char auth[] = "图2一步骤的密钥";     //点灯科技密钥
char ssid[] = "ssid";        //连接的WIFI名称
char pswd[] = "password";      //连接WIFI的密码

BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
BlinkerText TEXT1("tex-s"); 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

#define DHTPIN 16
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

uint32_t read_time = 0;

float humi_read, temp_read;


void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);

    Blinker.vibrate();   //让手机震动
    
    uint32_t BlinkerTime = millis();
    
    Blinker.print("millis", BlinkerTime);
    
}

void dataStorage()
{
    Blinker.dataStorage("cha-temp", temp_read);
    Blinker.dataStorage("cha-humi", humi_read);
}
 
String rts()//计算运行时间
    {
    int rt =Blinker.runTime();
    int r,e,f,s;
    String fh;
    Blinker.delay(100);
    if(rt >= 86400)//天数
    {r = rt / 86400;
     e = rt / 3600 - r*24;
     f = rt / 60 - r*1440 - e*60;
     s = rt - r*86400 - e*3600 - f*60;}
    else if(rt >= 3600)
    {r = 0;
     e = rt / 3600;
     f = rt / 60 - e*60;
     s = rt - e*3600 - f*60;}
    else
    {r = 0;
     e = 0;
     f = rt / 60;
     s = rt - f*60;}
     
    //BLINKER_LOG(r," ",e," ",f," ",s);//输出数据测试
    
    if(f==0 & e==0 & r==0)
    {fh = String("")+ s +"秒";}
    else if(r == 0 & e == 0 )
    {fh = String("")+ f + "分" + s +"秒";}
    else if(r == 0)
    {fh = String("")+ e + "时" + f + "分" + s +"秒"; }
    else
    {fh = String("")+ r + "天" + e + "时" + f + "分" + s +"秒";}

    return(fh);
    }

void heartbeat()//心跳
{ 
    HUMI.print(humi_read);
    TEMP.print(temp_read);
    TEXT1.print(rts());
}

void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    Blinker.attachHeartbeat(heartbeat);//附加心跳
    Blinker.attachDataStorage(dataStorage);//附加数据存储    
    dht.begin();
    
     if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  Blinker.delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop()
{
     Blinker.run();
     float h = dht.readHumidity();
      float t = dht.readTemperature();
    if (isnan(h) || isnan(t))
    {
        BLINKER_LOG("Failed to read from DHT sensor!");
    }
    else
    {
       // BLINKER_LOG("Humidity: ", h, " %");
       //BLINKER_LOG("Temperature: ", t, " *C");
        humi_read = h;
        temp_read = t;
        float hic = dht.computeHeatIndex(t, h, false);

  // 显示
  display.clearDisplay();
  // 显示温度
  display.setTextSize(3);
  display.setCursor(0,5);
  display.print(t);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  // 显示湿度
  display.setTextSize(3);
  display.setCursor(0,40);
  display.print(h);
  display.print(" ");
  display.setTextSize(2);
  display.print("%"); 
  //刷新显示
   display.display(); 
 }
  Blinker.delay(60000);
}   

六、效果显示 

  • 3
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
1. 硬件准备: - ESP8266开发板 - DHT11温湿度传感器 - 蜂鸣器 - 杜邦线 - 面包板 2. 软件准备: - Arduino IDE - ESP8266库 - DHT库 3. 接线: 将DHT11的VCC接到ESP8266的3.3V,将DHT11的GND接到ESP8266的GND,将DHT11的DATA接到ESP8266的D1口,将蜂鸣器的正极接到ESP8266的D2口,将蜂鸣器的负极接到ESP8266的GND。 4. 代码编写: ``` #include <ESP8266WiFi.h> #include <DHT.h> #define DHTPIN D1 // DHT11 DATA引连接ESP8266的D1口 #define DHTTYPE DHT11 // DHT11传感器类型 #define buzzerPin D2 // 蜂鸣器连接ESP8266的D2口 const char* ssid = "你的WiFi名称"; // WiFi名称 const char* password = "你的WiFi密码"; // WiFi密码 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); digitalWrite(buzzerPin, HIGH); delay(1000); digitalWrite(buzzerPin, LOW); delay(1000); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { delay(2000); float h = dht.readHumidity(); // 读取湿度 float t = dht.readTemperature(); // 读取温度 if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.print("Humidity: "); Serial.print(h); Serial.print("% Temperature: "); Serial.print(t); Serial.println("°C"); if (t > 28) { // 温度超过28°C时触发报警 digitalWrite(buzzerPin, HIGH); delay(1000); digitalWrite(buzzerPin, LOW); delay(1000); } } ``` 5. 上传代码: 将ESP8266通过USB连接到计算机,打开Arduino IDE,选择正确的开发板和端口,将代码上传到ESP8266中。 6. 测试: 将DHT11放置在需要检测的环境中,开启串口监视器,可以看到ESP8266每隔2秒钟会读取一次温湿度数据并打印到串口中,当温度超过28°C时,蜂鸣器会响起一次,表示触发了报警。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值