基于ESP8266,DHT11,GP2Y1010AU0F搭建的超微型气象站

发布时间 2023-07-07 11:23:27作者: lusicaのblog
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#include <WiFiUdp.h>
#include <NTPClient.h>

// NTP服务器设置
const char* ntpServer = "cn.pool.ntp.org";
const int timeZone = 8;  // 北京时间为GMT+8

// 创建UDP对象
WiFiUDP udp;

// 创建NTP客户端对象
NTPClient timeClient(udp, ntpServer, timeZone * 3600);

// 定义DHT11传感器引脚
const int DHTPIN = 5; // 使用GPIO5引脚(对应Arduino IDE中的D1)

// 定义DHT传感器类型
#define DHTTYPE DHT11

// Wi-Fi网络信息
const char* ssid = "DOUS";
const char* password = "20040908";

// 创建HTTP服务器
ESP8266WebServer server(80);

// 创建DHT对象
DHT dht(DHTPIN, DHTTYPE);

// 定义粉尘传感器引脚
const int DUST_SENSOR_PIN = A0;

void setup() {
  // 初始化串口
  Serial.begin(115200);

  // 连接到Wi-Fi网络
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // 初始化DHT传感器
  dht.begin();

  // 设置HTTP请求处理程序
  server.on("/", handleRoot);

  // 启动HTTP服务器
  server.begin();
  timeClient.begin();
  timeClient.update();
}

void loop() {
  // 处理HTTP请求
  server.handleClient();

  // 更新NTP客户端时间
  timeClient.update();
}

void handleRoot() {
  // 读取温度和湿度数据
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // 读取空气质量数据(通过模拟输入引脚)
  int dustValue = analogRead(DUST_SENSOR_PIN);
  // 将空气质量值映射到范围1-5(对应很差、差、中、好、很好)
int airQualityLevel = map(dustValue, 0, 1023, 1, 5);
String airQuality;

// 根据映射后的梯度级别设置对应的描述
switch (airQualityLevel) {
  case 1:
    airQuality = "很好";
    break;
  case 2:
    airQuality = "";
    break;
  case 3:
    airQuality = "";
    break;
  case 4:
    airQuality = "";
    break;
  case 5:
    airQuality = "很差";
    break;
  default:
    airQuality = "未知";
}


  String currentTime = timeClient.getFormattedTime();

  // 构建HTML响应
  String htmlResponse = "<html><body>";
  htmlResponse += "<center><h1>我是一个使用DHT11,ESP8266和GP2Y1010AU0F搭建的超微型气象站</h1>";
  htmlResponse += "<h2>当前时间:2023年7月7日" + currentTime + "</h2>";
  htmlResponse += "<h2>温度: " + String(temperature) + " °C</h2>";
  htmlResponse += "<h2>湿度: " + String(humidity) + " %</h2>";
  htmlResponse += "<h2>空气质量: " + airQuality + "</h2></center>";
  htmlResponse += "</body></html>";

  // 发送HTML响应给客户端
  server.send(200, "text/html; charset=utf-8", htmlResponse);
}