MQ-5 气体传感器对接巴法云发送微信消息

1. 巴法云配置

1–1. 进入巴法云控制台:https://cloud.bemfa.com/tcp/devicemqtt.html
选择MQTT设备云,新建主题,此处的主题是MQ5 ,也可以自定义,代码里的主题名要与这里一致。
在这里插入图片描述
1–2. 微信推送消息接口协议
https://cloud.bemfa.com/docs/#/?id=_61-%e6%8e%a5%e5%8f%a3%e5%8d%8f%e8%ae%ae
在这里插入图片描述

2. ESP8266 模块代码编写与烧录

详细教程请看太极创客官网:零基础入门学用 Arduino 教程 – 基础知识篇
正常情况下,传感器读数不超过300,根据实际情况修改此数值,当传感器读数超过设定值的时候就会发送消息到微信提醒用户。
在这里插入图片描述

完整代码如下:

/*
	MQ-5气敏式烟雾传感器模块(甲烷 液化气可燃气体)
*/

// 引入对应的头文件
#include <ESP8266WiFi.h>          
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>  
#include <PubSubClient.h>
#include <Ticker.h> 
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <ESP8266HTTPClient.h>
//数值类型转换
#include <stdio.h>
#include <stdlib.h>


// 声明对象
Ticker ticker;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

//********************需要修改的部分*******************//
#define clientId  "xxxxxxxxxxxxxxxxx"     //用户私钥,巴法云控制台获取
const char*  topic = "MQ5";        //主题名字,可在巴法云控制台自行创建,名称随意
const char*  topicSet = "MQ5/set"; //自已发布的消息不订阅
const char* mqttServer = "bemfa.com"; //默认,MQTT服务器
const int mqttServerPort = 9501;      //默认,MQTT服务器端口

#define Aout A0                // MQ-5 AO 接线 Arduino A0
String messageString = "000"; // 临时变量,存储A0读取的数据
//**************************************************//


/******************************微信消息推送参数************************************************/
String uid = "xxxxxxxxxxxxxxxxx";             // 用户私钥,巴法云控制台获取
String type = "2";                                           // 1表示是预警消息,2表示设备提醒消息
String device = "燃气传感器设备";                              // 设备名称
String msg = "检测到可燃气体浓度超标!!!";       //发送的消息
int delaytime = 60;                                          //为了防止被设备“骚扰”,可设置贤者时间,单位是秒,如果设置了该值,在该时间内不会发消息到微信,设置为0立即推送。
String ApiUrl = "http://api.bemfa.com/api/wechat/v1/";        //默认 api 网址
HTTPClient http;  //初始化http
WiFiClient client;  //初始化wifi客户端
/******************************************************************************/



// 连接MQTT服务器
void connectMQTTServer(){
    if (mqttClient.connect(clientId)) {
      Serial.println("MQTT Server Connected.");
      Serial.println("Server Address: ");
      Serial.println(mqttServer);
      Serial.println("ClientId:");
      Serial.println(clientId);
      subscribeTopic(); // ****订阅主题函数****
    } else {
      Serial.print("MQTT Server Connect Failed. Client State:");
      Serial.println(mqttClient.state());
      delay(3000);
    }   
}
 
// 订阅指定主题
void subscribeTopic(){ 
    // 建立订阅主题
    String topicString = topic ;
    char subTopic[topicString.length() + 1];  
    strcpy(subTopic, topicString.c_str());
    
    // 通过串口监视器输出是否成功订阅主题以及订阅的主题名称
    if(mqttClient.subscribe(subTopic)){
      Serial.println("Subscribe Topic:");
      Serial.println(subTopic);
    } else {
      Serial.print("Subscribe Fail...");
    }  
}

