湿度センサの表示値はRHxx%と書かれています。相対湿度のことで、温度が±1°C変化すると、絶対湿度が変わらなくてもRHは±3%ずれます。したがって、湿度センサは温度を同時に測って補正した結果を出力しています。エアコンを入れ、50%に湿度と25°Cに保っている部屋でも、ドアを開けて人が入れば、制御しているコンピュータは大変です。湿度が手軽に測れるようになったのはつい最近です。初期のころはセラミックが使われ、汚れて劣化が起こり、寿命が短かった時代がありました。●湿度センサのカタログ・スペック入手しやすいセンサの主な特徴を調べました。1.71~3.6一つを選ぶとすれば、AM2322もしくはSHT31ですが、AM2322のリードのピッチが狭いので、SHT31を利用します。SHT31は2.6×2.6mmという小さなパッケージですが、秋月電子通商の変換基板付きは、ブレッドボードに挿して利用できます。同社のWebにはArduinoのライブラリが用意されています。ピッチ変換基板付きは、Adafruitやebayでも購入できます。●接続ラズパイとの接続時にプルアップ抵抗を取り外した状態ですが、そのままArduinoのI2Cバスに接続します。一緒にAQM1602も使います。(SCL)を使いました。SHT31およびAQM1602は前の実験でラズパイにつないだため、プルアップ抵抗を外しています。8.2kΩで5Vへプルアップ抵抗をつなぎました。+V接続が終わったらUSBケーブルをつなぎ、I2Cにつながっているデバイスを検出するスケッチi2c_scannerを動かします。●CRCI2Cバスはプリント基板上のような短い距離で使われることを想定しています。バスにぶら下がるデバイスが数十個と多くなると、並列に接続されるために容量が増え、波形がなまってくるので、整形しなおすICもNXPから出ています。データ転送速度が速くなるとノイズや電源のGNDの揺れなどでデータが化けることがあります。スレーブ・デバイス側でCRCコードを生成し、データと一緒に送ってきて、受け取ったマスタ側はデータからCRCを計算し、送られてきたCRCと一致したら、データが途中で化けていないと判断します。いうことは起こらないと信じて、送られてきたCRCを捨ててしまってもかまいません。湿度に変換したときに異常なデータだったら捨ててしまうという方法でもかまいませんが、なにをもって異常とするかは判断がむずかしいです。CRCの長さが8ビットだとCRC8と呼ぶようです。その中にも幾通りも計算式があります。CRC8-ATMはこちらの記事で使いました。x^8+x^5+x^4+1のCRCです。CRCの計算は、大きく分けて、筆算のようにプログラムで解読する方法と、いったんテーブルを作っておき、それを引いて解読する二通りがあるようです。Adafruitのライブラリでは、次のように計算しています。crc;}マキシムの資料ではルックアップ・テーブルが掲載されています。X];End;ルックアップ・テーブルを利用しました。CRC-8-Dallas/Maximは1-Wireで使われるため、ビットの並びが逆になるので、reflect()で逆順にしています。計算結果も逆順にします。CRCの計算では2バイトのデータ処理に限定しています。周期的連続測定に設定しているので、連続して読み出しができます。Micro:bitでも使ったので、そちらの解説も参照ください。r;}(※)ビットの逆順は、こちらのプログラムを利用させていただきました。単発測定コマンド0x2400(繰り返し精度レベル;高、クロック・ストレッチは無効)を実行して読み取るように変更しました。(※1)プログラム・リストは、表示の関係でTabキーが無視されるので、スペースに代えてあります。リスト中を2回クリックすると全選択になるので、CTRL-Cでコピーし、テキスト・エディタにCTRL-Vで貼り付けて利用してください。IDEのテキスト・エディタで修正してください。AQM1602のライブラリの組み込み方はこちらの記事を参照ください。IDEをPCにインストールしてプログラムを書き始めることです。R3には、性能や機能がほとんど同じ製品がたくさん市販されています。+」を取り上げています。IDEで開発できるマイコンはCortex-M0~M4の製品もあります。ここではソニー「Spresense」を取り上げています。Wi-Fiもすぐに利用できるのが「ESP32」です。ライセンスで提供されています。