ESP32のMicroPythonで無線LAN経由でWEB APIに接続する方法

この記事では、ESP32とMicroPythonを使ってWEB APIに接続する方法を解説します。

この記事で学べること

  • ESP32でWEB APIに接続する方法
  • 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. WEB APIとは?
    インターネットを通じて、他のサービスやアプリとデータをやり取りするための「窓口」 のこと。
  2. 具体例
    • 天気予報アプリ → 天気サービスの API から気温を取得
    • マップアプリ → Google Maps API を使って地図を表示
    • Shopify → Webhook や API で注文情報を外部に送る
    • マイクロサービス → お互いの API を使って通信
  3. なぜ便利?
    • アプリ同士が 決まったルールで会話できる
    • サーバーに直接ログインしなくても データを安全に操作できる
    • 開発の手間が減る(機能を API に任せられる)
  4. よくある形
    • REST API(最も一般的)
    • GraphQL
    • Webhook(API から「通知」を送る仕組み)
    • JSON がデータ形式としてよく使われる
  5. 天気APIを利用する
    今回は、無料で利用できる天気APIであるOpen Weather MapのAPIを使います。
  6. APIを利用するために登録する
    Open Weather Mapのページにアクセスして、右上のSign inをクリックします。
  1. アカウントを作成する
    アカウントを作成するために、Create an Accountをクリックします。
  1. 必要な情報を入力する
    Username、Email、Passwordを2回入力します。
    「I am 16 years old and over」、「I agree with Privacy Policy, Terms and conditions of sale and Websites terms and conditions of use」、それぞれ、16歳以上であること、プライバシーポリシー、規約に同意することにチェックをいれて、「私はロボットではありません」にチェックをいれて、「Create Account」をクリックします。
  1. APIの目的を入力する
    APIの目的を聞かれているので、Purposeの部分に記入し、Saveボタンを押します。
    今回は、Education/Scienceを選択しました。Companyは入力不要です。
  1.  メール認証をする
    メールを送信したと表示されるので、11で入力したメールをチェックします。
  1. メールを確認する
    OpenWeatherからメールが届きますので、「Verify your email」をクリックし、メール認証を行います。
  1. メール認証を完了する
    OpenWeatherMapのページが開いて、メール認証が完了したことが表示されます。
  1. APIキーを確認する
    My API Keysをクリックして、APIキーを確認します。
  1. APIキーを取得する
    Keyと書いてあるところが、利用できるAPI Keyとなります。
  1. API Callを作成する
    今回は、下図の赤枠のAPI Callを利用して、API Callを作成します。
https://api.openweathermap.org/data/2.5/weather?q=tokyo&appid=[my API Key]
  1. VSCodeで以前、作ったプロジェクトを選択する
    VSCodeを起動して、以前、作ったプロジェクトを選択します。
  1. エディタで新しいファイルを作成する
    左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「webapi1.py」としました。
  1. 下記コードをエディターで記入する
    「webapi1.py」を選択すると、エディター画面が開くので、下記コードを記入して保存します。
import urequests
import ujson

# 接続先のURLの指定
url = 'https://api.openweathermap.org/data/2.5/weather?q=tokyo&appid=[my API Key]&units=metric'

# WEBサーバからデータを取得
resp = urequests.get(url)
data = ujson.loads(resp.text)
print(data)
# 気温を取得する場合
print("気温:" + str(data["main"]["temp"]) + "℃") 
resp.close()
  1. 「webapi1.py」を実行する
    左のエクスプローラにて、「webapi1.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、REPL画面に下記のように、Open Weather APIから取得した天気データが表示されます。
MicroPython v1.26.1 on 2025-09-11; Generic ESP32S3 module with ESP32S3
Type "help()" for more information or .help for custom vREPL commands.

>>> 
{'timezone': 32400, 'cod': 200, 'dt': 1765109468, 'base': 'stations', 'weather': [{'id': 800, 'icon': '01n', 'main': 'Clear', 'description': 'clear sky'}], 'sys': {'country': 'JP', 'sunrise': 1765057057, 'sunset': 1765092469, 'id': 268395, 'type': 2}, 'name': 'Tokyo', 'clouds': {'all': 0}, 'coord': {'lon': 139.6917, 'lat': 35.6895}, 'visibility': 10000, 'wind': {'gust': 1.11, 'speed': 0.17, 'deg': 66}, 'id': 1850144, 'main': {'feels_like': 9.86, 'pressure': 1019, 'temp_max': 12.59, 'temp': 9.86, 'temp_min': 8.66, 'humidity': 58, 'sea_level': 1019, 'grnd_level': 1017}}
気温:9.86℃

>>> 
#JSON整形

{
    "timezone": 32400,   #UTCからのタイムゾーン 32400秒 = 9時間
    "cod": 200,
    "dt": 1765109468,    #API Callした時間 UnixTime 1765109468 は、2025-12-07 21:11:08です
    "base": "stations",
    "weather": [
        {
            "id": 800,
            "icon": "01n",
            "main": "Clear",            #晴れ
            "description": "clear sky"  #晴れ渡った空
        }
    ],
    "sys": {
        "country": "JP",
        "sunrise": 1765057057,   #日の出 UnixTime 1765057057 は、2025-12-07 06:37:37です
        "sunset": 1765092469,    #日の入 UnixTime 1765092469 は、2025-12-07 16:27:49です
        "id": 268395,
        "type": 2
    },
    "name": "Tokyo",   #地域
    "clouds": {
        "all": 0
    },
    "coord": {
        "lon": 139.6917, #経度
        "lat": 35.6895    #緯度
    },
    "visibility": 10000,  #視界
    "wind": {
        "gust": 1.11,     #突風
        "speed": 0.17,    #風速
        "deg": 66         #風向
    },
    "id": 1850144,
    "main": {
        "feels_like": 9.86, #体感温度
        "pressure": 1019,   #気圧
        "temp_max": 12.59, #最高気温
        "temp": 9.86,    #気温 
        "temp_min": 8.66,  #最低気温
        "humidity": 58,     #湿度
        "sea_level": 1019,  #海水面の気圧
        "grnd_level": 1017  #地表面の気圧
    }
}

まとめ

ESP32とMicroPythonを使えば、シンプルなコードでWEB APIからデータを取得できます。応用すればIoTデバイスに簡単に組み込めます。

類似投稿