_深蓝_ 发表于 2025-5-23 16:34:59

Beetle 树莓派RP2350之便携环境质量监测仪

本帖最后由 _深蓝_ 于 2025-5-24 20:28 编辑



# Beetle 树莓派RP2350之便携环境质量监测仪

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

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

2.空气质量传感器ENS160[购买链接](https://www.dfrobot.com.cn/goods-3450.html)
![](https://ws.dfrobot.com.cn/FrreHcOCcRkr4-srSbLo2wMtuzqK)

![](https://ws.dfrobot.com.cn/FjwjYqpmzr0d-rVP-jmWMBTYChMx)

3.Gravity: I2C OLED-2864 显示屏[购买链接](https://www.dfrobot.com.cn/goods-1374.html)
![](https://ws.dfrobot.com.cn/Fobq6dwPuvgYxwKtPL70uBnatLMT)
![](https://ws.dfrobot.com.cn/Fi26a6VBXhMdFSPCMfIgbiRLE7l3)

也可以加一个I2C hub用于扩展

使用I2C接口传感器的功能。
### (三)电路连接
Beetle RP2350提供了1组I2C通讯接口:I2C0。引脚对应关系如下:

引脚号 |I2C功能
---|---
4 |I2C0/SDA
5 |I2C0/SCL

将空气质量传感器的I2C接口和OLED显示屏的I2C接口正确接到Beetle RP2350的4和5引脚即可。
### (四)硬件及代码调试
#### 1.调试空气质量传感器
主控板连接空气好质量传感器,并且串口输出空气质量指标。
```c
//空气质量传感器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显示屏后,我们使用以下调试
```c
#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屏中。
```c
#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浓度参考



## 三、项目结果


以下是通过B站做的视频,
https://www.bilibili.com/video/BV13YjEzhEbP/

感谢官方给予的信任,通过本次评测,我学到了很多知识,同时,也发现了我很多编程之外的问题。通过这样的活动能够认识更真实的自己。




页: [1]
查看完整版本: Beetle 树莓派RP2350之便携环境质量监测仪