ESP8266-BH1750FVI数字光照传感器采集光照推送ThingsPanel

发布日期:

这个教程的目的是通过ESP8266开发板采集BH1750FVI数字光强传感器的数据,并在开源物联网平台实现数据监测。

设备介绍

  1. ESP8266:类型: 它是一个低成本的Wi-Fi微控制器模块。特点:嵌入式的TCP/IP协议栈。低功耗, 在睡眠模式下只需要微安培的电流。GPIO(通用输入输出)引脚,用于与其他硬件设备通信。可以用作Wi-Fi接入点或Wi-Fi客户端。被广泛地用于IoT项目,如智能家居设备。开发环境:使用Arduino IDE,NodeMCU或其他工具进行编程。支持多种编程语言,如Lua、MicroPython、C++等。
  2. BH1750FVI:类型: 是一款数字光强传感器。特点:可以直接通过I²C(互补型数字接口)与微控制器通信。能测量的范围为1 - 65535 lx(勒克斯,光照强度的单位)。高精度且稳定的性能。通常用于光强测量,如天气站、手机屏幕亮度调节等。使用:可以很容易地与Arduino、ESP8266、Raspberry Pi等平台集成。多数开发平台都有现成的库支持BH1750FVI,这使得开发变得非常简单。

总的来说,这两个模块在IoT(物联网)项目中非常受欢迎,因为它们都是低成本、高效能的硬件,能够轻松地与其他硬件和在线服务集成。


接线已经接好

在ThingsPanel中的监测效果

接线

具体对照可看文首图片

  • BH1750FVI的SCL接入到ESP12-F的P2的i014
  • BH1750FVI的DAT接入到ESP12-F的P1的i02
  • BH1750FVI的ADDR接入到ESP12-F的P1的GND


刷写代码

如下代码中的配置参数中,部分需要修改,已经备注。其中MQTT连接部分,要在ThingsPanel平台创建设备。创建设备后,在参数编辑这里会获得连接信息。

// WiFi设置

const char* ssid = "Redmi"; 需要改成你自己的

const char* password = "123456789";需要改成你自己的

// MQTT服务器设置

const char* mqttServer = "dev.thingspanel.cn";

const int mqttPort = 1883;

const char* mqttUser = "e7dbb954-6693-4a1c-8b06-3889a69d8d27";需要改成你自己的

const char* mqttPassword = "";  // 密码为空

const char* mqtt_topic = "device/attributes";  // MQTT主题


#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <BH1750.h>

// WiFi设置
const char* ssid = "Redmi";
const char* password = "123456789";

// MQTT服务器设置
const char* mqttServer = "dev.thingspanel.cn";
const int mqttPort = 1883;
const char* mqttUser = "e7dbb954-6693-4a1c-8b06-3889a69d8d27";
const char* mqttPassword = "";  // 密码为空
const char* mqtt_topic = "device/attributes";  // MQTT主题

// BH1750FVI设置
BH1750 lightMeter;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);

  // 初始化I2C
  Wire.begin(2, 14);  // SDA (i02) is on GPIO2, SCL (i014) is on GPIO14
  lightMeter.begin();

  // 连接WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  // 设置MQTT服务器并连接
  client.setServer(mqttServer, mqttPort);
  reconnectMQTT();
}

void loop() {
  // 检查WiFi和MQTT连接状态
  if (WiFi.status() != WL_CONNECTED) {
    reconnectWiFi();
  }
  if (!client.connected()) {
    reconnectMQTT();
  }
  client.loop();  // 处理MQTT的incoming messages

  float lux = lightMeter.readLightLevel();
  Serial.println("Light intensity: " + String(lux) + " lx");
  sendMQTTMessage(lux);

  delay(1000); // 检查间隔,可以根据需要调整
}

void reconnectWiFi() {
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("Reconnecting to WiFi...");
    WiFi.begin(ssid, password);
    delay(5000);
  }
  Serial.println("Connected to WiFi");
}

void reconnectMQTT() {
  while (!client.connected()) {
    Serial.println("Reconnecting to MQTT...");
    if (client.connect("ESP8266Client", mqttUser, mqttPassword)) {
      Serial.println("Connected to MQTT");
    } else {
      delay(5000);
    }
  }
}

void sendMQTTMessage(float luxValue) {
  StaticJsonDocument<100> doc;
  doc["LightIntensity"] = luxValue;

  char jsonBuffer[100];
  serializeJson(doc, jsonBuffer);

  // 打印发送的JSON报文到串口监视器
  Serial.print("Sending MQTT message: ");
  Serial.println(jsonBuffer);

  client.publish(mqtt_topic, jsonBuffer);
}

完工

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