pdf-icon

Arduino入門

2. デバイス&サンプル

Air Quality SEN55 センサー データ取得

Air Quality SEN55 センサー関連の API とサンプルプログラム。

SEN55 センサーを使用する前に、GPIO10 を出力モードに設定し LOW レベルを出力して電源スイッチを有効化する必要があります。LOW レベルでセンサーが有効になります。

サンプルプログラム

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
#include <M5Unified.h>
#include <Wire.h>
#include <SensirionI2CSen5x.h>

// SEN55 インスタンス
SensirionI2CSen5x sen5x;

void setup() {
  // シリアルデバッグ
  Serial.begin(115200);

  // 画面を初期化
  M5.begin();
  M5.Display.clear(TFT_BLACK);
  M5.Display.setTextSize(1);
  M5.Display.setTextColor(TFT_WHITE, TFT_BLACK);

  // I2C ピン (SDA=11, SCL=12)、データ取得済みの設定と同じ
  Wire.begin(11, 12);
  // AirQ 外部センサー有効化ピン、LOW を維持
  pinMode(10, OUTPUT);
  digitalWrite(10, LOW);

  // SEN55 を初期化
  sen5x.begin(Wire);
  uint16_t err;
  char msg[128];

  err = sen5x.deviceReset();
  if (err) {
    errorToString(err, msg, sizeof(msg));
    Serial.println("SEN55 リセットに失敗: " + String(msg));
  }
  // 測定を開始
  err = sen5x.startMeasurement();
  if (err) {
    errorToString(err, msg, sizeof(msg));
    Serial.println("SEN55 測定開始に失敗: " + String(msg));
  }
}

void loop() {
  // 1 秒ごとに読み取り
  delay(1000);

  float pm1, pm2_5, pm4, pm10, hum, temp, voc, nox;
  uint16_t err = sen5x.readMeasuredValues(
    pm1, pm2_5, pm4, pm10,
    hum, temp,
    voc, nox
  );

  // 画面をクリアしてカーソルをリセット
  M5.Display.fillScreen(TFT_BLACK);
  M5.Display.setCursor(10, 10);

  if (err) {
    // 読み取りエラー
    M5.Display.setTextColor(TFT_RED, TFT_BLACK);
    char em[64];
    errorToString(err, em, sizeof(em));
    M5.Display.printf("Read Error:\n%s", em);
  } else {
    // 各値を表示
    M5.Display.setTextColor(TFT_WHITE, TFT_BLACK);
    M5.Display.printf("PM1.0 : %.1f ug/m3\n",   pm1);
    M5.Display.printf("PM2.5 : %.1f ug/m3\n",   pm2_5);
    M5.Display.printf("PM4.0 : %.1f ug/m3\n",   pm4);
    M5.Display.printf("PM10  : %.1f ug/m3\n\n", pm10);
    M5.Display.printf("Hum   : %.1f %%\n",      hum);
    M5.Display.printf("Temp  : %.1f C\n\n",     temp);
    M5.Display.printf("VOC   : %.1f\n",        voc);
    M5.Display.printf("NOx   : %.1f\n",        nox);
  }
  // M5 イベントを更新(必須)
  M5.update();
}

アップロード後、以下のような画面が表示されます:

On This Page