
最近特に価格が高騰している 温湿度 気圧 センサ BME280の 代替となる、安価な I2C 温湿度 センサ モジュール探すシリーズの第1回は、TI社の HDC1080 HDC2080 を取り上げます。
BME280とBMP280の動向
2019年頃までは安価に購入出来た温湿度気圧計測に対応するBME280センサ搭載I2Cモジュールが、2022年初頭には当時の倍以上の値段(RMB30前後)で売られていて、在庫状態も不安定に。
一方でBME280から湿度計測が省かれたBMP280はむしろ値下がりしていて、RMB1.50で投げ売りされているところすらあります(いずれも淘寶調べ)。
代替品を探す前に先ずは現在愛用しているBME280温湿度気圧センサと、その弟分BMP280温度気圧センサの特性を以下の通りまとめます。
- 温度計測 : -40〜85℃ ±0.5℃
- 湿度計測 : 0〜100%RH ±3%RH (BME280のみ)
- 気圧計測 : 300〜1100hPa ±1hPa
- 動作電圧 : 1.7〜3.6V
- 消費電流 : 714uA (待機時0.1uA)
- I2Cアドレス : 0x76 / 0x77
HDC1080搭載基板2種
TI社のHDC1080はあまり多く見掛けませんが、消費電流の少なさが特長のこのセンサの基本特性は次の通り。デバイスのI2Cアドレス固定なので同じセンサを複数繋ぐ冗長化運用には不向きなことに加え、このアドレスは同社の電圧電流センサ INA219とも重なってしまうので、併用時は注意が必要です(INA219側のI2Cアドレスを 0x41 へ設定するなど)。
- 温度計測 : -40〜125℃ ±0.2℃
- 湿度計測 : 0〜100%RH ±2%RH
- 動作電圧 : 2.7〜5.5V
- 消費電流 : 190uA (待機時100nA)
- I2Cアドレス : 0x40 固定
今回入手できたのはこちらの2種類。
まず上図左の黒い基板がGY-213Yと言う商品名のモジュールでRMB15.60で購入したのですが、よく探してみるとRMB8程度で入手可能(淘寶)。裏面を見ると他にSi7021やHTU21D、SHT2x系とも基板共用を図っているようです。
次の見慣れた青い基板はCJMCU−1080です。こちらは今回RMB16.90で購入しましたが、こちらもよく探してみると淘寶でRMB11程度で入手可能です。
HDC1080をESP Easyで使う
どちらも同じ素子なので、代表してGY-213V版をBME280と共にESP-12EとI2C接続して、ESP Easyから読み込めるか試してみます(尚、2つのHDC1080モジュールはI2Cアドレスが同一固定なので、CJMCU版は逃げています)。
ESP Easy(関連記事はこちら)で標準サポートされているBME280と異なり、HDC1080はオプションプラグインで対応されているのですが、膨大なプラグインの中からお目当てのデバイスのプラグインがどのファームウェアで収録されているかは、こちらの一覧ページで確認することができます。
HDC1080用のプラグインが収録されているファームウェアは、 COLLECTION A でした(公式GitHubからダウンロードしたMegaリリースより取り出し)。
1 |
ESP_Easy_mega_20220809_collection_A_ESP8266_4M1M_VCC.bin 1,039,456 Byte |
既にESP Easyが稼働しているESP-12Eをこのファームウェアへ更新すると、デバイスの追加プルダウンにHDC1080が見つかります。
I2Cスキャンでも、2つのI2Cセンサを正常に認識してくれました。
2つのセンサをデバイスとしてESP Easyに登録完了して計測を始めると、湿度はともかく温度はBME280の方が高めの数値が常に計測される感じでした。
ThingSpeak上で解析
数日間運用して、ThingSpeak(関連記事はこちら)へ計測データを送信。
さらに両センサの差異を次のようなMATLAB Visualization Appを組んで、1つのグラフに重ねてプロットしてみます。
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 |
readChannelID = XXXXXXX; readAPIKey = '##################'; TempB_ID = 1; TempH_ID = 4; HumidB_ID = 2; HumidH_ID = 5; [data, timeStamps] = thingSpeakRead(readChannelID, ... 'Fields',[TempB_ID TempH_ID HumidB_ID HumidH_ID], ... 'NumPoints', 300, 'ReadKey', readAPIKey); TempB_Data = data(:, 1); TempH_Data = data(:, 2); HumidB_Data = data(:, 3); HumidH_Data = data(:, 4); % Visualize the data yyaxis left plot(timeStamps, TempB_Data, '*', timeStamps, TempH_Data, '+'); ylabel('Temp C'); yyaxis right plot(timeStamps, HumidB_Data, '*', timeStamps, HumidH_Data, '+'); ylabel('Humid %'); %legend('Temp BME280', 'Temp HDC1080', 'Location', 'Best'); %legend('Humid BME280', 'Humid HDC1080', 'Location', 'SouthWest'); legend('Temp BME280', 'Temp HDC1080', 'Humid BME280', 'Humid HDC1080', 'Location', 'Best'); title('BME280 vs HDC1080 Temp/Humid Comparison'); |
BME280とHDC1080の温湿度を比較してみると、温度で両者3℃程度、湿度は5%程度の差があるものの、傾向はほぼ同じでした。
こうした計測値の開きは以前、同じセンサを冗長化計測していたときにも見られたことから、個体差なのかも知れません。
次ページでは、HDC1080後継のHDC2080搭載モジュールを紹介します。