您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

技能梳理5@NODEMCU+MQ2+ONENET

esp32采集MQ2烟雾通过http方式发送到onenet,烟雾超标蜂鸣器报警

1、项目简介

在这里插入图片描述

2、实现逻辑

#esp32网络初始化,连上wifi指示灯开始闪烁
#检测烟雾浓度的adc值,换算为浓度值,判断是否超标,超标蜂鸣器报警
#将烟雾浓度数据组包通过http方式发送给onenet

3、应用场景

#远程检测烟雾浓度
#厨房火灾报警

4、核心代码梳理

ESP32AnalogRead adc;


const char *ssid = "test";//WIFI
const char *password = "123456789";//WIFI密码
const char* serverIP = "183.230.40.33"; //欲访问的地址
uint16_t serverPort = 80;         //服务器端口号
String url = "http://api.heclouds.com/devices/xxxxxx/datapoints?type=3";//网址 设备ID
String api="PTpjtG8xxxxxxP6xxxxU=";//api-key
String post;//http请求
int Content_Length;
WiFiClient client; //声明一个客户端对象,用于与服务器进行连接

uint16_t clk;
#define CAL_PPM 20  // 
#define RL			5		// RL
static float ADC_num, R0; //

#define LED_BUILTIN   02
#define SMOKE         32
#define BEEP          12

//long  smoke = 0;
float smoke = 0;
int8_t beep_flag = 0;

void MQ2_PPM_Calibration(float RS)
{
    R0 = RS / pow(CAL_PPM / 613.9f, 1 / -2.074f);
}

float MQ2_GetPPM(void)
{

    float Vrl = ADC_num;
    float RS = (3.3f - Vrl) / Vrl * RL;
    if(clk < 10)
    {
        MQ2_PPM_Calibration(RS);
    }
    else clk = 10;

    float ppm = 613.9f * pow(RS/R0, -2.074f);
    return  ppm;
}

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

    //PIN CFG
    pinMode(BEEP, OUTPUT);
    digitalWrite(BEEP, 1); //low - beep

    //WIFI
    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.print("IP address: ");
    Serial.println(WiFi.localIP());//打印模块IP
}

void loop(void)
{
    byte i;
    byte present = 0;
    byte type_s;
    byte data[12];
    byte addr[8];
    float celsius, fahrenheit;

    
    //LED
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);
    digitalWrite(LED_BUILTIN, LOW);
    delay(500);

    adc.attach(SMOKE);
    ADC_num = adc.readVoltage();
    Serial.println("Voltage = "+String(ADC_num));
    clk++;
    smoke = MQ2_GetPPM();
    Serial.println("smoke = "+String(smoke));

    if(smoke > 1000)
        digitalWrite(BEEP, 0);
    else digitalWrite(BEEP, 1);
   
    if (!client.connect(serverIP, serverPort)) {//判断是否连接服务器
        Serial.println("connection failed");
        return;
    }else{//连接成功
       //Serial.println("connection succ");
       //Serial.println();
       String data_value="{\"smoke_value\":"+String(smoke)+"}\r\n\r\n";


       Content_Length=data_value.length();
       post=String("POST ")+url+" HTTP/1.1\r\n"+"api-key: "+api+"\r\n"
          +"Host:api.heclouds.com\r\n"+"Connection:close\r\n"+"Content-Length:"
          +String(Content_Length)+"\r\n\r\n"+data_value;
          
        // Serial.println(Content_Length);
        Serial.print(post);//串口打印HTTP请求
        client.print(post);//向服务器发送HTTP请求
      }
       while(client.available()) {//判断WIFI是否有数据
        Serial.print(post);
        String line = client.readStringUntil('\r');//读取WIFI数据赋给line
        Serial.print(line);//打印line 
    }
}

5、部分参考资料

#MQ2及esp32-s数据手册

6、注意事项

#程序中的http接收暂时未用到
#上电初始一段时间内检测到的烟雾值不提准确

完整可运行项目地址


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进