目次
はじめに
読者の方から温湿度センサ Si7021 が動作しないとの指摘を受けて、調べてみたところ、海外の通販サイトでは Si7021 を検索しても、 別のセンサ HTU21D の方が多くマッチすることが分かりました。

また、上記の5番目のショップでは、掲載されている写真は HTU21D なのに、ページ内の解説が Si7021 となっていて、販売店が適切に扱っていない可能性がありました。
原因
Si7021 と HTU21D はピン配列が同じなので、モジュール基板が共通設計となっており、基板上の Si7021 の文字で誤解を与えやすい点と、ライブラリによっては Si7021 用のものが HTU21D で動作してしまう点で、ショップが誤認していることが原因と思われます。
他にもバリエーションとして Si7012を選択できるケースや、「replace Si7012」といったタイトルをつけているケースなどがあります。これらの場合も「Si7021」の検索から HTU21D が表示されますが、商品名や説明から見分けることが出来るでしょう。
※商品名や説明は、発注前に、必ず再確認しましょう。
外観で見分ける方法
前述の通り、商品名や商品説明、基板の印字では見分けれない場合があるので、センサICを写真で確認します。
Si7021の場合は、センサICの上面が白い正方形のフィルタが取り付けられています(注意:このフィルタは特性の維持に必要なものなので剥がさずに使用します)。
下図が Si7021 です。

ただし、HTU21D についてもフィルタが貼られた HTU21DF が存在します。
HTU21DF のフィルタは長方形なので、フィルタの形状に留意すれば、見分けれるでしょう。
下図は HTU21D と HTU21DF です。

Si7020 にも注意する
Si7021よりも湿度の測定精度が低いSi7020も存在します。Si7021 は±3%、Si7020 は±4%です。こちらは、購入前に確認することは困難だと思います。
下図は、左から Si7021、 Si7020、 HTU21Dを並べてみた写真です。

価格で見分ける方法
Silicon Labs 製 Si7021 は、低価格な温湿度センサとして普及しましたが、HTU21D に比べると高価です。Si7021の場合、最低でも $2~$3 程度はするので、300円以下のものは、HTU21D である可能性が高くなります。
下図は、バリエーションとして Si7021 または HTU21D が選択できるようになっているショップで、それぞれの価格差を調べた結果です。このショップの場合、約5.5倍の価格差がありました。
下図の左側が HTU21D で右側が Si7021 です。

ただし、価格で見分ける方法の場合は、Si7021 を安く提供しているショップからの購入が出来なくなってしまいます。海外サイトを使用する場合の保険料と考えれば良いでしょう。
シリアル番号で確認する方法
購入したあとであれば、センサ内に保持されているシリアル番号(ID)から型番を確認することが出来ます。
Si7021、 Si7020、 HTU21D に対応した ESP32 用のサンプル・プログラム(esp32_si7021.ino)とArduino UNO用(ard_uno_si7020.ino)を用意し、下記の筆者の GitHub Pages に公開しました。
GitHub Pages (si7021):
https://git.bokunimo.com/si7021/
ZIP形式ダウンロード:
https://github.com/bokunimowakaru/si7021/zipball/master
ESP32との接続方法は、下図のようにブレッドボード経由で接続します。ピン番号は GitHub Pages に記載のとおり、IO12にI2CのSDA、IO14にI2CのSCLを接続します。本例では、電源とGNDも IOから供給しています。

プログラムを ESP32 に書き込み後、 Si7021 を接続し、ENボタン(リセットボタン)を推すと、シリアル・モニタにログが出力されるので、 ID2 を確認してください。
Si7021の場合:
ID2 = 0x15ffffff, Si7021
Si7020の場合:
ID2 = 0x14ffffff, Si7020
HTU21Dの場合:
ID2 = 0x32######, HTU21
なお、ID2が0x32から始まらない HTU21D があるかもしれません。この場合は「Unknown」と表示されます。
Si7021 と HTU21D の違い
似たような温湿度センサですが、Si7021 は Silicon Labs.製、HTU21D は Measurement Specialties (現 TE Connectivity)製です。
通信コマンドも似ています。データシートを見ると、 Si7021 のコマンドの一部が HTU21D で利用できることが分かります。

(Measurement Specialties社、データシートより)

(Silicon Labs.社、データシートより)
しかし、少なくとも、 Si7021 の場合はコマンド 0xE0 で湿度を測定した時の温度値を取得できるのに対し、 HTU21D ではサポートされていません。こういった違いで、Si7021 用のライブラリが HTU21D で動作しない場合があります(筆者が IoT Sensor Core として配布しているソフトが HTU21D で動作しなかった原因)。
性能の違い(不明)
性能面についても、下表のとおり仕様書上は大きな差はありません。しかし、実力としては、実績のある Si7021 の方が有利な可能性があります。
半導体センサ技術の先駆者である SENSIRION 社をはじめ、アナログの要素のノウハウをデジタル部分に組み込んでいるので、仕様書や初期性能だけで良し悪しを判断することは難しいからです。
型番 | 湿度の測定精度 |
Si7021 | ±3% |
Si7020 | ±4% |
HTU21D | ±3% |
HTU20D | ±5% |
HTU21D も老舗メーカ品
実は、HTU21D の開発元の Measurement Specialties (現 TE Connectivity) は、30年以上の歴史をもつセンサの老舗メーカーです。圧力計で長い歴史があるようです(参考文献=https://www.te.com/usa-en/products/brands/meas.html)。
半導体による温湿度センサは後発ですが、環境センサ全体の技術としては、半導体センサの先駆者 SENSIRION の2倍近く長い歴史のあるメーカーなのです。つまり、SENSIRION や、Silicon Labs.の中で戦えるだけの環境センサ全般のノウハウをもった会社であり、 HTU21D が Si7021 の問題点を解決している可能性も考えられます。少なくとも、コストについては、 HTU21D の方が優れています。
最後に
決して HTU21D が悪者ということではありません。温湿度センサを購入するときの選択肢の一つであり、とくにコスト面では明らかに優れています。筆者も、安価な温湿度センサとして他の安価品と一緒に購入していました(Si7021 とコマンドが似ていることは、今回の調査で知りました)。
しかし、Si7021 と HTU21D は違うデバイスです。Si7021 に関する記事やサンプル・プログラムを動かす目的であれば、Si7021 を購入したほうが無難でしょう。
by bokunimo.net