Beetle 树莓派RP2350之便携环境质量监测仪
一、项目背景
初入陌生环境,某些人可能会有所不适,有可能是环境空气质量不合格导致的,于是使用Beetle 树莓派RP2350和空气质量传感器制作一款便携的空气质量监测仪器,如果空气质量不合格,可以提前知晓,并离开。

二、 制作过程
(一)需求分析
1.该设备便于携带,显示器、传感器、电池体积要求小巧。
2.该设备需要测量环境空气质量等多个指标。
3.该设备能够实时查看环境空气质量,并且指导环境质量指数代表的含义。
(二)所需硬件
1.主控板使用Beetle 树莓派RP2350,购买链接

2.空气质量传感器ENS160 购买链接


3.Gravity: I2C OLED-2864 显示屏 购买链接


也可以加一个I2C hub用于扩展
使用I2C接口传感器的功能。
(三)电路连接
Beetle RP2350提供了1组I2C通讯接口:I2C0。引脚对应关系如下:
引脚号 |
I2C功能 |
4 |
I2C0/SDA |
5 |
I2C0/SCL |
将空气质量传感器的I2C接口和OLED显示屏的I2C接口正确接到Beetle RP2350的4和5引脚即可。
(四)硬件及代码调试
1.调试空气质量传感器
主控板连接空气好质量传感器,并且串口输出空气质量指标。
//空气质量传感器ens160使用i2c接口为0x53,如果选择0x52会错误输出
#include <DFRobot_ENS160.h>
// 创建对象
DFRobot_ENS160_I2C ens160(&Wire, 0x53);
// 主程序开始
void setup() {
Serial.begin(9600);
ens160.begin();
ens160.setPWRMode(ENS160_STANDARD_MODE);
}
void loop() {
Serial.print("co2指数:");
Serial.println(ens160.getECO2());
Serial.print("TVOC指数:");
Serial.println(ens160.getTVOC());
Serial.print("AQI指数:");
Serial.println(ens160.getAQI());
Serial.print("运行状态:");
Serial.println(ens160.getENS160Status());
delay(2000);
}
串口输出为:

串口中输出了空气质量指标,说明我们的空气质量传感器已经开始工作了。
2.调试Oled显示屏
已经按要求连接Oled显示屏后,我们使用以下调试
#include <DFRobot_SSD1306_I2C.h>
// 创建对象
DFRobot_SSD1306_I2C oled12864;
// 主程序开始
void setup() {
oled12864.begin(0x3c);
oled12864.fillScreen(0);
oled12864.setCursorLine(1);
oled12864.printLine("hello dfrobot");
}
void loop() {
}
程序执行后如下所示:

3.综合后程序
将空气质量传感器返回的值显示在oled屏中。
#include <DFRobot_SSD1306_I2C.h>
//空气质量传感器ens160使用i2c接口为0x53,如果选择0x52会错误输出
#include <DFRobot_ENS160.h>
// 创建对象
DFRobot_ENS160_I2C ens160(&Wire, 0x53);
int ECO2=0;
int TVOC=0;
int AQI=0;
int statue=0;
String ECO2S="";
String AQIS="";
String TVOCS="";
// 创建对象
DFRobot_SSD1306_I2C oled12864;
// 主程序开始
void setup() {
Serial.begin(9600);
ens160.begin();
ens160.setPWRMode(ENS160_STANDARD_MODE);
oled12864.begin(0x3c);
oled12864.fillScreen(0);
}
void loop() {
/**
* 获取传感器运行状
* 返回值:0-Normal operation,
* 1-Warm-Up phase, During first 3 minutes after power-on.
* 2-Initial Start-Up phase, During first full hour of operation after initial power-on.Only once in the sensor’s lifetime.
* Note that the status will only be stored in the non-volatile memory after an initial 24h of continuous
* operation. If unpowered before conclusion of said period, the ENS160 will resume "Initial Start-up" mode
* after re-powering.
*/
Serial.print("co2指数:");
ECO2=ens160.getECO2();
if(ECO2<600){ECO2S="adv:excellent";
} else if(800>ECO2>=600){
ECO2S="adv:good";}
else if(1000>ECO2>=800){
ECO2S="adv:normal";
}else{
ECO2S="adv:bad";
}
Serial.println(ECO2);
Serial.print("TVOC指数:");
TVOC=ens160.getTVOC();
if(TVOC<=50){
TVOCS="adv:good";
}else if (50<TVOC<=750){
TVOCS="adv:bad";
}else{
TVOCS="adv:worst";
}
Serial.println(TVOC);
Serial.print("AQI指数:");
switch(AQI){
case 1:
AQIS="adv:best";
break;
case 2:
AQIS="good";
break;
case 3:
AQIS="normal";
break;
case 4:
AQIS="bad";
break;
case 5:
AQIS="worst";
break;
}
AQI=ens160.getAQI();
Serial.println(AQI);
Serial.print("运行状态:");
statue=ens160.getENS160Status();
Serial.println(statue);
oled12864.fillScreen(0);
oled12864.setCursorLine(1);
oled12864.printLine("AirQualityMonitor");
oled12864.setCursorLine(3);
oled12864.setCursorLine(2);
oled12864.printLine(String("ECO2:")+String(ECO2)+String(ECO2S));
oled12864.setCursorLine(3);
oled12864.printLine(String("TVOC:")+String(TVOC)+String(TVOCS));
oled12864.setCursorLine(4);
oled12864.printLine(String("AQI:")+String(AQI)+String(AQIS));
delay(2000);
}
显示屏结果:

第一行为标题:AirQualityMonitor
第二行为ECO2数据为400,adv为该数据的建议最好为excellent>good>normal>bad
第三行为TVOC,数据为0,adv为good>normal>bad
第四行为AQI,数据为1,adv为best>good>normal>bad>worst
空气质量参考指标
1.AQI等级参考

2.eCO2/CO2浓度参考
https://img.dfrobot.com.cn/wiki/5d57611a3416442fa39bffca/afe56dc99258d5ebe24f98bf84bf7c0d.pnghttps://i-blog.csdnimg.cn/img_convert/93c90d332d954eef8df209468c6aee2e.png
3.TVOC浓度参考

三、项目结果