ESP32のMicroPythonで温湿度センサーを使う方法

この記事では、ESP32とMicroPythonを使って温湿度センサーの値を取得する方法を解説します。

この記事で学べること

  • I2Cインタフェース
  • ESP32と温湿度センサーの接続方法
  • MicroPythonのコード例
  • 測定データの確認方法

ステップごとの解説

  1. 必要な部品を準備する
    今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
    M5StampS3は、Amazonスイッチサイエンス社マルツエレック社などで購入することができます。
  2. M5StampS3にMicroPythonをインストールする
    前回の記事を参考にMicroPythonをインストールします。
  3. M5StampS3をPCに接続する
    M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。必要な部品を準備する
ls -l /dev/tty.usbmodem*
crw-rw-rw-  1 root  wheel  0x9000006  8 24 16:37 /dev/tty.usbmodem11401
  1. 温湿度センサー
    今回は温湿度センサーとして、ボッシュ(BOSCH)製総合環境センサBME680を使用したセンサモジュールを使います。温度、湿度、圧力(気圧)に加えガス(有機溶剤、アルコール等)の検出が可能です。基板上にI2CレベルコンバータICを実装しているので、M5StampS3とはI2Cインタフェース接続となります。
    センサーモジュールのマニュアルはここにあります。
BME680
  1. I2Cインタフェースとは
    I²C(Inter-Integrated Circuit)は、マイコンとセンサや液晶モジュールなどの周辺デバイスを、たった 2本の信号線(SDAとSCL) で通信できるシリアル通信方式です。
    「アイ・ツー・シー」または「アイ・スクエアド・シー」と読みます。
  2. I²Cの基本構成
    I²C通信では、
    マスター(Master):通信を制御する側(例:M5StampS3などのマイコン)
    スレーブ(Slave):マスターの命令に従ってデータを送受信するデバイス(例:温度センサ、LCDモジュールなど)
    という関係でやり取りします。通信に使うのは2本の信号線だけです:

信号線

名称

役割

SDA

Serial Data Line

データの送受信用

SCL

Serial Clock Line

通信クロック(タイミング)を送る

さらに、どのデバイスと通信するかを区別するために、各スレーブには「7ビットまたは10ビットのアドレス」 が割り当てられています。

  1. 通信の仕組み
    1. **マスターがスタート信号(Start Condition)**を送信
    2. スレーブアドレスを送って、どの機器と通信するか指定
    3. 読み取り(Read)か書き込み(Write)を指定
    4. データの送受信
    5. **ストップ信号(Stop Condition)**で通信終了
    通信は常にマスター主導で行われ、スレーブはそれに応答します。
  2. 🔋 I²Cの特徴
    配線が少ない(SDAとSCLの2本+電源・GND)
    複数のデバイスを同じバス上に接続できる(アドレスで区別)
    クロック同期型通信で安定したデータ転送
    ⚠️ 通信距離は短め(数十センチ程度までが目安)
  1. M5StampS3のI2Cインタフェース
    M5StampS3のI2CインタフェースであるSDAとSCLは下図をみると、GPIO13がSDA、GPIO15がSCLであることがわかります。
  1. M5StampS3とBME680モジュールとの接続
    BME680のSDAとM5StampS3のSDA(GPIO13)、BME680のSCLとM5StampS3のSCL(GPIO15)を接続します。
  1. BME680モジュールとM5StampS3をブレッドボード上で接続する
    下表と写真を参考に接続します。
    ジャンパーワイヤは、秋月電子やAmazonで入手できます。

部品

ピン

ブレッドボードマトリックス番号

M5StampS3

G1

22 – I

G3

23 – I

G5

24 – I

G7

25 – I

G9

26 – I

GND

27 – I

5V

28 – I

G13

29 – I

G15

30 – I

3V3

25 – E

G43

26 – E

G44

27 – E

EN

28 – E

G0

29 – E

GND

30 – E

BME680モジュール

VIN

9 – H

SCL

8 – H

SDA

7 – H

GND

6 – H

ジャンパーワイヤ

ブレッドボードマトリックス番号

ジャンパーワイヤ1

28 – L === 5V

ジャンパーワイヤ2

27 – L === GND

ジャンパーワイヤ3

30 – J === 8 – J

ジャンパーワイヤ4

29 – K === 7 – K

ジャンパーワイヤ5

9 – L === 5V

ジャンパーワイヤ6

6 – L === GND

  1. M5StampS3をPCに接続する
    M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。
ls -l /dev/tty.usbmodem*
crw-rw-rw-  1 root  wheel  0x9000006  8 24 16:37 /dev/tty.usbmodem11401
  1. VSCodeで以前、作ったプロジェクトを選択する
    VSCodeを起動して、以前、作ったプロジェクトを選択します。
  1. エディタで新しいファイルを作成する
    左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「temper.py」としました。
  1. BME680のドライバをインストールする
    BME680には簡単に使えるようにドライバが公開されているので、インストールします。
    モジュールはここにあるので、bme680.pyをダウンロードします。
    ダウンロードしたら、bme680.pyをプロジェクトフォルダに保存します。保存したら、bme680.pyを選択して、右クリックから、「Upload file to Pico」をクリックすると、bme680.pyがM5StampS3内に保存されます。
  1. 下記コードをエディターで記入する
    「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)
  1. 「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デバイスに簡単に組み込めます。

類似投稿