編集履歴一覧に戻る
Makato-kanのアイコン画像

Makato-kan が 2021年02月20日12時23分11秒 に編集

コメント無し

本文の変更

**概要**

-

前回投稿した二酸化炭素測定プログラムのCCS811センサーライブラリをAdafrultにしたものです。

+

前回投稿した[二酸化炭素測定プログラム](https://elchika.com/article/97dc4b94-1934-4ee1-acbf-6fa1503b83f6/)のCCS811センサーライブラリをAdafrultにしたものです。

 SparkFunのライブラリを使った時と計測値の変化が違う感じします。 **ライブラリの導入** Adafrultライブラリは ”ライブラリを管理”で”CCS811”を検索して"Adafruit CCS811 Library"をインストールします **ちょっとした事**  Mac-OSでArduinoIDEを使っていますがXIAOを接続したままArduinoIDEを終了するとプログラム書き込みモードになってしまい。プログラムが実行できなくなる問題発生していました。何が悪いのかわかりませんが、ArduinoIDEを終了する前にUSBケーブルを抜けば大丈夫だったのでそんな使い方しておりました。 **プログラム** ```#include "DHT.h" #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); } ```