本帖最后由 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模块进行通信 晚些时间会更新硬件的搭建 供电等制作方法
|