ESP32のMicroPythonで温湿度センサーを使う方法
この記事では、ESP32とMicroPythonを使って温湿度センサーの値を取得する方法を解説します。
この記事で学べること
- I2Cインタフェース
- ESP32と温湿度センサーの接続方法
- MicroPythonのコード例
- 測定データの確認方法
ステップごとの解説
- 必要な部品を準備する
今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
M5StampS3は、Amazon、スイッチサイエンス社、マルツエレック社などで購入することができます。 - M5StampS3にMicroPythonをインストールする
前回の記事を参考にMicroPythonをインストールします。 - M5StampS3をPCに接続する
M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。必要な部品を準備する
ls -l /dev/tty.usbmodem*
crw-rw-rw- 1 root wheel 0x9000006 8 24 16:37 /dev/tty.usbmodem11401
- 温湿度センサー
今回は温湿度センサーとして、ボッシュ(BOSCH)製総合環境センサBME680を使用したセンサモジュールを使います。温度、湿度、圧力(気圧)に加えガス(有機溶剤、アルコール等)の検出が可能です。基板上にI2CレベルコンバータICを実装しているので、M5StampS3とはI2Cインタフェース接続となります。
センサーモジュールのマニュアルはここにあります。

- I2Cインタフェースとは
I²C(Inter-Integrated Circuit)は、マイコンとセンサや液晶モジュールなどの周辺デバイスを、たった 2本の信号線(SDAとSCL) で通信できるシリアル通信方式です。
「アイ・ツー・シー」または「アイ・スクエアド・シー」と読みます。 - I²Cの基本構成
I²C通信では、
マスター(Master):通信を制御する側(例:M5StampS3などのマイコン)
スレーブ(Slave):マスターの命令に従ってデータを送受信するデバイス(例:温度センサ、LCDモジュールなど)
という関係でやり取りします。通信に使うのは2本の信号線だけです:
信号線 3212_8e1ada-d5> |
名称 3212_df0a91-82> |
役割 3212_199353-35> |
SDA 3212_ccc1ca-3e> |
Serial Data Line 3212_478a10-4f> |
データの送受信用 3212_bd27dc-68> |
SCL 3212_fc4ec8-84> |
Serial Clock Line 3212_bb7de7-65> |
通信クロック(タイミング)を送る 3212_f1cdbe-b8> |
さらに、どのデバイスと通信するかを区別するために、各スレーブには「7ビットまたは10ビットのアドレス」 が割り当てられています。
- 通信の仕組み
1. **マスターがスタート信号(Start Condition)**を送信
2. スレーブアドレスを送って、どの機器と通信するか指定
3. 読み取り(Read)か書き込み(Write)を指定
4. データの送受信
5. **ストップ信号(Stop Condition)**で通信終了
通信は常にマスター主導で行われ、スレーブはそれに応答します。 - 🔋 I²Cの特徴
✅ 配線が少ない(SDAとSCLの2本+電源・GND)
✅ 複数のデバイスを同じバス上に接続できる(アドレスで区別)
✅ クロック同期型通信で安定したデータ転送
⚠️ 通信距離は短め(数十センチ程度までが目安)
- M5StampS3のI2Cインタフェース
M5StampS3のI2CインタフェースであるSDAとSCLは下図をみると、GPIO13がSDA、GPIO15がSCLであることがわかります。

- M5StampS3とBME680モジュールとの接続
BME680のSDAとM5StampS3のSDA(GPIO13)、BME680のSCLとM5StampS3のSCL(GPIO15)を接続します。

