查看: 773|回复: 2

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

[复制链接]
  • TA的每日心情
    慵懒
    2019-5-21 13:00
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 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

    #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);
    }


    程序中 如果需要设置软串口通讯 修改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, 下载次数: 15

    DHT11库

    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2019-4-14 19:31
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 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 编译时出错。
    感谢大佬
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino lcd屏幕亮了但是不显示字符
    Arduino lcd屏幕亮了但是
    Arduino的lcd屏亮了但是上面没有字符显示,串进去的滑动变阻器也旋过了,但是还是没有
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(98)---L298N电机驱动板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    两个ESP8266通过云端实现远程数据交互
    两个ESP8266通过云端实现
    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表