基于ESP8266,DHT11,GP2Y1010AU0F搭建的超微型气象站(Arduino IDE)
小学期arduino结课答辩作业
————基于ESP8266,DHT11,GP2Y1010AU0F搭建的超微型气象站
#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 currentTime = timeClient.getFormattedTime();
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 = "未知";
}
// 构建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);
}