风筝
发表于: 2022-11-5 11:34:06 | 显示全部楼层

不要让智能手机的天气应用程序或商业气象站(可以为您提供基于英里的数据的数据)破坏您的户外计划。通过这个物联网项目,您可以成为自己的天气预报员!


该项目使用ESP8266 NODEMCU作为控制设备,可轻松连接到现有的WiFi网络并创建网页服务器。当任何连接的设备访问该网页服务器时,ESP8266将读取BME280的温度、湿度、气压和高度,并将其发送到网页浏览器。


温度、湿度和压力传感器BME280

首先,让我们快速看一下BME280模块。BME280是Bosch公司生产的下一代数字温度、湿度和压力传感器。它是BMP180、BMP085或BMP183之类的传感器的继任者。

BME280-Temperature-Humidity-Pressure-Altitude-Sensor-Specifications.jpg


BME280模块的工作电压从3.3V到5V,非常适合连接到ESP8266。该模块具有简单的两线I2C接口,用于通信。BME280模块的默认I2C地址为0x76。


BME280传感器与ESP8266 NodeMCU的硬件连接

连接非常简单。首先将VIN引脚连接到ESP8266 NodeMCU上的3.3V输出,然后将GND连接到地。


接下来,将SCL引脚连接到ESP8266上的I2C时钟D1引脚,然后将SDA引脚连接到ESP8266上的I2C数据D2引脚。下图显示了如何连接所有组件。

Fritzing-Wiring-ESP8266-BME280-Temperature-Humidity-Pressure-Sensor.jpg


安装BME280库

与BME280模块进行通信需要一堆工作。幸运的是,Adafruit BME280库被编写为隐藏所有复杂性,以便我们可以发出简单的命令来读取温度、相对湿度和气压数据。


要安装库导航到Arduino IDE > Sketch > Include Library > Manage Libraries… 等待Library Manager下载库索引并更新已安装的库列表。输入BME280筛选搜索结果。查找Adafruit提供的Adafruit BME280库。单击该条目,然后选择Install。

Installing-BME280-Library-In-Arduino-IDE.jpg


BME280传感器库使用Adafruit传感器支持后端。因此,搜索库管理器以查看Adafruit Unified Sensor并安装。

Adafruit-Unified-Sensor-Library-Installation.jpg


在ESP8266网页服务器上显示温度、湿度、压力和高度

现在,我们将ESP8266配置为站点(STA)模式,并创建网页服务器以将网页提供给现有网络下的任何连接客户端。


在上传草图之前,您需要进行一个更改以使其适合您。您需要使用网络凭据修改以下两个变量,以便ESP8266可以与现有网络建立连接。

  1. const char* ssid = "YourNetworkName";  // Enter SSID here
  2. const char* password = "YourPassword";  //Enter Password here
复制代码

完成后,上传该草图至ESP8266。

  1. #include <ESP8266WebServer.h>
  2. #include <Wire.h>
  3. #include <Adafruit_Sensor.h>
  4. #include <Adafruit_BME280.h>

  5. #define SEALEVELPRESSURE_HPA (1013.25)

  6. Adafruit_BME280 bme;

  7. float temperature, humidity, pressure, altitude;

  8. /*Put your SSID & Password*/
  9. const char* ssid = "YourNetworkName";  // Enter SSID here
  10. const char* password = "YourPassword";  //Enter Password here

  11. ESP8266WebServer server(80);              

  12. void setup() {
  13.   Serial.begin(115200);
  14.   delay(100);
  15.   
  16.   bme.begin(0x76);   

  17.   Serial.println("Connecting to ");
  18.   Serial.println(ssid);

  19.   //connect to your local wi-fi network
  20.   WiFi.begin(ssid, password);

  21.   //check wi-fi is connected to wi-fi network
  22.   while (WiFi.status() != WL_CONNECTED) {
  23.   delay(1000);
  24.   Serial.print(".");
  25.   }
  26.   Serial.println("");
  27.   Serial.println("WiFi connected..!");
  28.   Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  29.   server.on("/", handle_OnConnect);
  30.   server.onNotFound(handle_NotFound);

  31.   server.begin();
  32.   Serial.println("HTTP server started");

  33. }
  34. void loop() {
  35.   server.handleClient();
  36. }

  37. void handle_OnConnect() {
  38.   temperature = bme.readTemperature();
  39.   humidity = bme.readHumidity();
  40.   pressure = bme.readPressure() / 100.0F;
  41.   altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  42.   server.send(200, "text/html", SendHTML(temperature,humidity,pressure,altitude));
  43. }

  44. void handle_NotFound(){
  45.   server.send(404, "text/plain", "Not found");
  46. }

  47. String SendHTML(float temperature,float humidity,float pressure,float altitude){
  48.   String ptr = "<!DOCTYPE html> <html>\n";
  49.   ptr +="<head><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">\n";
  50.   ptr +="<title>ESP8266 Weather Station</title>\n";
  51.   ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  52.   ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  53.   ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  54.   ptr +="</style>\n";
  55.   ptr +="</head>\n";
  56.   ptr +="<body>\n";
  57.   ptr +="<div id="webpage">\n";
  58.   ptr +="<h1>ESP8266 Weather Station</h1>\n";
  59.   ptr +="<p>Temperature: ";
  60.   ptr +=temperature;
  61.   ptr +="°C</p>";
  62.   ptr +="<p>Humidity: ";
  63.   ptr +=humidity;
  64.   ptr +="%</p>";
  65.   ptr +="<p>Pressure: ";
  66.   ptr +=pressure;
  67.   ptr +="hPa</p>";
  68.   ptr +="<p>Altitude: ";
  69.   ptr +=altitude;
  70.   ptr +="m</p>";
  71.   ptr +="</div>\n";
  72.   ptr +="</body>\n";
  73.   ptr +="</html>\n";
  74.   return ptr;
  75. }
复制代码

访问网页服务器

上传草图后,打开串口显示器。然后按NodeMCU上的复位按钮。 如果一切正常,它将输出从路由器获得的动态IP地址,并显示HTTP server started消息。

ESP8266-Station-Mode-Web-Server-IP-Address-On-Serial-Monitor.jpg


接下来,加载一个浏览器,并将其指向串口显示器上显示的IP地址。 ESP8266应提供一个网页,显示BME280的温度、湿度、压力和高度。

BME280-Readings-on-ESP8266-Web-Server.jpg

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 54 | 回复: 107



手机版|

GMT+8, 2024-4-19 23:35 , Processed in 0.241227 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表