【I²C通信を可視化!】ESP32-S3とSHT30で波形を見てみよう
このブログでは、ESP32-S3とSHT30温湿度センサーを接続し、I²C通信の波形をオシロスコープで観察する様子を紹介します。
M5Stackの「ENVⅢセンサー」にも使われているSHT30を題材に、PlatformIOを使ったプログラミングから、実際の通信波形の解析までを体験していきます!
使用するもの
- ESP32-S3開発ボード
- SHT30温湿度センサー(M5Stack ENVⅢなど)
- オシロスコープ(2ch以上)
- USBケーブル
- Bluetooth機能付き&インターネット接続可能なPC(VS Code + PlatformIO)
プロジェクトの準備と書き込み確認
まずはPlatformIOで新しいプロジェクトを作成し、ESP32-S3に書き込みができるか確認します。 ESP32-S3は初期状態でI²Cピンが決まっていないため、任意のGPIOピンをI²C通信線として設定する必要があります。
今回は、GPIO20(SDA)とGPIO21(SCL)を使用しました。
Wire.begin(20, 21); // SDA, SCL
ライブラリの導入とサンプルコードのビルド
PlatformIOのライブラリ検索から「SHT30」と入力し、SHT31ライブラリを導入(SHT30にも対応)。
サンプルコードをコピーしてビルドすると、無事に成功!
この時点ではコードの詳細は理解していませんが、まずは動作確認を優先します。
センサーの接続とシリアルモニターでの確認
ESP32-S3とSHT30を接続し、シリアルモニターを起動してリセット。
すると、室温に近い温度(例:18.9℃)が表示され、センサーが正しく動作していることが確認できました。
コード内では、ヒーターのON/OFFや10秒ごとのデータ取得処理が行われており、3回分の温度データが出力される仕様になっています。
I²C通信の波形をオシロスコープで観察!
オシロスコープの設定:
- チャンネル1:クロック(SCL)
- チャンネル2:データ(SDA)
ESP32-S3をリセットして波形を観察すると、I²Cのスタートコンディション(クロックがHighのときにデータがLowになる)が確認できました。
スレーブアドレスの確認
SHT30のスレーブアドレスは 0x44(2進数で 1000100)。
波形を読み取ると、先頭7ビットがアドレス、8ビット目がR/Wビット、9ビット目がACKビットで構成されていることがわかります。
ソースコードと波形の照合
波形から確認できた送信データ:
- 0x44(スレーブアドレス)
- 0x30A2(ソフトリセットコマンド)
ソースコードを確認すると、begin() 関数内で reset(false) が呼ばれ、内部で writeCommand(0x30A2) が実行されていることがわかりました。
つまり、波形とソースコードの動作が一致していることが確認できました!
まとめ
今回の内容を通して、以下のことが学べました:
- ESP32-S3では任意のGPIOピンをI²C通信に割り当て可能
- PlatformIOでの開発環境構築とライブラリ導入方法
- SHT30センサーの基本的な使い方とデータ取得方法
- オシロスコープを使ったI²C通信の波形解析
I²C通信の仕組みを実際の波形で確認できる体験はとても貴重です!
センサーの動作確認だけでなく、通信プロトコルの理解にもつながるので、ぜひ試してみてください。
質問や感想があれば、コメントで教えてくださいね!
それでは、また次回の実験でお会いしましょう〜💡
