基于ESP8266的温湿度、可燃气监测系统

1.硬件准备

  • esp8266开发板
  • DHT11温湿度传感器
  • MQ气体传感器(本例使用MQ-5,推荐使用MQ-2)
  • 无源蜂鸣器
  • OLED显示屏
  • 面包板
  • 若干杜邦线

2.线路连接

DHT11 温湿度传感器
传感器开发板
VCC3.3V
GNDGND
OUTD4
MQ-5液化气传感器模块
传感器开发板
AOA0
DOD5
GNDGND
VCC3.3V
无源蜂鸣器

注:无源蜂鸣器翻转过来有正负极

传感器开发板
+D6
HXVCC
OLED显示屏
显示屏开发板
GNDGND
VDDVCC
SCK/SCLD1
SDAD2
实物连接好的图片

在这里插入图片描述

3.代码实现

#include <dht11.h>   // 引入DHT11库,温湿度传感器
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> //需要自行下载, OLED显示

#define DHT11PIN 2   // 温湿度传感器引脚,2对应D4
#define Sensor_DO 14
#define MQ5PIN A0

/*************定义类型****************/
dht11 DHT11;
Adafruit_SSD1306 oled(128, 64, &Wire,-1);   //实例化

/*************定义全局变量****************/
float sensorValue;   // MQ
float ad_co_f = 0;
int pinBuzzer = 12;
float temp = 0;  // 温度
float hum = 0;   // 湿度


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  OLED_Init();

  // MQ-5初始化
  pinMode(Sensor_DO, INPUT);
  // 蜂鸣器初始化
  pinMode(pinBuzzer, OUTPUT);
  // 等待
  delay(5000);

}

void loop() {
  // put your main code here, to run repeatedly:
  // 获取温湿度
  Serial.println("获取温湿度");
  DHT11.read(DHT11PIN);  // 更新传感器上的数据
  temp = getTemperature();
  hum = getHumidity();
  Serial.print("当前湿度(%): ");
  Serial.println(hum, 2);
  Serial.print("当前温度(℃):");
  Serial.println(temp, 2);
  // 获取MQ-5
  Serial.println("获取MQ-5数据");
  sensorValue = getSensorValue();
  ad_co_f = sensorValue * (3.3/1024);  
  // 显示到OLED
  Serial.println("显示到OLED屏");
  oled.clearDisplay();  // 清屏
  OLED_Show_Temperature(temp);
  OLED_Show_Humidity(hum);
  OLED_Show_MQ5(ad_co_f);
  oled.display();
  // 判断条件
  if(digitalRead(Sensor_DO) == LOW)
  {
    // 蜂鸣器响
    Serial.println("蜂鸣器响了");
    activateVoice();
  } else {
    // 蜂鸣器停
    Serial.println("蜂鸣器停了");
    deactivateVoice();
  }
  // 等待
  delay(1000);
}

// OLED显示函数
void OLED_Init()
{
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3c);
  oled.setTextColor(WHITE);
  oled.clearDisplay();   // 清屏
}

void OLED_Show_Temperature(float temp)
{
  // 显示温度
  oled.setTextSize(1.9);
  oled.setCursor(5, 1);
  oled.print("Temp:  ");
  oled.print(temp);
  oled.println("C");
}

void OLED_Show_Humidity(float hum)
{
  // 显示湿度
  oled.setTextSize(1.9);
  oled.setCursor(5, 12);
  oled.print("Humidity:");
  oled.print(hum);
  oled.println("%");
}

void OLED_Show_MQ5(float alarm)
{
  oled.setTextSize(1.9);
  oled.setCursor(5, 24);
  oled.print("CO alarm:  ");
  oled.println(alarm);
}

// DHT11温湿度传感器
double Fahrenheit(double celsius)
{
  return 1.8 * celsius + 32; //摄氏温度度转化为华氏温度
}
 
double Kelvin(double celsius)
{
  return celsius + 273.15; //摄氏温度转化为开氏温度
}

float getHumidity()
{
  return (float)DHT11.humidity;
}

float getTemperature()
{
  return (float)DHT11.temperature;
}

// 蜂鸣器函数
void activateVoice()
{
  tone(pinBuzzer, 300, 500);
}
void deactivateVoice()
{
  noTone(pinBuzzer);
}

// 获取MQ-5传感器参数
float getSensorValue()
{
  return analogRead(MQ5PIN);
}
效果

在这里插入图片描述

4.参考资料

  1. MQ2气体/烟雾传感器如何工作及其与Arduino接口,https://zhuanlan.zhihu.com/p/340072270
  2. ESP8266如此简单-入门之驱动蜂鸣器,https://www.bilibili.com/video/BV1zv4y137YN
  3. Arduino esp8266接OLED亮屏,https://blog.csdn.net/dddexter/article/details/116461972
  4. 基于arduino的oled显示屏的使用,https://blog.csdn.net/jiayan0428/article/details/105254403
  5. ESP8266驱动OLED显示屏(附源码),https://www.bilibili.com/video/BV1QM4y1W7kN
  6. 基于ESP8266芯片的实时温湿度传感器,https://blog.csdn.net/m0_57035925/article/details/121971844
  7. 基于esp8266、dht11、MQ2、oled的CO可燃气检测系统设计,https://www.bilibili.com/video/BV1AT4y1a7i4
  8. ESP8266传感器开发参考资料(太极创客),http://www.taichi-maker.com/homepage/iot-development/iot-dev-reference/esp8266-iot-dev-ref/esp8266-sensor-ref/
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值