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屏幕上。注意,这样修改后可能会影响到温湿度数据的显示,所以您需要根据实际需求进行调整。