关于#c++#的问题:GSP30+8266+DHT11

Q:代码
我想通过ESP8266(CP1202) 将DHT11 和GSP30 检测到的数据显示在OLED(4针)(u8g2库)
目前OLED 能正常显示温度和湿度,;
GSP30 库已安装;
现在新增GSP30 气体检测,不知道代码如何下手?

#include <Adafruit_SGP30.h>

#include <dht11.h>

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define OLED_RESET 0
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define DHTPIN D4

dht11 DHT11;
Adafruit_SGP30 sgp;

void setup() {
   u8g2.begin();     //初始化u8g2库
  u8g2.enableUTF8Print();   //启用UTF8打印
  
  Serial.begin(9600);
  while (!Serial) {
    delay(10);
  }

  if (!sgp.begin()) {
    Serial.println("SGP30 not found");
    while (1);
  }

 

void loop() {
  float temperature = DHT11.readTemperature();
  float humidity = DHT11.readHumidity();

  if (isnan(temperature) || isnan(humidity)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  u8g2.clearBuffer(); 
  u8g2.sendBuffer();          
  delay(1000);  

  if (!sgp.IAQmeasure()) {
    Serial.println("Measurement failed");
    return;
  }
    do{
  //display.clearDisplay();
  u8g2.drawStr(0, 0);
  u8g2.setTextSize(1);
  u8g2.println("Temperature: " + String(temperature) + "C");
  u8g2.println("Humidity: " + String(humidity) + "%");
  u8g2.println("CO2eq: " + String(sgp.eCO2) + "ppm");
  u8g2.println("TVOC: " + String(sgp.TVOC) + "ppb");
  u8g2.display();

  u8g2.print("Temperature: ");
  u8g2.print(temperature);
  u8g2.print("C, Humidity: ");
  u8g2.print(humidity);
  u8g2.print("%, CO2eq: ");
  u8g2.print(sgp.eCO2);
  u8g2.print("ppm, TVOC: ");
  u8g2.print(sgp.TVOC);
  u8g2.println("ppb");
} while ( u8g2.nextPage() );
delay(1000); 
}

求大博主改正

引用chatgpt部分指引作答:
您可以在loop()函数中添加用于读取GSP30气体检测数值的代码,完成气体检测数值的输出。根据Adafruit_SGP30库的文档说明,您需要使用IAQmeasure()函数获取气体检测数据。

在气体检测数据成功读取后,可以将其与温湿度数据一起使用U8g2库往OLED屏幕上显示。可以直接在您目前的代码的loop()函数进行修改,下面是一个简单的修改示例:

// GSP30 CO2eq和TVOC
  if (!sgp.IAQmeasure()) {
    Serial.println("Measurement failed");
    return;
  }
  u8g2.clearBuffer(); 
  u8g2.sendBuffer();          
  delay(1000);  

  float co2 = sgp.eCO2;
  float tvoc = sgp.TVOC;

  // 显示所有传感器数据
  u8g2.drawStr(0, 0);
  u8g2.setTextSize(1);
  u8g2.println("Temperature: " + String(temperature) + "C");
  u8g2.println("Humidity: " + String(humidity) + "%");
  u8g2.println("CO2eq: " + String(co2) + "ppm");
  u8g2.println("TVOC: " + String(tvoc) + "ppb");
  u8g2.display();

请将这段代码添加到原有的loop()函数中,它会首先计算CO2eq和TVOC的值,然后将所有传感器的数据显示在OLED屏幕上。注意,这样修改后可能会影响到温湿度数据的显示,所以您需要根据实际需求进行调整。