8266 at + arduino 做一个温湿度 PM2.5 甲烷传感器模块
本帖最后由 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 bpsBlinker.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模块进行通信晚些时间会更新硬件的搭建 供电等制作方法
可以啊,楼主牛批,非常有用,先收藏了 大佬,我想问一下为什么我刷不进去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 编译时出错。
感谢大佬 AT模式不支持数据上传持久化
https://cdn.jsdelivr.net/gh/hishis/forum-grandmaster-for-discuz/public/images/patch.gif
页:
[1]