ESP8266采集MQ-2可燃性气体传感器数据推送ThingsPanel1.0.0
发布日期:
这个教程的目的通过ESP8266采集MQ-2可燃气体的换干起,实现对可燃气体、丙烷、烟雾的监测。
MQ-2 气体传感器(Flying-Fish MH MQ Sensor)
MQ-2 气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处 环境中存在可燃气体时,传感器的电导率随空气中 可燃气体浓度的增加而增大。使用简单的电路即可 将电导率的变化转换为与该气体浓度相对应的输出信号。
MQ-2 气体传感器对丙烷、烟雾的灵敏度高,对天然气和其它可燃蒸气的检测也很理想。这种传感 器可检测多种可燃性气体,是一款适合多种应用的 低成本传感器。
传感器特点
本品在较宽的浓度范围内对丙烷、烟雾等有良好的灵敏度,具有长寿命、低成本、驱动电路简单等优点。
主要应用
广泛适用于家庭用气体泄漏报警器、工业用可燃气体报警器以及便携式气体检测仪器。
接线方式:
MQ-2.VCC——ESP8266-5V
MQ-2.GND——ESP8266-GND
MQ-2.A0——ESP8266-ADC
MQ-2.D0——ESP8266-GPIO16
配置:
源代码
完整源代码如下:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// WiFi和MQTT参数
const char* ssid = "Redmi";
const char* password = "你的WiFi密码";
const char* mqtt_server = "47.115.210.16";
const char* mqtt_user = "aa11386e-45b5-d326-a4b"; // 更改为您提供的用户名
const char* mqtt_password = "9bbfa";
const char* mqtt_topic = "devices/telemetry";
WiFiClient espClient;
PubSubClient client(espClient);
#define MQ2_ANALOG_PIN A0 // ESP8266 的 ADC
#define MQ2_DIGITAL_PIN 16 // ESP8266 的 GPIO16 (D0)
void setup() {
Serial.begin(115200);
delay(1000); // 等待串口初始化
// 连接WiFi
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.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// 设置MQTT服务器和回调函数
client.setServer(mqtt_server, 1883);
pinMode(MQ2_DIGITAL_PIN, INPUT);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int analogValue = analogRead(MQ2_ANALOG_PIN);
int digitalValue = digitalRead(MQ2_DIGITAL_PIN);
Serial.print("MQ-2 Analog Value: ");
Serial.println(analogValue);
Serial.print("MQ-2 Digital Value: ");
Serial.println(digitalValue ? "HIGH" : "LOW");
// 创建JSON对象并发送数据到MQTT
StaticJsonDocument<100> doc;
doc["analog_value"] = analogValue;
doc["digital_status"] = digitalValue ? "HIGH" : "LOW";
char msg[100];
serializeJson(doc, msg);
client.publish(mqtt_topic, msg);
delay(2000); // 等待2秒再次读取
}
void reconnect() {
// 循环直到连接上MQTT
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("mqtt_d2a16ebf-2ed", 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);
}
}
}
完工
收到数据并实现监测
危险水平需要在传感器上用螺丝刀调整阈值,HIGH为危险,LOW为安全