网站首页 > 基础教程 正文
在本教程中,您将学习如何使用ESP32创建Web服务器,以显示BME280传感器模块的读数。BME280传感器测量温度、湿度和压力,允许您构建一个紧凑的气象站,并通过网络服务器实时监控这些测量。
所需部件
- ESP32 DOIT DEVKIT V1板
- BME280传感器模块
- 面包板
- 跳线
为BME280传感器布线
BME280传感器可以使用I2C或SPI通信协议。为了简单起见,我们将使用I2C。按如下方式将传感器连接到ESP32:
- BME280 SCL 至 ESP32 GPIO 22
- BME280 SDA 至 ESP32 GPIO 21
- BME280 VCC到ESP32 3.3V
- BME280 GND 至 ESP32 GND
安装所需的库
要从BME280传感器读取数据,您需要在Arduino IDE中安装Adafruit_BME280和Adafruit_Sensor库。
- 打开Arduino IDE,然后转到草图>包括库>管理库。
- 搜索“Adafruit BME280”并安装库。
- 搜索“Adafruit统一传感器”并安装库。
测试BME280传感器
加载示例草图,以确保您的传感器正常工作。转到文件>示例> Adafruit BME280库> bme280test。
cpp
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
void setup() {
序列.begin(9600);
如果(!bme.begin(0x76)) {
Serial.println(“找不到有效的BME280传感器,请检查接线!”);
同时(1);
}
}
void loop() {
Serial.print("温度 = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
串行打印(“压力 = ”);
Serial.print(bme.readPressure()/ 100.0F);
Serial.println(" hPa");
Serial.print("大约高度 = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("湿度 = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
延迟(1000);
}
上传代码并以9600的保速打开串行监视器以查看传感器读数。
创建Web服务器
现在,我们将创建一个网络服务器,以表格格式显示传感器读数。
包括库和定义变量
cpp
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>
#define SEALEVELPRESSURE_HPA (1013.25)
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
WiFi服务器(80);
Adafruit_BME280 bme; // I2C
void setup() {
序列.begin(115200);
如果(!bme.begin(0x76)) {
Serial.println(“找不到有效的BME280传感器,请检查接线!”);
同时(1);
}
WiFi.begin(ssid,密码);
同时(WiFi.status()!= WL_CONNECTED) {
延迟(500);
Serial.print(".");
}
Serial.println(“WiFi已连接。”);
Serial.println("IP地址: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available();
如果(客户){
字符串 currentLine = "";
while (client.connected()) {
如果(client.available()){
char c = client.read();
如果 (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("连接:关闭");
client.println();
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
client.println("<style>body { font-family: \"Trebuchet MS\", Arial; text-align: center; }");
client.println("table { margin-left:auto; margin-right:auto; border-collapse: collapse; width:35%; }");
client.println("th, td { padding: 12px; border: 1px solid #ddd; }");
client.println("th { background-color: #0043af; color: white; }");
client.println("tr:hover { background-color: #bcbcbc; }");
client.println("</style></head>");
client.println("<body><h1>ESP32 with BME280</h1>");
client.println("<table><tr><th>测量</th><th>值</th></tr>");
client.println("<tr><td>Temp.摄氏度</td><td>" + String(bme.readTemperature()) + " *C</td></tr>");
client.println("<tr><td>Temp.华氏度</td><td>" + String(1.8 * bme.readTemperature() + 32) + " *F</td></tr>");
client.println("<tr><td>压力</td><td>" + String(bme.readPressure() / 100.0F) + " hPa</td></tr>");
client.println("<tr><td>Approx. Altitude</td><td>" + String(bme.readAltitude(SEALEVELPRESSURE_HPA)) + " m</td></tr>");
client.println("<tr><td>湿度</td><td>" + String(bme.readHumidity()) + " %</td></tr>");
client.println("</table></body></html>");
client.println();
休息;
} 否则 {
currentLine = "";
}
} 否则如果(c!= '\r') {
currentLine += c;
}
}
}
client.stop();
Serial.println(“客户端断开连接。”);
}
}
上传并运行代码
将代码上传到您的ESP32,以115200的保速打开串行监视器,并记下显示的IP地址。
访问Web服务器
打开浏览器并键入串行监视器中显示的IP地址。您应该会看到一个网页,以表格格式显示温度、湿度、压力和海拔读数。
结论
您已成功创建一个使用ESP32的Web服务器,以显示来自BME280传感器的实时天气数据。这个迷你气象站可用于各种应用,包括家庭自动化、环境监测和教育目的。随意自定义HTML和CSS,以增强网页的外观和功能。快乐的建筑!
- 上一篇: 实时数据显示--SignalR实例演示
- 下一篇: 基于Chrome内置AI的Web应用开发
猜你喜欢
- 2025-01-16 fastapi+vue3开发demo网站
- 2025-01-16 SpringBoot 接口加解密全过程详解
- 2025-01-16 el-table打印PDF预览,表头错位的解决方案
- 2025-01-16 前端必须掌握的知识,什么是盒子模型?
- 2025-01-16 基于Chrome内置AI的Web应用开发
- 2025-01-16 实时数据显示--SignalR实例演示
- 2025-01-16 原生js实现回复评论功能
- 2025-01-16 js事件机制详解
- 2025-01-16 桌面程序嵌套Web项目实践之WPF和Blazor混合应用开发
- 2025-01-16 用 Markdown Here 插件排版微信公共帐号文章
- 05-162025前端最新面试题之HTML和CSS篇
- 05-16大数据开发基础之HTML基础知识
- 05-16微软专家告诉你Win10 Edge浏览器和EdgeHTML的区别
- 05-16快速免费将网站部署到公网方法(仅支持HTML,CSS,JS)
- 05-16《从零开始学前端:HTML+CSS+JavaScript的黄金三角》
- 05-16一个简单的标准 HTML 设计参考
- 05-16css入门
- 05-16前端-干货分享:更牛逼的CSS管理方法-层(CSS Layers)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)