BME680 キャリブレーションとIAQ

Attiny861AとBME680を使用した環境測定
製作時にいろいろハマってしまった。
BME680のデータシートをよく読んでから購入したほうがいいです。当たり前か。
f:id:libio50m:20200505184620j:plain
左上:気温[℃] 右上:湿度[%]
左下:IAQ(室内空気質)だけど0~100[%]表示で0%が最良 右下:気圧[hPa]

1. 測定結果は書込まれているキャリブレーションデータからの算出が必要

 計算例はデータシートに記載してある。計算量多、そして記載ミスあり。
 例はfloatとintegerがある。integerはシフトしまくる。型は主にint32。int64も有。
 キャリブレーション値も気圧だと10個とかある。
 そんなことも知らずに使ったマイコンは家に転がっていたAttiny861A。
 もちろんintegerで計算。気づいたらプログラムメモリ使用率が94.4%。
 測定値の計算と表示だけなのに・・・

2. キャリブレーションデータの型が書いていない

 いろいろと確認を行った結果、下記の型でそれっぽい値になることを確認
 ・温度について uint16_t par_t1; int16_t par_t2; int8_t par_t3;
 ・湿度について 全部int32_t(par_h1~7)
 ・気圧について uint16_t par_p1; int16_t par_p2; int8_t par_p3;
          int16_t par_p4; int16_t par_p5; int8_t par_p6; 
          int8_t par_p7; int16_t par_p8; int16_t par_p9;
          uint8_t par_p10;
 ・ガスについて int8_t par_g1; int16_t par_g2; int8_t par_g3;

3. IAQ(室内空気質)はBME680から直接出力されない

 BME680が出力するのは気温・湿度・気圧・ガスセンサの抵抗値
 IAQは直接出力されない。計算が必要。
 そしてIAQ計算はBOSCHAPI的なものを使用するらしい。
 ただでさえ変な計算をたくさんさせられるのにそんな余裕はない。
 いろいろ調べたらGithubの「G6EJD - David」さんの「BME680-Example」の
 「Slide1.JPG」に気温・湿度・ガスセンサから計算するIAQ的なのがあったので
 それを使用しました

こんなことを考えるなら、ライブラリを使用したほうがいい。
動作条件もBOSCHのライブラリのホームページに書いてあったはず。

今回は使用したマイコンもハードルとなってしまったのでライブラリ未使用です。
計算と表示処理をいろいろ最適化して、周囲明度(CDS)によるLED減光処理、
2色LEDによるIAQ表示を追加してプログラムメモリ使用量7.2kB/8kB(88.3%)

ライブラリを使用しないでソフトを組まれる方は、データシートも記載ミスがあるのでBOSCH公式のGithubのライブラリを参考にすることをお勧めします。