8266 at + arduino 做一个温湿度 PM2.5 甲烷传感器模块-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4426|回复: 3

[分享] 8266 at + arduino 做一个温湿度 PM2.5 甲烷传感器模块

[复制链接]
发表于 2019-5-17 12:21 | 显示全部楼层 |阅读模式
本帖最后由 flashtttt 于 2019-5-17 17:52 编辑

用8266做东西时候发现 8266只有1个ad通道 而且很多的8266开发板只能采集3.3v电压 大部分模块都是5v
所以此程序使用arduino作为主控板 8266来发送数据 以实现多ad模块连接blinker
程序中用到的模块有 DHT11, MQ2, MQ4, PM2.5模块
创建之前 要先给8266模块写入blinker AT固件 ,这个固件在blinker的库中就有 可以直接用arduino IDE写入
具体可参考https://blinker.app/doc/?file=003-%E7%A1%AC%E4%BB%B6%E5%BC%80%E5%8F%91/05-ESP_AT%E6%A8%A1%E5%9D%97%E6%94%AF%E6%8C%81
接线
8266     arduino
tx  -----  rx
rx  -----  tx
GND -----  GND
MQ2 ------  A0
MQ4 ------  A1
DHT11 ----  2
PM2.5 A0 -- A2
PM2.5 LED-- 3

[pre]#define BLINKER_WIFI
#include <Blinker.h>
#include <dht11.h>
#define DHT11PIN 2  //DHT data引脚
int measurePin = 2; //pm模块A0引脚
int ledPower = 3; // pm模块 LED引脚
int MQ2_PIN = 0;  // MQ2模块引脚
int MQ4_PIN = 1;  // MQ4模块引脚
dht11 DHT11;
char auth[] = ""; //冒号里输入密钥
char ssid[] = ""; // 输入wifi名称
char pswd[] = ""; // 输入wifi密码
BlinkerNumber WIND("wd");  //创建实例 根据自己app上的数据键名修改括号里的参数
BlinkerNumber SHID("sd");
BlinkerNumber MQ2("MQ2");
BlinkerNumber MQ4("MQ4");
BlinkerNumber PM2("PM");
BlinkerButton Button1("btn-t3e"); //按键1 刷新温湿度数据
BlinkerButton Button2("btn-64c"); //按键2 刷新mq2 mq4 PM2.5数据
BlinkerText Text1("tex-4mf"); // 文本组件 发送DHT工作状态
float humi_read, temp_read , PM_read;
int MQ2_read,MQ4_read;
void PM(){ // pm函数 实现PM2.5参数发送到app
  PM2.print(PM_read);
  }

int samplingTime = 280; // 这些变量是计算pm2.5值所用到
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;

float PM_data(){  //PM_data 计算pm2.5的值
   digitalWrite(ledPower,LOW); // power on the LED
   delayMicroseconds(samplingTime);

  voMeasured = analogRead(measurePin); // read the dust value

  delayMicroseconds(deltaTime);
   digitalWrite(ledPower,HIGH); // turn the LED off
   delayMicroseconds(sleepTime);
   calcVoltage = voMeasured * (5.0 / 1024.0);
   dustDensity = 0.17 * calcVoltage + 0.1;
   return dustDensity;
  }
  
void anjian(const String & data){ // 按键1回调函数
  DDD();
  
  }
void anjian1(const String & data){ //按键2回调函数
  MQ();
  PM();
  }

void MQ(){  // mq2 mq4 数据上传
  if(MQ2_read > 300){
    MQ2.print(MQ2_read);
    MQ2.color("#FF0000");  
    }
  else{
     MQ2.print(MQ2_read);
     MQ2.color("#1E90FF");
    }
   
    if(MQ4_read > 300){
    MQ4.print(MQ4_read);
    MQ4.color("#FF0000");  
    }
  else{
     MQ4.print(MQ4_read);
     MQ4.color("#1E90FF");
    }   
  }