- BME680モジュールとM5StampS3をブレッドボード上で接続する
下表と写真を参考に接続します。
ジャンパーワイヤは、秋月電子やAmazonで入手できます。
部品 3212_98fe9b-a6> |
ピン 3212_5fb161-ea> |
ブレッドボードマトリックス番号 3212_8061ed-5f> |
M5StampS3 3212_c41b79-e9> |
G1 3212_41de31-fd> |
22 – I 3212_639442-7a> |
3212_3a2632-de> |
G3 3212_1d7060-60> |
23 – I 3212_82f9d6-39> |
3212_5f63bd-7f> |
G5 3212_c6c6fd-0c> |
24 – I 3212_ebfa40-53> |
3212_ba7dfe-95> |
G7 3212_58498b-28> |
25 – I 3212_27b484-b4> |
3212_b91775-e8> |
G9 3212_fa74cf-1b> |
26 – I 3212_2c3903-4c> |
3212_bafb7d-8a> |
GND 3212_a5f29e-cb> |
27 – I 3212_d89465-d6> |
3212_e827f4-3b> |
5V 3212_591820-71> |
28 – I 3212_095244-80> |
3212_d77c20-e7> |
G13 3212_ac0a1c-eb> |
29 – I 3212_419a68-ec> |
3212_eec492-31> |
G15 3212_b763df-9c> |
30 – I 3212_7356a3-69> |
3212_9c6b99-a2> |
3V3 3212_aa1534-b9> |
25 – E 3212_b0d6f6-91> |
3212_859817-95> |
G43 3212_ebf713-5e> |
26 – E 3212_a49b24-00> |
3212_b19c1d-fd> |
G44 3212_9a6869-0b> |
27 – E 3212_e35c5b-1c> |
3212_589388-93> |
EN 3212_8cd354-1f> |
28 – E 3212_7103c0-1b> |
3212_87bece-7c> |
G0 3212_33173c-f6> |
29 – E 3212_3f3788-69> |
3212_ed321b-44> |
GND 3212_b4839a-93> |
30 – E 3212_92aa77-b3> |
BME680モジュール 3212_4e0f87-d7> |
VIN 3212_782218-55> |
9 – H 3212_1150ce-49> |
3212_968d0d-07> |
SCL 3212_cc53a5-36> |
8 – H 3212_cc8305-85> |
3212_60c3b1-b0> |
SDA 3212_c385a6-12> |
7 – H 3212_ccf451-50> |
3212_704652-f9> |
GND 3212_a87434-a6> |
6 – H 3212_87033b-a8> |
ジャンパーワイヤ 3212_dd5978-27> |
ブレッドボードマトリックス番号 3212_e25d52-ca> |
ジャンパーワイヤ1 3212_ba7bf2-69> |
28 – L === 5V 3212_cb473c-fb> |
ジャンパーワイヤ2 3212_1e8037-0a> |
27 – L === GND 3212_ebd9c7-22> |
ジャンパーワイヤ3 3212_8ebba0-1e> |
30 – J === 8 – J 3212_fae3d5-35> |
ジャンパーワイヤ4 3212_6eea85-63> |
29 – K === 7 – K 3212_1347f1-ae> |
ジャンパーワイヤ5 3212_d68aab-ce> |
9 – L === 5V 3212_fd5c27-36> |
ジャンパーワイヤ6 3212_e6c953-b8> |
6 – L === GND 3212_845ddd-dd> |

- M5StampS3をPCに接続する
M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。
ls -l /dev/tty.usbmodem*
crw-rw-rw- 1 root wheel 0x9000006 8 24 16:37 /dev/tty.usbmodem11401
- VSCodeで以前、作ったプロジェクトを選択する
VSCodeを起動して、以前、作ったプロジェクトを選択します。

- エディタで新しいファイルを作成する
左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「temper.py」としました。

- BME680のドライバをインストールする
BME680には簡単に使えるようにドライバが公開されているので、インストールします。
モジュールはここにあるので、bme680.pyをダウンロードします。
ダウンロードしたら、bme680.pyをプロジェクトフォルダに保存します。保存したら、bme680.pyを選択して、右クリックから、「Upload file to Pico」をクリックすると、bme680.pyがM5StampS3内に保存されます。

- 下記コードをエディターで記入する
「temper.py」を選択すると、エディター画面が開くので、下記コードを記入して保存します。
from machine import Pin, I2C
import bme680
i2c = I2C(sda=Pin(13), scl=Pin(15))
bme = bme680.BME680_I2C(i2c)
print("temperature : %s" % bme.temperature)
print("humidity : %s" % bme.humidity)
print("pressure : %s" % bme.pressure)
print("gas : %s" % bme.gas)
- 「temper.py」を実行する
左のエクスプローラにて、「temper.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、REPL画面に下記のように、温度、湿度、圧力(気圧)、ガスが表示されます。
温度:temperature、湿度:humidity、圧力(気圧):pressure、ガス:gas
MicroPython v1.26.1 on 2025-09-11; Generic ESP32S3 module with ESP32S3
Type "help()" for more information or .help for custom vREPL commands.
>>>
temperature : 26.635664
humidity : 60.814304
pressure : 1024.4348
gas : 59693
>>>
まとめ
ESP32とMicroPythonを使えば、シンプルなコードで温度センサーを動かせます。応用すればIoTデバイスに簡単に組み込めます。