这个教程的目的是通过ESP8266开发板ESP-12F采集SGP30气体传感器的二氧化碳和TVOC ,并通过MQTT推送到开源物联网平台ThingsPanel。
SGP30是一款二氧化碳(CO2)和有机化合物(TVOC)气体传感器模块,它可以通过检测环境中的CO2和TVOC浓度来实现空气质量监测和控制。专为轻松集成到空气净化器、按需新风控制和物联网应用中而设计。SGP30 设计用于智能家居、家电和物联网应用,它提供两个经过校准的空气质量信号和湿度补偿功能.SGP30 可提供有关空气质量的更详尽指数。针对现实生活环境中的污染气体,该传感器具有无与伦比的可靠性,可以实现独一无的长期稳定性和低漂移.
SGP30气体传感器
采集监控效果
开发板资料:
1. 硬件连接:
首先,将SGP30模块与微控制器连接。SGP30模块使用基于I2C协议的通信方式,可以使用以下引脚连接:
-
模块的SDA引脚连接到微控制器的对应SDA引脚。
-
模块的SCL引脚连接到微控制器的对应SCL引脚。
-
模块的VIN引脚连接到微控制器的5V电源引脚。
-
模块的GND引脚连接到微控制器的地线引脚。
2.安装Arduino IDE
首先,确保你已经安装了必要的库。你可以使用Arduino IDE的库管理器来安装。你可能需要以下库:
1. Adafruit SGP30 Library
2. Adafruit Unified Sensor Library
3. Pubsubclient
4. ArduinoJson
3.在ThingsPanel平台中创建设备
- 测试地址dev.thingspanel.cn
- 测试账号 admin@thingspanel.cn
- 密码 123456
创建设备时需要选择SGP30气体传感器插件。
4.在Arduino IDE中刷写代码
需要修改Wi-Fi热点名、密码、MQTT用户名。
先点击验证再上传代码。
#include <Wire.h>
#include <Adafruit_SGP30.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
StaticJsonDocument<200> doc;
Adafruit_SGP30 sgp;
// WiFi和MQTT设置
const char* ssid = "Redmi";
const char* password = "123456789";
const char* mqtt_server = "dev.thingspanel.cn";
const char* mqtt_user = "cf8598fa-04dc-2514-4066-bad0ec5227xx";
const char* mqtt_password = ""; // 密码为空
const char* mqtt_topic = "device/attributes";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
// 连接WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("连接到WiFi...");
}
Serial.println("已连接到WiFi");
client.setServer(mqtt_server, 1883);
// 开始I2C通信
Wire.begin(2, 14); // SDA, SCL
// 检查I2C设备
Serial.println("扫描I2C设备...");
byte error, address;
int nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("找到I2C设备地址: ");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
}
if (nDevices == 0) {
Serial.println("没有找到I2C设备。");
} else {
Serial.println("完成。");
}
if (!sgp.begin()){
Serial.println("传感器不可用!");
while (1);
}
Serial.println("SGP30传感器已就绪!");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
if (!sgp.IAQmeasure()) {
Serial.println("测量失败!");
return;
}
Serial.print("eCO2: ");
Serial.print(sgp.eCO2);
Serial.print(" ppm\t");
Serial.print("TVOC: ");
Serial.print(sgp.TVOC);
Serial.println(" ppb");
// 使用ArduinoJson生成MQTT消息
StaticJsonDocument<100> doc;
doc["eco2"] = sgp.eCO2;
doc["tvoc"] = sgp.TVOC;
char payload[100];
serializeJson(doc, payload);
client.publish(mqtt_topic, payload);
delay(1000); // 1秒
}
void reconnect() {
while (!client.connected()) {
Serial.print("尝试MQTT连接...");
if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
Serial.println("已连接");
} else {
Serial.print("失败, rc=");
Serial.print(client.state());
Serial.println(" 5秒后再试");
delay(5000);
}
}
}
5.完工
刷写代码完成后,ThingsPanel平台即可收到数据,如开头的图所示。
——————————
说明:TVOC是“Total Volatile Organic Compounds”的英文缩写,意思是总挥发性有机化合物, TVOC是三种影响室内空气品质污染中影响较为严重的一种。TVOC是指室温下饱和蒸气压超过了133.32Pa的有机物,其沸点在50℃至250℃,在常温下可以蒸发的形式存在于空气中,它的毒性、刺激性、致癌性和特殊的气味性,会影响皮肤和黏膜,对人体产生急性损害。世界卫生组织(WHO)、美国国家科学院/国家研究理事会(NAS/NRC)等机构一直强调TVOC是一类重要的空气污染物。美国环境署(EPA)对VOC的定义是:除了一氧化碳,二氧化碳,碳酸,金属碳化物,碳酸盐以及碳酸铵外,任何参与大气中光化学反应的含碳化合物。