void DDD() // DHT状态 数据上传
{
    int chk = DHT11.read(DHT11PIN);

  switch (chk)
  {
    case DHTLIB_OK:
                Text1.print("DHT OK");
                break;
    case DHTLIB_ERROR_CHECKSUM:
                Text1.print("DHT Checksum error");
                break;
    case DHTLIB_ERROR_TIMEOUT:
                Text1.print("DHT Time out error");
                break;
    default:
                Text1.print("DHT Unknown error");
                break;
  }
  if(humi_read>60)
    {
      SHID.print(humi_read);
      SHID.color("#FF0000");      
      }
  else{
      SHID.print(humi_read);
      SHID.color("#1E90FF");
  }
if(temp_read>38)
    {
      WIND.print(temp_read);
      WIND.color("#FF0000");      
      }
  else{
      WIND.print(temp_read);
      WIND.color("#1E90FF");
}
}
void heartbeat(){ // 心跳包函数
    DDD();
    MQ();
    PM();
  }

void setup() {

  Blinker.begin(auth, ssid, pswd,0,1);//blinker配置函数 选用 arduino硬串口传输数据
  Blinker.attachHeartbeat(heartbeat);//注册心跳函数
  Button1.attach(anjian);  //注册按键1回调函数
  Button2.attach(anjian1); // 注册按键2回调函数
}

void loop() {
   Blinker.run();
  humi_read   = DHT11.humidity;
  temp_read  = DHT11.temperature;
  MQ2_read = analogRead(MQ2_PIN);
  MQ4_read = analogRead(MQ4_PIN);
  PM_read = PM_data();
   Blinker.delay(2000);
}[/pre]

程序中 如果需要设置软串口通讯 修改Blinker.begin();
Blinker.begin(auth, ssid, pswd);// 默认设置: 数字IO 2(RX) 3(TX), 波特率 9600 bps
Blinker.begin(auth, ssid, pswd, 4, 5);// 设置数字IO 4(RX) 5(TX), 默认波特率 9600 bps
Blinker.begin(auth, ssid, pswd, 4, 5, 115200);// 设置数字IO 4(RX) 5(TX) 及波特率 115200 bps
若配置时Blinker.begin(auth, ssid, pswd, 0, 1);
0 1对应硬串口的RX TX, 库会默认使用硬串口与BLE模块进行通信
晚些时间会更新硬件的搭建 供电等制作方法


Dht11.rar

2.71 KB, 下载次数: 41

DHT11库

发表于 2019-5-17 14:02 | 显示全部楼层
可以啊,楼主牛批,非常有用,先收藏了
发表于 2019-7-14 22:48 | 显示全部楼层
大佬,我想问一下为什么我刷不进去blinker固件库啊,快被他搞崩溃了。这是错误信息。
Arduino:1.8.9 (Windows 10), 开发板:"Generic ESP8266 Module, 80 MHz, Flash, Disabled, ck, 26 MHz, 40MHz, DOUT (compatible), 16M (14M SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"



C:\Program Files (x86)\Arduino\libraries\blinker-library-master\src/Adapters/BlinkerMQTTAT.h:1615:62: error: 'arrayData' was not declared in this scope

     DeserializationError error = deserializeJson(jsonBuffer, arrayData);

                                                              ^

使用 0.3.2  版本的库 blinker-library-master 在文件夹: C:\Program Files (x86)\Arduino\libraries\blinker-library-master
使用 1.2  版本的库 ESP8266mDNS 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266mDNS
使用 1.0  版本的库 ESP8266WiFi 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266WiFi
使用 1.2  版本的库 ESP8266HTTPClient 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266HTTPClient
使用 1.0  版本的库 EEPROM 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\EEPROM
使用 1.0  版本的库 SoftwareSerial 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\SoftwareSerial
使用 1.0  版本的库 Ticker 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Ticker
使用 1.3  版本的库 ESP8266httpUpdate 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266httpUpdate
使用 1.0  版本的库 Hash 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Hash
exit status 1
为开发板 Generic ESP8266 Module 编译时出错。
感谢大佬
发表于 2020-4-30 15:23 | 显示全部楼层
AT模式不支持数据上传持久化

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 07:35 , Processed in 0.078751 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表