【前言】
Arduino GIGA R1 WiFi开发板的生态非常好,然后结合STCC4的生态也非常好,我们只需要轻松的几步就可以实现获取我们当前环境的温度、湿度、二氧化碳的数值。
【硬件】
1、ArduinoGIGAR1WiFi开发板
2、STCC4传感器模组
【硬件连接】
STCC4采用IIC接口。
ArduinoGIGAR1WiFi 开发板上有三组IIC接口,如下:
SDA - D20
SCL - D21
SDA1 - also available on the camera connector.
SCL1 - also available on the camera connector.
SDA2 - D9
SCL2 - D8
根据开发板的资料使用如下:
Wire.begin() //SDA & SDL Wire1.begin(); //SDA1 & SDL1 Wire2.begin(); //SDA2 & SDL2
我准备采用SDA/SCL接口。
【软件安装】
打开库搜索stcc4,安装Adafruit_STCC4库。

安装好后,打开示例中的continuContinuous measurement example for Adafruit STCC4 CO2 sensor
整体代码如下:
// Continuous measurement example for Adafruit STCC4 CO2 sensor
#include <Adafruit_STCC4.h>
Adafruit_STCC4 stcc4;
void printStatus(uint16_t status) {
Serial.print(F("Status: 0x"));
Serial.print(status, HEX);
Serial.print(F(" ("));
bool first = true;
if (status & STCC4_STATUS_VOLTAGE_ERROR) {
if (!first) Serial.print(F(", "));
Serial.print(F("VOLTAGE_ERROR"));
first = false;
}
if (status & STCC4_STATUS_DEBUG_MASK) {
if (!first) Serial.print(F(", "));
Serial.print(F("DEBUG"));
first = false;
}
if (status & STCC4_STATUS_SHT_NOT_CONNECTED) {
if (!first) Serial.print(F(", "));
Serial.print(F("SHT_NOT_CONNECTED"));
first = false;
}
if (status & STCC4_STATUS_MEMORY_ERROR_MASK) {
if (!first) Serial.print(F(", "));
Serial.print(F("MEMORY_ERROR"));
first = false;
}
if (status & STCC4_STATUS_TESTING_MODE) {
if (!first) Serial.print(F(", "));
Serial.print(F("TESTING_MODE"));
first = false;
}
if (first) {
Serial.print(F("OK"));
}
Serial.println(F(")"));
}
void setup() {
Serial.begin(115200);
while (!Serial) delay(10);
Serial.println(F("Adafruit STCC4 test"));
if (!stcc4.begin()) {
Serial.println(F("Failed to find STCC4 chip"));
while (1) delay(10);
}
Serial.println(F("STCC4 found!"));
if (!stcc4.reset()) {
Serial.println(F("Failed to reset STCC4"));
while (1) delay(10);
}
Serial.println(F("Reset successful"));
// Test getProductID function after reset
uint32_t productID = stcc4.getProductID();
Serial.print(F("Product ID: 0x"));
Serial.println(productID, HEX);
// Uncomment to perform factory reset (clears calibration history)
// Serial.println(F("Performing factory reset..."));
// if (stcc4.factoryReset()) {
// Serial.println(F("Factory reset complete"));
// } else {
// Serial.println(F("Factory reset failed"));
// }
if (!stcc4.enableContinuousMeasurement(true)) {
Serial.println(F("Failed to start continuous measurement"));
while (1) delay(10);
}
Serial.println(F("Continuous measurement started"));
// Uncomment to perform conditioning (takes 22 seconds)
// Serial.println(F("Performing conditioning..."));
// if (stcc4.performConditioning()) {
// Serial.println(F("Conditioning complete"));
// } else {
// Serial.println(F("Conditioning failed"));
// }
}
void loop() {
uint16_t co2;
float temperature, humidity;
uint16_t status;
if (stcc4.readMeasurement(&co2, &temperature, &humidity, &status)) {
Serial.print(F("CO2: "));
Serial.print(co2);
Serial.print(F(" ppm, Temp: "));
Serial.print(temperature);
Serial.print(F(" C, Humidity: "));
Serial.print(humidity);
Serial.print(F(" %, "));
printStatus(status);
} else {
Serial.println(F("Failed to read measurement"));
}
delay(1000);
}【测试】
编译下载后,打开串口监测器,可以看到如期的获取到了环境数据:

【总结】
这次测试没有书写一行代码,就顺利的实现的数据的获取,得益于arduino的生态。
注意的一点是开发板有三组IIC,需要选择正确的接口。
阅读全文