目录
点灯科技的下载和注册:
点灯科技的下载网站APP那一行(安卓和苹果)在注册页面,输入手机号,并点击获取验证码,可以收到手机短信验证码,输入验证码和密码后,点击 立即注册 按钮,即可注册账号,注册成功后会进入我的设备页面。
重要提醒(必须看):
免费用户的额度:
购买SGP30需要注意的事项
购买时看准工作电压有的是最高只能接受1.98V,开发板上最小只有3.3V
介绍
使用esp8266,dht22,BMP280,SGP30,GP2Y1014AUVF,点灯科技平台,来创造出一个可以使用手机app查看到内温湿度空气质量PM2.5气压+上传至点灯科技平台可以查到1周内温湿度气压
效果展示
一、点灯科技的配置
2、添加设备
通过添加设备页面,您可以添加设备到您的账号。
在我的设备页面点击右上角的“+”图标,即可进入添加设备页面,具体步骤如下:
3.加配置Blinker界面(UI)
我的界面设置在压缩包里
二、代码步骤
1.引入库
代码如下(示例):
#include "Adafruit_SGP30.h"//SGP30库
#include <Blinker.h>//点灯科技库
#include <DHT.h>//DHT22库
#include <Adafruit_BMP280.h>//BMP280库
2.接线图(检查好是否连接正确在通电)
- 开发板+5V—VVC(DHT22,GP2Y1014AUVF)
- 开发板GND—GND(全部模块的)
- 开发板+3.3V—VVC(BMP280,SGP30)
- 开发板D1—BMP280(SCL)
- 开发板D2—BMP280(SDA)
- 开发板D1—SGP30(SCL)
- 开发板D2—SGP30(SDA)
- 开发板D4—DHT22(DAT)
- 开发板A0—GP2Y1014AUVF(3)
- 开发板D5—GP2Y1014AUVF(5)
GP2Y1014AUVF需要连接1个150欧的电阻,和1个220μF的电容(电容和电阻店家一般都会带),具体位置如图所示。(实物图片是直接截的淘宝店家的)
具体接线图可以看其他作者的
3.代码
代码如下(示例):
#include <Adafruit_BMP280.h>
#define BLINKER_WIFI
#include <Wire.h>
#include "Adafruit_SGP30.h"
#include <Blinker.h>
#include <DHT.h>
#include <Wire.h>
#define DHTPIN 2 //定义DHT22模块连接管脚io2
#define DHTTYPE DHT22 // 使用温度湿度模块的类型为DHT22
char auth[] = "***********";//key 密钥
char ssid[] = "***********";//WiFi名称
char pswd[] = "***********";//WiFi密码
BlinkerNumber TEMP("temp"); // 定义BMP280温度数据键名
BlinkerNumber PRES("pres"); // 定义BMP280气压数据键名
BlinkerNumber HUMI("cemp"); //定义DHT22湿度数据键名
BlinkerNumber CEMP("humi"); //定义DHT22温度数据键名
BlinkerNumber TVOC("tvoc"); //定义SGP30温度数据键名
BlinkerNumber ECO2("eCO2"); //定义SGP30温度数据键名
BlinkerNumber PM25("pm2.5"); //定义PM2.5温度数据键名
DHT dht(DHTPIN, DHTTYPE); //生成DHT对象,参数是引脚和DHT的类型+
float humi_read, temp_read;//定义浮点型全局变量 储存DHT22读取的温湿度数据
float zd , cd ;
float qd ;
float ad , bd ;
int dustPin=0;//PM2.5
int dustVal=0;
int ledPower=2;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
Adafruit_BMP280 bmp;
Adafruit_SGP30 sgp;
void heartbeat()
{
TEMP.print(ad);//反馈数据
PRES.print(bd);//反馈数据
HUMI.print(humi_read);//反馈数据
CEMP.print(temp_read);//反馈数据
TVOC.print(zd);//反馈数据
ECO2.print(cd);//反馈数据
PM25.print(qd);//反馈数据
}
void dataStorage()//云存储温湿度数据函数
{
Blinker.dataStorage("temp", ad);//存BMP180储温度
Blinker.dataStorage("pres", bd);//存BMP1880储气压
Blinker.dataStorage("cemp", humi_read);//存DHT22储温度
Blinker.dataStorage("humi", temp_read);//存DHT2储湿度
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);
Blinker.attachHeartbeat(heartbeat);
Blinker.attachDataStorage(dataStorage);
pinMode(ledPower,OUTPUT);
pinMode(13, OUTPUT);
dht.begin();
sgp.begin();
bmp.begin(0X76);
}
void loop() //把主代码放在这里,重复运行:
{
Blinker.run();//运行Blinker
getDHT();
getBMP();
getSGP();
getPM();
}
void getDHT()
{
//DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
BLINKER_LOG("DHT22测量失败!");
return;
}
float hic = dht.computeHeatIndex(t, h, false);
humi_read = h;
temp_read = t;
BLINKER_LOG("DHT22湿度: ", h, " %");
BLINKER_LOG("DHT22温度: ", t, " *C");
BLINKER_LOG("DHT22热指数:", hic, " *C");
delay(100);//延时函数
}
void getBMP()
{
if (!bmp.begin(0X76)) {
BLINKER_LOG("BMP280测量失败");
return;
}
float a = bmp.readTemperature();//读取BMP180传感器的湿度 并赋值给c
float b = bmp.readPressure();//读取BMP180传感器的湿度 并赋值给b
//打印
BLINKER_LOG("BMP280温度: ", a, "C");
BLINKER_LOG("气压: ", b, " *Pa");
ad = a;//将读取到的湿度赋值给全局变量ad
bd = b;//将读取到的温度赋值给全局变量bd
delay(100);//延时函数
}
void getSGP()
{
if (! sgp.IAQmeasure()) {
Serial.println("SGP30测量失败");
return;
}
float z = sgp.TVOC;//读取SGP30传感器的湿度 并赋值给c
float c = sgp.eCO2;//读取SGP30传感器的湿度 并赋值给b
zd = z;
cd = c;
BLINKER_LOG("TVOC: ", z, " ppb\t");
BLINKER_LOG("eCO2: ", c, " ppm");
delay(100);//延时函数
}
void getPM()
{
delay(100);//延时函数//PM2.5
digitalWrite(ledPower,LOW); // power on the LED
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH); // turn the LED off
delayMicroseconds(offTime);
float q = dustVal;//读取PM2.5传感器的湿度 并赋值给q
qd = q;
BLINKER_LOG("PM2.5: ", q, "m3");
Blinker.delay(1000);//延时函数
}
在我的压缩包里