IoT

ESP32 × MicroPythonでWi-Fi接続IoTデバイスを自作する方法【初心者でもできる】

「ESP32ってよく聞くけど、何ができるの?」「MicroPythonって普通のPythonと何が違うの?」そんな疑問を持っている方、多いんじゃないでしょうか。

実はESP32 × MicroPythonの組み合わせ、IoT入門として最高に相性がいいんです。Wi-Fi機能が最初から内蔵されていて、Pythonに近い文法で書けるので、「マイコンって難しそう…」を「これならできそう!」に変えてくれる存在です。

今回はESP32にMicroPythonをセットアップして、Wi-Fi接続 → データ取得 → Webサーバー公開まで、一気に体験できる手順を解説します。ぜひ一緒に試してみましょう! 🚀


📌 この記事の対象読者・難易度

ESP32 microcontroller
ESP32 microcontroller / Photo by Tanha Tamanna Syed via Pexels
  • ✅ PythonをなんとなくさわったことがあるPython初〜中級者
  • ✅ マイコンやIoTに興味はあるけど何から始めればいいか迷っている方
  • ✅ ArduinoよりPythonで書きたい派の方

難易度は★★☆☆☆(初〜中級)です。Pythonの基礎(変数・関数・if文)がわかれば問題なく読み進められます。


🔧 ESP32とMicroPythonって何者?


ESP32とは

ESP32は、中国の Espressif Systems が開発した超小型マイコンモジュールです。イメージとしては「Wi-FiとBluetoothが最初から入っている、手のひらサイズの小さなコンピューター」です。

値段は1枚500〜1000円程度とかなりお手頃で、IoTデバイスの自作に世界中で使われています。

MicroPythonとは

MicroPythonは、マイコン向けに最適化された軽量なPython実装です。つまり「メモリが少ないマイコンでもPythonっぽくコードが書けるようにしたもの」です。

Arduinoだと書き方が独特ですが、MicroPythonはPythonに慣れている方なら構文がほぼそのまま使えます。これがとても大きなメリットです 😊


🛠️ 事前準備:必要なもの

  • ESP32開発ボード(例:ESP32-DevKitC、秋月電子やAmazonで購入可能)
  • USBケーブル(データ通信対応のもの)
  • PC(Windows / Mac / Linux どれでもOK)
  • Python 3.x(インストール済みであること)
  • esptool(ファームウェア書き込みツール)
  • mpremote または Thonny IDE(ファイル転送・実行ツール)

今回はThonny IDEを使う方法を中心に進めます。初心者の方にとって一番とっつきやすい環境です。


⚙️ STEP 1:MicroPythonファームウェアをESP32に書き込む

まず、ESP32にMicroPythonを動かすためのファームウェアを書き込みます。ざっくりとした流れがつかめるはずです 👇

①esptoolをインストール

pip install esptool

②MicroPythonのファームウェアをダウンロード

MicroPython公式サイト(micropython.org/download/ESP32_GENERIC/)からESP32用の最新 .bin ファイルをダウンロードします。

③フラッシュをクリアして書き込む

# まずフラッシュをクリア
esptool.py --chip esp32 --port COM3 erase_flash

# ファームウェアを書き込む(COMポートはご自身の環境に合わせて変更)
esptool.py --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-20240602-v1.23.0.bin

⚠️ Windowsでは COM3、MacやLinuxでは /dev/tty.usbserial-xxxx のような形式になります。デバイスマネージャー(Windows)やターミナルの ls /dev/tty.*(Mac)で確認しておきましょう。


📡 STEP 2:Wi-Fiに接続してみよう

ファームウェアが入ったら、いよいよコードを書きます!まずはWi-Fi接続から始めましょう。

ThonnyのエディタでESP32に接続して、以下のコードを実行してみてください。

import network  # Wi-Fi制御モジュール
import time

# Wi-Fiの接続情報
SSID = "あなたのSSID"
PASSWORD = "あなたのパスワード"

