Seeeduino XIAOを使って二酸化炭素測定する AdaFruitライブラリVer
概要
前回投稿した二酸化炭素測定プログラムのCCS811センサーライブラリをAdafrultにしたものです。
SparkFunのライブラリを使った時と計測値の変化が違う感じします。
ライブラリの導入
Adafrultライブラリは ”ライブラリを管理”で”CCS811”を検索して"Adafruit CCS811 Library"をインストールします
ちょっとした事
Mac-OSでArduinoIDEを使っていますがXIAOを接続したままArduinoIDEを終了するとプログラム書き込みモードになってしまい。
プログラムが実行できなくなる問題発生していました。何が悪いのかわかりませんが、ArduinoIDEを終了する前にUSBケーブルを抜けば大丈夫だったのでそんな使い方しておりました。
プログラム
#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>
#include "Adafruit_CCS811.h"
#define CCS811_WAKE 2
#define DHTPIN 3
#define DHTTYPE DHT11
//I2C CCS811_ADDR 0x5A
DHT dht(DHTPIN, DHTTYPE);
Adafruit_CCS811 ccs;
int base=1;
int down=1;
int countdown=20;
void setup() {
Serial.begin(1200);
Serial.print("");
delay(2000);
Serial.println("CCS811 Basic Example");
pinMode(CCS811_WAKE, OUTPUT);
delay(90);
digitalWrite(CCS811_WAKE, LOW); // turn Sensor on
Wire.begin();
oled.init(); // Initialze SSD1306 OLED display
oled.clearDisplay(); // Clear screen
oled.setTextXY(3,3); // Set cursor position, start of line 0
oled.putString("Hello, World");
delay(1000);
//DHT11 Temp Humi status
dht.begin();
oled.clearDisplay();
oled.setTextXY(0,0);
oled.putString("Temp");
oled.setTextXY(0,11);
oled.putString("xxxxC");
oled.setTextXY(2,0);
oled.putString("Humi");
oled.setTextXY(2,13);
oled.putString("xx%");
//CCS811 CO2 status
oled.setTextXY(4,0);
oled.putString("CO2");
oled.setTextXY(4,9);
oled.putString("xxxxppm");
oled.setTextXY(6,0);
oled.putString("Heat Index");
oled.setTextXY(6,14);
oled.putString("xx");
if(!ccs.begin()){
Serial.println("Failed to start sensor! Please check your wiring.");
while(1);
}
delay(4000);
digitalWrite(CCS811_WAKE, HIGH); // turn Sensor off
//SSD1306 brightness set
unsigned char brightness = 5;
oled.setBrightness((unsigned char)brightness);
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f))
{
oled.setTextXY(7,0);
oled.putString("Status : NG");
return;
}else {
//Counter check and countdown 20min
base=base+1;
if(base>12) {
base=1;
} else {
down=base/12;
countdown=countdown-down;
if(countdown<1){
oled.setTextXY(7,0);
oled.putString(" ");
}else{
oled.setTextXY(7,0);
oled.putString("Wait");
oled.setTextXY(7,6);
char strMIN[2];
sprintf(strMIN,"%2d",int(countdown));
delay(10);
oled.putString(String(strMIN));
oled.setTextXY(7,8);
oled.putString("min");
}
}
}
float hic = dht.computeHeatIndex(t, h, false);
//Display Temp
oled.setTextXY(0,10);
oled.putString(" ");
delay(10);
oled.setTextXY(0,10);
oled.putFloat(float(t));
//Display Hume
oled.setTextXY(2,11);
oled.putString(" ");
delay(10);
oled.putNumber(int(h));
//Display Heat Index
oled.setTextXY(6,14);
char strHIC[2];
sprintf(strHIC,"%2d",int(hic));
delay(10);
oled.putString(String(strHIC));
delay(10);
//CSS811 data check and Humi Temp data set
digitalWrite(CCS811_WAKE, LOW); // turn Sensor on
delay(90);
ccs.setEnvironmentalData(h,t);
delay(90);
if(ccs.available()){
if(!ccs.readData()){
//SerialOUT CO2 TVOC
Serial.print(ccs.geteCO2());
Serial.print(",");
Serial.print(ccs.getTVOC());
Serial.print(",");
}
else{
Serial.println("ERROR!");
while(1);
}
}
//SerialOUT Temp Hume
Serial.print(float(t));
Serial.print(",");
Serial.println(int(h));
//Display CO2
oled.setTextXY(4,9);
oled.putString(" ");
delay(10);
oled.setTextXY(4,9);
char strCO2[4];
sprintf(strCO2,"%4d",ccs.geteCO2());
delay(10);
oled.putString(String(strCO2));
oled.setTextXY(4,13);
delay(10);
oled.putString("ppm");
digitalWrite(CCS811_WAKE, HIGH); // turn Sensor off
delay(5000);
}
実際の所
ライブラリの違いによる変化は気づきませんでした
投稿者の人気記事
-
Makato-kan
さんが
2021/02/20
に
編集
をしました。
(メッセージ: 初版)
-
Makato-kan
さんが
2021/02/20
に
編集
をしました。
-
Makato-kan
さんが
2021/03/24
に
編集
をしました。
-
Makato-kan
さんが
2021/12/07
に
編集
をしました。
ログインしてコメントを投稿する