使用ESP-8266和BMP280传感器测量大气压-ThingsPanel-1.0.0
发布日期:
这个教程的目的是,使用ESP8266+BMP280大气压强传感器,测量气压和温度,并推送到ThingsPanel物联网平台。
BMP280 是由 Bosch Sensortec 制造的一款数字大气压力传感器,它还可以测量温度。以下是它的一些主要特点和详情:
技术规格和特点
- 温度测量:范围:-40°C 到 +85°C精度:±1.0°C
- 气压测量:范围:300 hPa 到 1100 hPa精度:±1 hPa
- 低功耗:BMP280设计非常节能,适合用于运行于电池供电的设备。
- 小尺寸:其小巧的尺寸使它可以很容易地嵌入各种设备。
- I2C 和 SPI 通信:它支持 I2C 和 SPI 两种通信协议,这让它能够方便地与多种微控制器和微处理器接口。
应用
由于其能够测量环境温度和大气压力,BMP280 可用于多种应用,包括:
- 气象站:提供基本的气象参数,如气压和温度。
- 高度测量:通过气压数据来估算海拔高度。
- 室内导航和定位:可以用于一些简单的室内导航解决方案,通过监测气压变化来辅助定位。
- 健康监测设备:在一些健康监测设备中用于监测环境条件。
- 家用气象站:为家庭提供实时的环境数据。
- 无人机和飞行器:用于监测和稳定飞行高度。
最终效果
接线
要将 BMP280 传感器连接到 ESP8266,你需要使用 I2C 通信协议。下面是如何连接它们并使用 Arduino IDE 编写代码来读取数据的步骤。
接线指南
BMP280 模块与 ESP8266 NodeMCU 模块的接线通常如下:
- BMP280 VCC → ESP8266 3.3V
- BMP280 GND → ESP8266 GND
- BMP280 SDA → ESP8266 D2
- BMP280 SCL → ESP8266 D1
在ThingsPanel创建设备
创建设备时,选择BMP280插件,同时获得配置参数,并在如下代码中替换。
主要修改的包括
- WiFi信息
- MQTT信息
代码
首先,确保你已经通过 Arduino IDE 安装了 BMP280 的库。你可以使用 "Sketch" 菜单中的 "Include Library" -> "Manage Libraries" 选项来找到并安装它。
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#define SDA_PIN 4
#define SCL_PIN 5
const char* ssid = "Redmi";
const char* password = "你的WiFi密码";
const char* mqtt_server = "47.115.210.16";
const int mqtt_port = 1883;
const char* mqtt_user = "413271ee-80ff-4c8-626";
const char* mqtt_password = "f0864a4";
const char* mqtt_topic = "devices/telemetry";
Adafruit_BMP280 bmp;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
if (!bmp.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
Serial.println("BMP280 sensor found and initialized");
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected - IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("mqtt_9276ed5d-de5", mqtt_user, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
float temperature = bmp.readTemperature();
float pressure = bmp.readPressure() / 100.0F;
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(pressure);
Serial.println(" hPa");
String payload = "{\"temperature\": " + String(temperature) + ", \"pressure\": " + String(pressure) + "}";
client.publish(mqtt_topic, payload.c_str());
delay(10000);
}
在Arduino IDE刷写代码即可。