以前、ArduinoでI2C制御する方法について解説しました。ArduinoスケッチでESP32のI2Cを使う方法I2Cとは、SCLとSDAの2線だけでデバイス間の通信ができる規格です。Pico)を使ってI2Cデバイスを制御するMicroPythonのプログラミング方法を説明していきます。今回も温湿度センサー:SHT31の値を読み取ってみようと思います。Pico、MicroPythonの環境構築についてはこちらをご覧ください。Pico(ラズピコ)は数百円で買えて手軽に使えるマイコンボードです。接続図ラズピコをマスター、SHT31をスレーブとして使います。電源、GND、そしてGPIO4をSDA、GPIO5をSCLに接続します。MicroPythonのコードプログラム全体は次のようになります。utime.sleep(1)ポイントとなる部分について解説していきます。I2Cの設定1行目でI2C用のモジュールを読み込んでいます。8行目でピンの設定と周波数の設定を行っています。idは0か1で指定し、使用するGPIOによって決まります。GPIO23書き込み11行目から、SHT31の初期設定を書き込んでいます。スレーブの指定したメモリへの書き込みの型は次のようになります。buf)addrスレーブ機器のアドレスmemaddrスレーブのメモリアドレスbuf書き込む情報。11行目のソフトリセットを例に挙げます。データシートの記載は次のようになっています。したがって、memaddr=0x30、buf=b’\xA2’と記載します。読み取り28行目でデータの読み取りを行っています。スレーブの指定したメモリからの値の読み取りの型は次のようになります。測定データは下図のように6バイトで読み出されるので、nbytes=6としています。実行結果ラズピコとスマホを接続して動作させました。Terminalというアプリを使って、ラズピコからシリアル出力した温湿度を表示させています。2022次は、モニタした湿度をフィードバックして、部屋の湿度が一定になるように加湿器をコントロールしてみます。加湿器をラズパイでPID制御して湿度を一定にコントロールしてみた我が家の加湿器は湿度コントロールが付いていないので、床がびちょびちょに濡れてしまうことが多々ありました。プロフィールりょうのすけアナログ回路設計者です。現在はベンチャーに所属して生体センシングをやってます。ハードでもソフトでも、何かしら作ることが好きです。