【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通信の仕組みを実際の波形で確認できる体験はとても貴重です!
センサーの動作確認だけでなく、通信プロトコルの理解にもつながるので、ぜひ試してみてください。

質問や感想があれば、コメントで教えてくださいね!
それでは、また次回の実験でお会いしましょう〜💡

error: コンテンツ保護のため右クリック使用禁止