// 发布信息
void pubMQTTmsg(){   
    // 建立发布主题
    String topicString = topicSet ;
    char publishTopic[topicString.length() + 1];  
    strcpy(publishTopic, topicString.c_str());
   
    // 建立发布信息:设备的状态    
    char publishMsg[messageString.length() + 1];   
    strcpy(publishMsg, messageString.c_str());
    
    // 实现ESP8266向主题发布信息,并在串口监视器显示出来
    if(mqttClient.publish(publishTopic, publishMsg)){
      Serial.println("Publish Topic:");
      Serial.println(publishTopic);
      Serial.println("Publish message:");
      Serial.println(publishMsg);    
    } else {
      Serial.println("Message Publish Failed."); 
    }

    //当数据大于300时向微信推送消息
    int n = atoi(messageString.c_str()); //string类型转为int类型,需先将string转为const char*
    if(n > 300){
      doHttpStick();
    }
}

//******微信消息推送函数********//
void doHttpStick(){
    String postData;
    postData = "uid="+uid+"&type=" + type +"&time="+delaytime+"&device="+device+"&msg="+msg;
    http.begin(client,ApiUrl);              //Specify request destination
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header
    int httpCode = http.POST(postData);   //Send the request
    String payload = http.getString();    //Get the response payload
    Serial.println(httpCode);   //Print HTTP return code
    Serial.println(payload);    //Print request response payload
    http.end();  //Close connection
    Serial.println("send success");  
  }
//******微信消息推送函数********//
 


//程序入口 
void setup() {
   //开启串口通讯
    Serial.begin(9600);
    
    //定义A0为INPUT模式
    pinMode(Aout, INPUT);
    
    // 建立WiFiManager对象
    WiFiManager wifiManager;
    // 自动连接WiFi,以下语句的参数是连接ESP8266时的WiFi名称
    wifiManager.autoConnect("AutoConnectAP");     
    // WiFi连接成功后将通过串口监视器输出连接成功信息 
    Serial.println(""); 
    Serial.print("ESP8266 Connected to ");
    Serial.println(WiFi.SSID());              // WiFi名称
    Serial.print("IP address:\t");
    Serial.println(WiFi.localIP());           // IP

    // 设置MQTT服务器和端口号 
    mqttClient.setServer(mqttServer, mqttServerPort); 
    
    // 连接MQTT服务器
    connectMQTTServer();       
}

//循环执行 
void loop() {
    if (mqttClient.connected()) { // 如果开发板成功连接服务器
        messageString = analogRead(Aout); //读取A0的模拟数据
        pubMQTTmsg(); //调用发发布函数
        delay(10000);  //延时10秒
    } else {                  
      connectMQTTServer();    // 如果开发板未能成功连接服务器,则尝试连接服务器
    }  
}

3. 硬件

传感器: https://item.taobao.com/item.htm?id=20240089178&ns=1&abbucket=17#detail
在这里插入图片描述
ESP8266开发板: https://item.taobao.com/item.htm?id=531755241333&ns=1&abbucket=17#detail
在这里插入图片描述
接线示意图
按红色,黑色,绿色线接线
在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于MQ-5气体传感器和51单片机的可燃气体报警装置能够检测空气中的可燃气体浓度,并在超过设定阈值时发出警报提示用户采取相应的防护措施。 MQ-5气体传感器是一种可靠、高灵敏度的气体传感器,能够监测可燃气体如天然气、液化气等的浓度。它通过感应气体的电化学反应,将浓度转化为电信号输出。 51单片机是一种常用的微控制器,具备丰富的输入输出接口和高性能的处理能力,可用于实时监测并控制其他器件。 在基于MQ-5气体传感器和51单片机的可燃气体报警装置中,首先将传感器的模拟输出信号输入到51单片机的模拟电压输入口。然后,通过模拟转数字转换器将模拟信号转化为数字量,再由单片机进行处理和判断。 单片机会设定一个阈值,一旦传感器输出的气体浓度超过该阈值,单片机将自动触发报警装置。报警装置可以通过发出声音警报或者触发其他告警装置来提醒用户。 此外,报警装置还可以通过串口或无线模块将数据传输到外部设备进行监控和记录,确保用户及时了解气体的浓度以及可能的危险情况。 综上所述,基于MQ-5气体传感器和51单片机的可燃气体报警装置可以实时检测可燃气体浓度,通过报警装置提醒用户采取相应的措施,保障人身安全。同时,它还具备数据传输功能,能够实现对气体浓度的监控和记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值