简介
最近在做米家传感器项目时想使用SGP40监测空气中的挥发性有机物质指数,在淘宝下单时客服发了一堆SGP30的例程(???),客服说可以用在SGP40上,但实测并不成功,遂自己在pio里找了一个库,稍微修改了示例。在arduino ide里也一样可以使用,下载"Adafruit_SGP40.h"扩展库即可
工程编写
1、在platformio中创建工程
2、打开ini文件,加入下列2个库
lib_deps =
adafruit/Adafruit SGP40 Sensor@^1.1.3
sensirion/Sensirion Core@^0.7.1
3、代码编写
#include <Wire.h>
#include "Adafruit_SGP40.h"
Adafruit_SGP40 sgp;
#define I2C_SDA_PIN 2
#define I2C_SCL_PIN 3
void setup() {
Serial.begin(115200);
while (!Serial) { delay(10); }
Serial.println("SGP40 test");
Wire.begin(I2C_SDA_PIN,I2C_SCL_PIN);
if (! sgp.begin()){
Serial.println("Sensor not found :(");
while (1);
}
Serial.print("Found SGP40 serial #");
Serial.print(sgp.serialnumber[0], HEX);
Serial.print(sgp.serialnumber[1], HEX);
Serial.println(sgp.serialnumber[2], HEX);
}
int counter = 0;
void loop() {
int Tvoc;
Tvoc = sgp.measureVocIndex();
Serial.print("Tvoc: ");
Serial.println(Tvoc);
delay(1000);
}
硬件连接
#define I2C_SDA_PIN 2
#define I2C_SCL_PIN 3
用杜邦线连接esp32的io2与sgp40的SDA,io3连接sgp40的SCL,并且给sgp40上电
烧录代码
打开串口调试助手会发现监测到的数据是0,这其实是模块初始化有延迟,等待20次打印后,值便会慢慢提升,稳定后测试的值就是正确的
为了避免这种情况,我们可以在setup里面添加代码
int i=200;
while (i--)
{
Serial.println(sgp.measureVocIndex());
delay(1);
}
再次烧录运行,发现其实初始化的速度和读取次数有关(?),这次初始化快了许多
扩展(+墨水屏)
效果如图