物联网课程设计:基于ESP8266+DHT11+OLED环境温湿度检测

一、总体方案设计

     本系统由传感层、网络层和应用层组成。其中传感层以ESP8266模块为核心形成控制节点,在其上装有控制室内的环境传感器;网络层使用家庭路由器组网并使用MQTT协议通信;应用层以Blinker云平台作为整个系统的服务器,由移动客户端开发的应用服务程序能跨平台展示和控制系统信息[]

       系统工作流程如下:检测对象为空气温湿度信息;传感器把在空气中获取的温湿度信息转变为电信号输出至ESP8266开发板;开发板首先将接收到的空气温湿度信息进行数据处理, 通过比特与数值的换算公式,输出可直接读取的温湿度数字和符号信息,例如“3278%”;然后开发板通过家用路由器将消息传输到MQTT服务器,MQTT服务器将数据整理后发送到移动应用端相, 移动应用端接收并实时显示开发板输出的温湿度信息并记录每个时间段的温湿度形成图表直观显示在app中使用户可以远程了解到室内的温湿度变化,同时开发板还连接了OLED,实时显示当前室内的温湿度,用于模拟开发板连接智能家电的显示屏

二、功能模块

三、接口设计

四、界面设计

五、代码

本人使用的是Ardino进行编写的

代码参考:

app界面:

Esp8266+DHT11+Binker 实现室内温湿度监测-腾讯云开发者社区-腾讯云 (tencent.com)

OLED界面:

Esp8266 DHC11 OLED制作室内温度计-腾讯云开发者社区-腾讯云 (tencent.com)

#define BLINKER_WIFI
#define BLINKER_MIOT_SENSOR   //小爱同学定义为传感器设备
#include <Blinker.h>

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

#include <DHT.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define DHTPIN 2     // Digital pin connected to the DHT sensor

#define DHTTYPE    DHT11     // DHT 11


DHT dht(DHTPIN, DHTTYPE);
char auth[] = "xxxx";  //你的密匙
char ssid[] = "xxxxxx"; //2.4Gwifi名称,可以是手机热点,不要有中文
char pswd[] = "xxxxxx";//WiFi密码

float humi_read = 0, temp_read = 0;
//新建数据类型组件
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");


//心跳包
 void heartbeat()
  {
    HUMI.print(humi_read);
    TEMP.print(temp_read);

  }

void miotQuery(int32_t queryCode)      //小爱同学语音命令反馈
{
    BLINKER_LOG("MIOT Query codes: ", queryCode);

            int humi_read_int=humi_read;     //去掉湿度浮点
            BlinkerMIOT.humi(humi_read_int);     //小爱接收湿度
            BlinkerMIOT.temp(temp_read);      //小爱接收温度
            BlinkerMIOT.print();

}
//实时曲线图组件
void dataStorage()
{
    Blinker.dataStorage("temp", temp_read);
    Blinker.dataStorage("humi", humi_read);
}




void setup() {
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  // 初始化有LED的IO
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
    
    // 初始化blinker
  Blinker.begin(auth, ssid, pswd);
  Blinker.attachHeartbeat(heartbeat);//绑定回调函数
  dht.begin();
  BlinkerMIOT.attachQuery(miotQuery);//注册小爱
   Blinker.attachDataStorage(dataStorage);//注册实时曲线

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  delay(5000);
  Blinker.run();
  //read temperature and humidity
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
  }else
    {
        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");//串口打印
        humi_read = h;
        temp_read = t;
        // clear display
        display.clearDisplay();
  
        // display temperature
        display.setTextSize(1);
        display.setCursor(0,0);
        display.print("Temperature: ");
        display.setTextSize(2);
        display.setCursor(0,17);
        display.print(t);
        display.print(" ");
        display.setTextSize(1);
        display.cp437(true);
        display.write(167);
        display.setTextSize(2);
        display.print("C");
  
  // display humidity
      display.setTextSize(1);
      display.setCursor(0, 35);
      display.print("Humidity: ");
      display.setTextSize(2);
      display.setCursor(0, 45);
      display.print(h);
      display.print(" %"); 
  
      display.display(); 
        
    }
  
  Blinker.delay(2000); //延时2s
}

六、结果 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值