使用ESP-8266和BMP280传感器测量大气压-ThingsPanel

2023-09-11

这个教程的目的是,使用ESP8266+BMP280大气压强传感器,测量气压和温度,并推送到ThingsPanel物联网平台。

BMP280 是由 Bosch Sensortec 制造的一款数字大气压力传感器,它还可以测量温度。以下是它的一些主要特点和详情:

技术规格和特点

  1. 温度测量:范围:-40°C 到 +85°C精度:±1.0°C
  2. 气压测量:范围:300 hPa 到 1100 hPa精度:±1 hPa
  3. 低功耗:BMP280设计非常节能,适合用于运行于电池供电的设备。
  4. 小尺寸:其小巧的尺寸使它可以很容易地嵌入各种设备。
  5. 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 = "123456789";
const char* mqtt_server = "dev.thingspanel.cn";
const int mqtt_port = 1883;
const char* mqtt_user = "bcda7c1d-de21-414a-841f-bb8d5285e0b9";
const char* mqtt_password = "";
const char* mqtt_topic = "device/attributes";

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("bcda7c1d-de21-414a-841f-bb8d5285e0b9", 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(1000);
}


在Arduino IDE刷写代码即可。

Github
Gitee
微信交流群
QQ交流群
商务咨询
北京极益科技有限公司 版权所有 ICP:京ICP备15045763号-12