M5STICKからM5STICK-Cに進化した部分で、ボタンが1つ増えたのと、GROVE以外に、接続できる端子が付加されたところなのかな?と思っています。
増えた端子を使って、I2C接続のセンサーを繋いでみます。
手元の部品箱から出てきたCO2センサーであるCSS811ブレイクボード(SparkFun Air Quality Breakout – CCS811)を使って、お部屋の二酸化炭素の濃度を測定して、M5STICK-Cのディスプレイに出力してみたいと思います。
CSS811ブレークボードとM5STICK-Cの接続は、下記の写真を参照ください。
ソースコード
SparkFun CS811のライブラリを利用してサクサクと!
// M5STICK-Cで、CCS811のセンサーの値を取得する
// Programed by Kazuyuki Eguchi
#include <M5StickC.h>
#include <Wire.h>
#include "SparkFunCCS811.h"
#define CCS811_ADDR 0x5B //Default I2C Address
CCS811 myCCS811(CCS811_ADDR);
void setup() {
M5.begin();
M5.Axp.ScreenBreath(9); // バックライトの明るさ(7-15)
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setTextSize(2);
M5.Lcd.setTextColor(TFT_WHITE);
M5.Lcd.setCursor(0, 0);
Wire.begin(0,26); // SCL-0,SDA-26
CCS811Core::status returnCode = myCCS811.begin();
if (returnCode != CCS811Core::SENSOR_SUCCESS) {
Serial.println(".begin() returned with an error.");
while (1);
}
}
void loop() {
if (myCCS811.dataAvailable()) {
myCCS811.readAlgorithmResults();
uint16_t co2 = myCCS811.getCO2();
uint16_t tvoc = myCCS811.getTVOC();
unsigned long sec = millis() / 1000;
M5.Lcd.fillScreen(TFT_BLACK);
if(sec >= 1200) {
M5.Lcd.setTextColor(TFT_YELLOW);
} else {
M5.Lcd.setTextColor(TFT_BLUE);
}
M5.Lcd.setCursor(0, 0);
M5.Lcd.print("Co2= ");
M5.Lcd.print(co2);
M5.Lcd.println(" ppm");
M5.Lcd.print("TVOC= ");
M5.Lcd.print(tvoc);
M5.Lcd.println(" ppb");
M5.Lcd.print("Time= ");
M5.Lcd.print(sec);
M5.Lcd.println(" sec");
Serial.print("CO2[");
Serial.print(co2);
Serial.print("]ppm , tVOC[");
Serial.print(tvoc);
Serial.print("]ppb , Timec[");
Serial.print(sec);
Serial.println("]sec");
}
delay(10);
}
動作イメージ
センサーであるCS811は、20分経過しないと、まともな値を出力しないことになっているので、測定時間が1200秒を超えたのか?を文字の色でわかるようにしました。
以上、ご参考までに