电子网首页 > 开源与设计

【ArduinoGIGAR1WiFi】驱动stcc4获取环境参数

2026-02-07 01:10 | 来源:电子世界报

【前言】

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库。

image.png

安装好后,打开示例中的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);
}

【测试】

编译下载后,打开串口监测器,可以看到如期的获取到了环境数据:

image.png

【总结】

这次测试没有书写一行代码,就顺利的实现的数据的获取,得益于arduino的生态。

注意的一点是开发板有三组IIC,需要选择正确的接口。

阅读全文

推荐技术

返回顶部