Air Quality SCD40センサー関連のAPIとサンプルプログラム。
#include <M5Unified.h>#include <Wire.h>#include <SensirionI2CScd4x.h> SensirionI2CScd4x scd4x; void setup() { Serial.begin(115200); // Initialize the screen M5.begin(); M5.Display.clear(TFT_BLACK); M5.Display.setTextSize(1); M5.Display.setTextColor(TFT_WHITE, TFT_BLACK); // Initialize I2C bus (SDA=11, SCL=12) Wire.begin(11, 12); scd4x.begin(Wire); uint16_t err; char errMsg[128]; err = scd4x.stopPeriodicMeasurement(); if (err) { Serial.print("stopPeriodicMeasurement error: "); errorToString(err, errMsg, sizeof(errMsg)); Serial.println(errMsg); } // Start periodic measurement (default interval 2 s) err = scd4x.startPeriodicMeasurement(); if (err) { Serial.print("startPeriodicMeasurement error: "); errorToString(err, errMsg, sizeof(errMsg)); Serial.println(errMsg); } // Wait for the first data to stabilize delay(5000);} void loop() { // Refresh every two seconds delay(2000); uint16_t err; bool ready = false; char errMsg[128]; // Check if data is ready err = scd4x.getDataReadyFlag(ready); if (err) { Serial.print("getDataReadyFlag error: "); errorToString(err, errMsg, sizeof(errMsg)); Serial.println(errMsg); return; } if (!ready) { // Skip if not ready return; } // Read CO₂ / temperature / humidity uint16_t co2; float temp, hum; err = scd4x.readMeasurement(co2, temp, hum); if (err) { Serial.print("readMeasurement error: "); errorToString(err, errMsg, sizeof(errMsg)); Serial.println(errMsg); } // Print results to Serial if (!err && co2) { Serial.printf("CO2=%uppm Temp=%.1f°C Hum=%.1f%%\n", co2, temp, hum); } // Display results on AirQ screen M5.Display.fillScreen(TFT_BLACK); M5.Display.setCursor(10, 10); if (err || co2 == 0) { M5.Display.setTextColor(TFT_RED, TFT_BLACK); M5.Display.println("Read failed"); } else { M5.Display.setTextColor(TFT_WHITE, TFT_BLACK); M5.Display.printf("CO2 : %4uppm\n", co2); M5.Display.printf("Temp : %5.1f°C\n", temp); M5.Display.printf("Hum : %5.1f%%\n", hum); } M5.update();}
アップロード完了後、以下の結果が表示されます: