esp8266使用dht22实时获取温湿度+oled显示(接入blinker)

一、前言

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

二、过程

首先在Arduino中安装OLED库(在搜索框中输入SSD1306,然后再输入GFX)

然后安装DHT传感器库(在搜索框中输入DHT,建议使用1.2.3版本兼容性好一点)

如果你安装的速度很慢可以参考这个:Arduino IDE中添加ESP8266开发板管理器地址

然后安装blinker Arduino库,把下面的提供的blinker的库解压到Arduino>libraries文件夹中,然后重启Arduino,库就安装好了。

blinker Arduino库

蓝奏云:https://wws.lanzous.com/i9buTnjxlyf
密码:aetk

三、接线

在这里插入图片描述

四、配置Blinker

在手机上下载好点灯科技后

在这里插入图片描述

在这里插入图片描述

点进去之后,选择网络接入,通信商选择阿里云,你就会获得一个key。

然后点我们新建的页面设置(右上角的…)中进行界面配置,把下面的内容全部复制到里面,然后点击更新配置。

{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨light¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨deb¨¨mode¨É¨bg¨É¨cols¨Ñ¨rows¨Í¨key¨¨debug¨´x´É´y´Ò¨speech¨|÷¨lstyle¨Ê}{ßA¨num¨¨t0¨¨湿度¨¨ico¨¨iconfont icon-drop¨¨clr¨¨#389BEE¨¨min¨É¨max¨¢1c¨uni¨´%´ßDÉßEËßFËßG¨humi¨´x´Ë´y´ËßI|÷ßJÉ}{ßAßKßL¨温度¨ßN¨iconfont icon-sun¨ßPßQßRÉßSº0ßT´℃´ßDÉßEËßFËßG¨temp¨´x´É´y´ËßI|÷ßJÉ}{ßA¨tex¨ßL¨文本1¨¨t1¨¨文本2¨ßDÉßN¨fal fa-clock¨ßEÍßFÊßG¨tex-s¨´x´É´y´ÍßI|÷ßJÊßP¨#595959¨}{ßA¨cha¨ßDɨsty¨¨line¨ßP¨#076EEF¨¨sty1¨ßh¨clr1¨ßi¨sty2¨ßh¨clr2¨ßQßEÑßFÍßG¨cha-temp¨´x´É´y´ÎßI|÷ßJÊßLßV¨key1¨¨cha-humi¨ßaßM}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßs¨source_zh¨¨开关状态¨¨state¨|ßußw÷¨state_zh¨|´打开´´关闭´÷}÷}

五、输入程序

代码如下

#define BLINKER_WIFI
#include <Blinker.h>

char auth[] = "点灯科技里的key";//在设备配置界面可以找到,密钥
char ssid[] = "wifi名称";
char pswd[] = "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 14
#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(1);
  display.setCursor(0,0);
  display.print("Temp: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(t);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  // 显示湿度
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humi: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(h);
  display.print(" %"); 
  //刷新显示
   display.display(); 
 }
  Blinker.delay(60000);
}   

然后你把app获得的key,wifi名称和wifi密码修改,就可以了。

然后点击顶部的工具——开发板——改为NdeMCU1.0,然后点击顶部工具——端口——改为你现在目前的8266的端口,等上面操作完成后,点击上传,等待上传成功就可以了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值