def connect_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)  # ステーションモード(子機として接続)
    wlan.active(True)                    # Wi-Fiを有効化

    if not wlan.isconnected():
        print("Wi-Fi接続中...")
        wlan.connect(ssid, password)

        # 接続されるまで待機(最大10秒)
        timeout = 10
        while not wlan.isconnected() and timeout > 0:
            time.sleep(1)
            timeout -= 1
            print(f"残り待機時間: {timeout}秒")

    if wlan.isconnected():
        print("✅ Wi-Fi接続成功!")
        print("IPアドレス:", wlan.ifconfig()[0])
    else:
        print("❌ 接続失敗。SSIDとパスワードを確認してください。")

connect_wifi(SSID, PASSWORD)

ポイントをまとめるとこんな感じです 👇

  • network.STA_IF はステーションモード。スマホがWi-Fiに繋がる感覚と同じです
  • wlan.ifconfig()[0] で取得できるIPアドレスを控えておいてください。後で使います
  • 接続に10秒以上かかる場合はSSID・パスワードの確認を 🔍

🌐 STEP 3:ESP32でシンプルなWebサーバーを立ててみよう

Wi-Fi接続ができたら、次はESP32自体をWebサーバーにしてみましょう!ブラウザからアクセスすると、センサーの値などが見られるようになります。「むずかしそう」と思うかもしれませんが、コードは意外とシンプルですよ 😄

import network
import socket
import time

SSID = "あなたのSSID"
PASSWORD = "あなたのパスワード"

# --- Wi-Fi接続 ---
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
    time.sleep(0.5)
print("IPアドレス:", wlan.ifconfig()[0])

# --- Webサーバー起動 ---
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]  # ポート80でリッスン
s = socket.socket()
s.bind(addr)
s.listen(1)
print("Webサーバー起動中...ブラウザでアクセスしてみてください")

while True:
    conn, addr = s.accept()  # クライアントの接続を待つ
    print("接続元:", addr)
    request = conn.recv(1024)  # リクエストを受信

    # ダミーのセンサー値(実際はセンサーから読み取る)
    temperature = 25.3
    humidity = 60.1

    # レスポンスHTMLを作成
    html = f"""
<html>
<head><meta charset='utf-8'><title>ESP32 IoTデバイス</title></head>
<body>
  <h1>🌡️ ESP32 センサーダッシュボード</h1>
  <p>温度: <strong>{temperature} ℃</strong></p>
  <p>湿度: <strong>{humidity} %</strong></p>
</body>
</html>"""

    # HTTPレスポンスを送信
    conn.send("HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n")
    conn.send(html)
    conn.close()  # 接続を閉じる

ここが重要です 👇

  • socket モジュールを使うことで、ESP32が「Webサーバー」として機能します
  • ブラウザから http://(先ほど控えたIPアドレス) にアクセスするとページが表示されます
  • 温度・湿度はダミー値ですが、DHT11などのセンサーを繋げばリアルな値が表示できます 🌡️

💡 応用アイデア:IoTデバイスとして発展させよう


ここまでできてしまえば、あとは応用するだけです!アイデアをいくつか挙げておきますね。

  • 🌡️ 温湿度モニター:DHT11 / DHT22センサーと組み合わせて部屋の環境をブラウザで確認
  • 💡 スマートLED:Webページのボタンでリモートから照明をON/OFF
  • 📊 データロガー:センサー値を定期的にサーバーやGoogle Sheetsに送信
  • 🔔 アラート通知:値が閾値を超えたらLINE NotifyやSlack Webhookで通知

MicroPythonの urequests モジュールを使えばHTTPリクエストも簡単に送れるので、外部APIとの連携も一気に解決できるかもしれません!


📝 まとめ

今回はESP32 × MicroPythonで、Wi-Fi接続からシンプルなWebサーバー公開までの流れを解説しました。

  • ESP32はWi-Fi内蔵の小型マイコン。IoT入門に最適
  • MicroPythonでPythonライクな構文がそのまま使える
  • network モジュールでWi-Fi接続、socket モジュールでWebサーバーが実現できる
  • ✅ センサーを組み合わせれば本格的なIoTデバイスに発展できる

「マイコンって難しそう…」と思っていた方も、Pythonの知識を活かしてここまでできてしまうんですよね 😊 まずはESP32を1枚手に入れて、ぜひ試してみてください!一緒に手を動かしながら学んでいきましょう。

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です