platformio+arduino+ESP32驱动SGP40监测空气Tvoc指数

简介

最近在做米家传感器项目时想使用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);
  }

再次烧录运行,发现其实初始化的速度和读取次数有关(?),这次初始化快了许多


扩展(+墨水屏)

效果如图

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值