TsukuLab
Eta stat'ya na 日本語. Versiya na Русский gotovitsya.
Pervye shagi

ESP32 Arduino IDE入門|初期設定と書き込み

Obnovleno: 2026-03-19 20:02:55中村 拓也(なかむら たくや)

『ESP32』をArduino IDE 2で今日から動かしたい初心者の方向けに、定番のESP32 DevKitC系ボードを前提に、ボード定義の追加からボードとポートの選択、『WiFiScan』の書き込み、シリアルモニタを115200bpsに合わせて結果を読むところまで、最短ルートで通します。
Espressifの公式情報でも、ESP32はWi‑FiとBluetoothを内蔵した低コストのマイコンとして位置づけられており、最初の一台として無線の入口に入りやすい題材です(Espressif ESP32 製品概要)。

筆者のワークショップでは、最初の成功体験に『WiFiScan』を使い、5〜10分で「電波が見えた」と体感してもらう流れにすると、途中で止まる人がぐっと減ります。
LEDを点ける前に無線が見えると、Arduino UNOの次に何が広がるのかが一気に伝わるからです。

この記事の軸は、最初はESP-IDFまで広げず、『Arduino IDE』で確実に一回成功することです。
ボード選びで外しにくい型番、触らないほうがよいGPIO、書き込みで止まったときのUSBケーブル・ドライバ・BOOTボタン・ポートの切り分けまで、最初につまずく場所を先回りして一つずつ片づけます。

関連記事Arduino入門|初心者向けの使い方と最初のプロジェクト[Arduino](https://docs.arduino.cc/software/ide-v2/)を今日から始めたい人向けに、購入前の準備から[Arduino IDE](https://docs.arduino.cc/software/ide-v2/)の導入までを30〜60分で一直線にたどれる形にまとめました。最初のLチカ(内蔵LEDの点滅)や外部LEDの点滅まで、配線図とコードをそのまま再現できる手順に絞って解説します。

ESP32とは?Arduinoより何がうれしいのか

ESP32の基本仕様と機能

『ESP32』は、Espressifが展開するWi‑FiとBluetooth内蔵の32bitマイコンSoCです。
入門記事では初代『ESP32』系の定番ボードを軸に見ると整理しやすく、CPUは最大240MHz級、無線を標準で積んだままArduino IDE 2で扱えるのが大きな魅力です。
ESP8266の次に選ばれる存在として広く定着したのも、この「無線付きなのに始めるまでが短い」という立ち位置によるところが大きいです。

ここでいうSoCは、CPUやメモリ制御、無線機能などを1つのチップにまとめたものです。
Espressif ESP32 製品概要でも、低コストでWi‑FiとBluetoothを備えた製品群として案内されています。
動作温度範囲は公式情報で-40℃〜+125℃とされており、スペック表だけ見ると守備範囲の広いチップだと分かります。
ただし、Wi‑Fiの通信速度は理論値だけで見ないほうがよく、実効速度は使い方で変わります。
公式フォーラムでは条件を絞ったUDP実効の例もありますが、入門用途では「センサー値を送る」「簡易Webサーバーを立てる」「スマホから操作する」といったIoT用途に十分な余力がある、と捉えるのが実際的です。

周波数帯も最初に押さえておきたいところです。
入門向けとして流通しているESP32 DevKitC系やESP32-WROOM-32系の多くは2.4GHz帯のWi‑Fiを使います。
家庭用ルーターで5GHzが当たり前になっているので見落とされがちですが、最初の接続テストでは「ESP32側は2.4GHz帯が前提」と理解しておくと混乱が減ります。

IoT向けとして広く選ばれる理由は、無線が最初から載っていて、サンプルや解説が豊富で、しかも開発ボードの価格帯が手頃だからです。
一般的な開発ボードなら1,000円前後から1,400円程度で見つかることが多く、外付けのWi‑Fiモジュールや別電源基板を追加しなくても最初の通信確認まで進めます。
筆者の感覚でも、無線を後付けする構成に比べて配線本数が減るので、机の上が散らかりにくく、途中で「どのジャンパ線が何だったか」を見失いにくくなります。
ワークショップでも、この差は思った以上に効きます。

『Arduino IDE』の設定画面で「追加のボードマネージャのURL」に https://espressif.github.io/arduino-esp32/package_esp32_index.json を入れ、その後ボードマネージャでesp32を検索して導入します(代替URL: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json)。貼り付けたら「OK」を押して設定を確定させてください。

ボードパッケージを入れたあとは、ツールメニューからボードとしてESP32 Dev Moduleを選ぶのが定番です。
ESP32-DevKitC系やESP32-WROOM-32搭載ボードの多くは、この設定で最初の書き込みまで通せます。
次にシリアルポートを選びますが、ここでポートが出てこない場合、原因はIDEではなくUSBまわりにあることが珍しくありません。
USB-UART変換チップとしては『CP210x』CH340FT232Rがよく使われるので、PC側で対応ドライバが入っているかを見ます。
Windowsでは自動で入ることもありますが、認識しない場合は各社のVCPドライバを入れるとポートが現れます。
さらに、充電専用USBケーブルだとデータ通信ができないため、ドライバ以前の段階でつまずきます。
見た目では判別しにくく、ここが初心者の止まりどころです。

GitHub - espressif/arduino-esp32: Arduino core for the ESP32github.com

Arduino UNOとの違い

Arduino UNOとの違いは、まず無線が標準搭載であることです。
UNOではWi‑FiやBluetoothを使おうとすると、シールドや外付けモジュールを足す流れになりがちですが、『ESP32』ではその準備がいきなり省けます。
LED点滅やセンサー読み取りだけでなく、無線LANへの接続、Web経由の制御、スマホ連携まで一枚で届くのが、入門機としての面白さです。

処理能力やメモリ面でも差があります。
UNOは基礎学習に向いた定番ですが、『ESP32』は最大240MHz級の32bitマイコンで、無線通信をしながら複数の処理を回すようなIoT用途に向きます。
センサー値を読んでクラウドに送る、アクセスポイントの一覧を取得する、ブラウザからON/OFFする、といった流れを1枚で作りやすいのはこの強みです。
筆者が講座で『WiFiScan』を先に見せるのも、ここがUNOとの違いとして一番伝わりやすいからです。

一方で、扱いにくくなる点もあります。
まずピンの制約です。
『ESP32』はUNOより高機能ですが、どのGPIOでも自由に使えるわけではありません。
たとえばGPIO6〜GPIO11は内部フラッシュ接続に使われるため、一般用途では触らないほうが安全です。
GPIO34〜GPIO39は入力専用ですし、GPIO0やGPIO2、GPIO12、GPIO15は起動モードに関わるストラップピンなので、何も知らずに配線すると起動しないことがあります。
UNOの感覚で「空いている番号にとりあえずつなぐ」と、ここで止まります。

給電まわりにも差があります。
Wi‑Fi動作中は瞬間的に500mA級の電流を要求することがあり、USBポートやケーブルの質が不安定だと、書き込みや起動が不安定になります。
UNOでは通っていた細いケーブルが、『ESP32』では不調の原因になることがあります。
IDE上ではエラー表示でも、実際には電源降下やUSB通信不良ということが珍しくありません。
開発環境を整える段階でシリアルポートが見えない、書き込み中に止まる、というときに、ボード選択だけでなくケーブルとUSB-UARTドライバの確認まで一気に見るのはこのためです。

書き込み操作にもUNOとの違いがあります。
『ESP32』では、ボードによってはアップロード時にBOOTボタンを押してROMブートローダに入れる必要があります。
IDEでESP32 Dev Moduleを選び、正しいシリアルポートも選んでいるのに、書き込みログが Connecting... のまま進まないときは、この挙動が典型例です。
自動リセット回路が素直に働くボードならそのまま通りますが、安価な派生ボードでは手動操作が必要になることがあります。
UNOの「挿したらだいたいそのまま書ける」感覚とは、ここが少し違います。

SoC/モジュール/開発ボードの違い

『ESP32』まわりで初心者が混乱しやすいのが、SoCとモジュールと開発ボードが同じ名前で呼ばれがちなことです。
ここが整理できると、ボード選択や導入手順が一気に分かりやすくなります。

SoCは、さきほど触れた通り、CPUや無線機能を載せたチップそのものです。
『ESP32』という名前が最も狭い意味で指すのはこれです。
次にモジュールは、そのSoCにフラッシュやアンテナ周辺をまとめて実装した部品で、ESP32-WROOM-32のような名称で流通します。
さらに開発ボードは、そのモジュールを基板に載せ、USB端子、電源回路、USB-UART変換チップ、書き込み用ボタンまで含めた完成形です。
ESP32-DevKitCやその互換ボードがここに当たります。

この3層の違いを作業に引きつけると、初心者が最初に触るべきなのは開発ボードです。
モジュール単体ではUSB接続も電源回路もないので、ブレッドボード配線や書き込み回路の準備が別途必要になります。
開発ボードなら、PCとUSBケーブルでつないで、Arduino IDE 2にESP32ボードパッケージを追加し、ボードをESP32 Dev Moduleにして、シリアルポートを選ぶところまで一直線です。
記事や動画の情報量が多いのもこのクラスです。

ここでESP32 Dev Moduleというボード名の意味もつながります。
IDEに表示されるこの名前は、特定の一社製品だけでなく、ESP32-WROOM-32系モジュールを積んだ定番開発ボードの広い受け皿として使われることが多い設定名です。
手元の基板にDevKitCやWROOM-32と印字されていても、IDE上ではESP32 Dev Moduleを選ぶ場面が多いのはそのためです。

USB-UART変換チップの違いも、実務では見逃せません。
基板によって『CP210x』CH340FT232Rのいずれかが載っており、PCで認識されるシリアルポートはこのチップ経由で見えます。
ポートが出ないときは、まずこのチップ名を基板上で確認し、対応ドライバが入っているかを切り分けます。
『Silicon Labs』のCP210x VCP Drivers、WCHのCH340系ドライバ、FTDIのVCPドライバという対応関係を知っていると、原因調査が早くなります。
実際には「ドライバ未導入」と「充電専用ケーブル」の2つで止まるケースが多く、IDE側の設定より先にUSB接続の成立を見るほうが近道です。

TIP

Arduino IDE 2でESP32を使う最短手順は、追加のボードマネージャURLに package_esp32_index.json を登録し、ボードマネージャでesp32を導入して、ボードをESP32 Dev Module、ポートを認識されたシリアルデバイスに合わせる流れです。
途中でポートが出なければ、USB-UARTドライバとUSBケーブルを先に疑うと切り分けが進みます。

日本で無線機能を使う前提なら、技適の有無も開発ボード単位で見る項目です。
認証はSoC名ではなく、実際に使うモジュールや製品単位で扱われます。
つまり「ESP32だから同じ」ではなく、どの開発ボードを使うかで見方が変わります。
入門用としては、定番のDevKitC系やWROOM系を軸に選ぶと、情報の量と設定例が揃っていて進めやすい、という整理になります。
この記事は「どの開発ボードを選ぶか」で迷わないよう、実務で使いやすい選定基準を先に示す構成になっています。
次節では「最初に買うべき1枚」を具体的に挙げ、その理由をワークショップでの経験を交えて解説します。

初心者に無難な型番

最初の1枚なら、ESP32-DevKitC系、あるいは『Arduino IDE』のボード設定でESP32 Dev Moduleとして扱える開発ボードが無難です。
理由は単純で、情報量、作例、トラブル時の検索しやすさが揃っているからです。
ESP32ファミリーは派生が多く、名前だけ見て選ぶとC3S3CAMのような別系統まで混ざってきますが、入門段階では初代ESP32系の定番ボードに寄せたほうが、記事の手順と画面が一致しやすく、最初の書き込みまでが短くなります。

ここでいう「無難」は、性能が突出しているという意味ではありません。
ワークショップでも、受講者が最初に止まりやすいのはCPU性能ではなく、ボード設定名、USB接続、書き込み回路、サンプルの再現性です。
ESP32-DevKitC系はそのあたりの前例が多く、困ったときにESP32 Dev Module前提の解説へそのまま乗れます。
『Arduino core for the ESP32』のプロジェクトでも、ESP32向けの開発フローが継続して整理されていて、Arduino系の学習導線との相性が良いです。

モジュール単体より開発ボードを勧めるのも、導入の速さが違うからです。
開発ボードにはUSBシリアル変換、3.3V電源回路、書き込みまわり、ピンヘッダが最初から載っています。
モジュール単体のESP32-WROOM-32Dなどは部品としては魅力がありますが、最初からそれを選ぶと「USBでつないでサンプルを書き込む」前に、別基板や電源や書き込み配線の準備が必要になります。
学ぶべきことが一気に増えるので、最初の成功体験が遠くなりがちです。

USB-UARTチップの違いも、入門では見逃せないところです。
実際、同じESP32開発ボードでもCP2102CH340FT232Rなどが載っていて、OS側の認識やドライバ導入の手間が少し変わります。
見慣れた型番のボードを選んだほうがセットアップで迷う回数が減ります。
型番不明の派生ボードは価格面では魅力があっても、商品ページの説明が薄く、ポートが出ない段階で調べ物が増えやすいんですよね。

arduino-esp32/libraries/WiFi/examples/WiFiScan/WiFiScan.ino at master · espressif/arduino-esp32github.com

WROOM-32D/32E 表記の読み方

商品名にESP32-WROOM-32DやESP32-WROOM-32Eと書かれていると、どちらを選ぶべきか迷いがちです。
この表記は、ESP32のモジュール名を示しています。
WROOM-32が基本の系統名で、末尾の32D32Eはその中の世代違いと考えると読みやすくなります。

入門用途では、この2つを同列の定番として扱って問題ない場面が多いです。
どちらも初代ESP32系の代表的なモジュールで、開発ボード上ではESP32 Dev Module設定で通る例が広く見られます。
見た目の型番が違っても、やりたいことが『WiFiScan』やセンサー読み取り、簡単なWebサーバーであれば、最初の学習体験に大きな差は出ません。

違いとしては、世代更新に伴うアンテナまわりや部品構成の見直しが入っている系統です。
ただ、この差を入門段階で細かく追いかけるより、「定番記事の手順にそのまま乗れるか」「開発ボードとしてまともに組まれているか」を優先したほうが前に進めます。
商品ページでWROOM-32D搭載WROOM-32E搭載のどちらかが書かれていても、開発ボードとしてUSB端子と書き込み回路が揃っていれば、最初の候補として十分です。

混乱しやすいのは、モジュール名とボード名が同じ場所に並んでいることです。
たとえばESP32 DevKitCはボード名で、その上に載っているのがESP32-WROOM-32DまたはESP32-WROOM-32Eだったりします。
SoC、モジュール、開発ボードの3層を分けて読むと、商品名の意味が急に整理できます。
ここが見えると、通販ページの表記ゆれにも振り回されにくくなります。

技適と購入時チェックリスト

日本国内で無線機能を使う前提なら、技適(技術基準適合証明)の有無は外せません。
ESP32はWi‑FiとBluetoothを内蔵しているので、ボードを選ぶ段階でこの視点が必要になります。
メーカー系の開発ボードや国内流通品では技適表示が明記されていることがありますが、安価な無名派生ボードではそこが曖昧なまま売られていることもあります。

通販で見比べるときは、スペック表より先にその基板自体に技適の扱いが示されているかを見ると判断が早いです。
モジュール単体に認証の話があっても、販売中の開発ボードの説明が曖昧なら、そのページだけでは読み切れません。
TELECの案内にあるように、技適は証明番号ベースで確認する考え方になります。
こういうところは、型番がはっきりした定番ボードのほうが情報を追いやすいです。

見ておきたい項目は多すぎる必要はありません。入門用なら、次の4点でだいたい絞れます。

  1. 商品名にESP32-DevKitC系やESP32 Dev Module相当の定番表記があるかどうか
  2. 搭載モジュールがESP32-WROOM-32DまたはESP32-WROOM-32Eなど、正体のわかる名称で書かれているかどうか
  3. USB-UARTチップ名がCP2102やCH340のように明記されているかどうか
  4. 技適表示や認証番号の説明が商品情報に含まれているか

この4点が揃っているボードは、届いてから「何のチップが載っているのかわからない」「検索しても同じ基板が見つからない」という遠回りを避けやすくなります。
逆に、商品写真は派手でも型番が曖昧なものは、最初の1枚としては情報の橋がつながりません。
学習コストを下げたいなら、名前が地味でも定番の表記があるもののほうが結果的に進みやすいです。

NOTE

書き込みで止まるトラブルは、ボード本体よりUSBまわりで起きることもあります。
『CP210x』なら『Silicon Labs』、FT232RならFTDIのドライバ案内がたどりやすく、切り分けの順番を作りやすいのが定番チップの強みです。

CP210x USB to UART Bridge VCP Drivers - Silicon Labssilabs.com

ブレッドボード幅と作業性

ESP32開発ボードを買ってから気づきやすいのが、基板の横幅です。
ESP32-DevKitC系は、一般的な5穴ブレッドボードに挿すと左右の列を広く使ってしまい、外側の穴がほとんど残らないことがあります。
仕様表だけ眺めていると見落としがちですが、配線を始めるとここで一気に作業感が変わります。

実際にブレッドボードへ載せると、ジャンパワイヤを差す余白が片側1列しか残らず、電源レールへ逃がすにも工夫が必要になることがあります。
LED1個ならまだ進められても、センサーを2つ3つ足した瞬間に配線の行き先が詰まり、抜き差しのたびに隣の線まで動いてしまうんですよね。
初心者が「配線ミスかも」と思ったら、原因が単に物理的に窮屈だったという場面は珍しくありません。

このため、最初のボード選びでは「小さいほうが正義」とは限りません。
むしろ、定番のDevKitC系を選んだうえで、ブレッドボード側を広めにする、あるいは2枚並べる前提で考えたほうが、作業の見通しが立ちます。
ボード自体の情報量が多い利点はそのままに、配線スペースだけ別で確保する形です。

作業性という意味では、モジュール単体が細くて有利に見えることもありますが、そこにはUSB接続や電源回路を自前で足す手間が戻ってきます。
入門段階では、配線スペースの都合だけでモジュール単体へ寄せるより、開発ボードで素直に始めたほうが全体の流れが崩れません。
ボード幅のクセさえ先に知っておけば、「挿したら穴が消えた」という最初の戸惑いで止まらずに済みます。

関連記事Arduino Wi‑Fi接続はESP32で|最短手順とボード選びArduinoで無線LANにつながる工作を始めたいなら、最短で結果が出る入口はESP32です。この記事では、Arduino IDEにESP32 by Espressif Systemsを追加し、自宅Wi‑Fiへ接続してIPアドレスを確認するところまでを、

Arduino IDEでESP32を使うための初期設定

IDE 2の入手とバージョン確認

この手順はArduino IDE 2系を前提に進めます(執筆時点: 2026-03-18、動作確認済みの例: 2.3.8)。
最新版は公式ダウンロードページを確認してください。

インストール後は、起動できた時点で終わりにせず、バージョン表示まで見ておくと後の切り分けが楽になります。
メニューのヘルプからAboutを開くと、使っているIDEの版が確認できます。
記事や動画の手順と画面差があるとき、「何が違うのか」を探し始める前に、まずここを合わせておくと話が早いです。

筆者がワークショップでよく見るのは、古い『Arduino IDE』がPC内に残っていて、本人は新しい方を起動したつもりでも実際は別の版だった、というケースです。
見た目が似ていても、ボードマネージャの表示や設定画面の位置が食い違うので、About画面で版をひと目確認するだけで無駄な遠回りが減ります。

ボードマネージャURLの追加

ESP32は、標準状態の『Arduino IDE』ではそのまま使えません。
まずEspressif Systemsが配布しているボード定義の参照先を追加します。
操作場所はファイル→環境設定です。
ここにある「追加のボードマネージャのURL」へ、次のURLを登録します。

公式の導入案内でも、このURL形式が使われています。
URL欄に貼り付けたあと、設定画面を閉じるだけで終えたつもりになりがちですが、ここはOKを押して保存してから閉じるところまでが手順です。
筆者の経験では、URLそのものの打ち間違いも多いのですが、それ以上に「貼ったあと保存せず閉じた」ためにボードマネージャへ何も出てこない、というつまずきが目立ちます。
受講者に声をかけるときも、URLを貼れたかではなく、OKで確定したかまで確認すると流れが止まりません。

URLは手入力よりコピー&ペーストの方が確実です。package の綴りや .json の末尾が1文字欠けただけでも認識されないので、ここは丁寧に進める場面です。
Arduino IDE 公式ドキュメントとEspressif側の案内は、この追加手順で一致しています。

ESP32パッケージの導入

URLを登録したら、ツール→ボード→ボードマネージャを開き、検索欄で esp32 と入力します。
候補の中に esp32 by Espressif Systems が出てくるので、これをインストールします。
パッケージ名が似た項目が並ぶことがありますが、ここでは maintainer がEspressif Systemsになっているものを選びます。

インストールが終わると、ESP32系のボード群が『Arduino IDE』に追加されます。
このとき、入れたバージョン番号は控えておくと便利です。
というのも、『Arduino core for the ESP32』はメジャー更新で互換性が変わることがあり、サンプルコードや古い記事の手順と差が出ることがあるからです。
動かない原因が自作コードなのか、コアの版差なのかを切り分ける材料になります。

版の確認はボードマネージャ画面でそのまま行えます。
インストール済みの項目にはバージョンが表示されるので、ここを見れば現在の状態がわかります。
後でライブラリやサンプルの挙動を見比べる場面でも、この番号がひとつあるだけで話が具体的になります。

ボード/ポートの選択

パッケージ導入後は、対象ボードを選びます。
ツール→ボードから ESP32 Dev Module を選択します。
本記事では以後、この名称で統一します。
通販ページの製品名がESP32-DevKitC系でも、『Arduino IDE』側ではまずESP32 Dev Moduleを基準に進めると混乱が少なくなります。

続いて、USBで接続したボードのシリアルポートをツール→ポートから選びます。
ここで見える表示はOSごとに違います。
Windowsでは COM3COM5 のようなCOM番号で出ることが多く、接続中のUSB-UARTチップ名が併記される場合もあります。
macOSでは /dev/cu.SLAB_USBtoUART/dev/cu.wchusbserial... のような名前になり、Linuxでは /dev/ttyUSB0/dev/ttyACM0 として現れるのが定番です。

どれがESP32のポートかわからないときは、USBを抜いた状態と挿した状態で一覧の差を見ると判別できます。
複数のシリアル機器をつないでいるPCでは、この差分確認がいちばん早いです。
ポートが選べていないまま書き込みボタンを押すと、コンパイルは通っても転送段階で止まります。
画面上では難しそうなエラーに見えても、実際には「ボードは合っているがポートが空欄」ということが珍しくありません。

USB-UARTドライバの確認と導入

ポート欄に何も出てこないときは、まずUSB-UARTまわりを見ます。
ESP32開発ボードには、PCのUSB信号をシリアル通信へ変換するチップが載っており、代表的なのは『CP210x』CH340FT232Rです。
ボードの説明欄や基板上の印字にこれらの型番が見えることがあります。

『CP210x』なら『Silicon Labs』のVCPドライバ、FT232RならFTDIのVCPドライバが公式に用意されています。
CH340系はWCH系統のドライバが使われます。
Windowsでは自動で入ることもありますが、未導入だとデバイスマネージャに不明な機器として残ったり、ポート一覧に何も増えなかったりします。
macOSではドライバの許可操作が必要になることがあり、Linuxでは最初から認識されることもあります。

ここで見落としやすいのが、ドライバ以前にUSBケーブル自体がデータ通信用ではないケースです。
充電専用ケーブルだと、給電ランプは点いているのにポートだけ現れません。
見た目では判別しにくく、筆者も現場では別の既知のデータ対応ケーブルへ差し替えて、反応が変わるかを先に見ます。
この一手で、ドライバの問題と通信経路の問題を切り分けやすくなります。

TIP

USB接続で反応がないときは、「ボード不良」と決める前に、データ対応ケーブル、USB-UARTドライバ、ポート一覧の変化をこの順で見ると詰まりにくくなります。
給電だけできて通信できないケーブルは、見た目では区別がつきません。

ドライバが入り、ポートが見える状態まで来れば、開発環境の土台はほぼ整っています。
ここまでを一度きちんと通しておくと、次に書き込みエラーが出たときも、IDE設定、ボード定義、ポート、USB経路のどこを見るべきかがはっきりします。

関連記事マイコンボードの選び方|Arduino・ラズパイ・ESP32比較マイコンボードとシングルボードコンピュータの違いをまず整理し、Arduino・Raspberry Pi・ESP32を“作りたいもの”起点で比較。OS有無/通信機能/電力/価格/用途を一表で確認し、用途別おすすめと買う前チェックリストで最初の1台を選べます。

最初のスケッチを書き込む

ここからは、まず1本書き込んで、ESP32が手元で反応するところまで一気に進めます。
対象ボードはESP32 Dev Moduleで統一し、サンプルは『WiFiScan』を使います。
LEDの点滅よりも配線の心配がなく、USB接続と無線機能とシリアル出力をまとめて確認できるので、最初の成功体験を作るにはこちらのほうが素直です。
筆者のワークショップでも、最初の1本はこの流れにすると、その後のつまずきがぐっと減ります。

Wi‑Fiスキャンのコード全文

ここでは公式サンプルに忠実な形でコードを載せます。
サンプルの目的は起動確認にあります。
ボード設定は前節で説明した通りESP32 Dev Moduleに合わせてください。
今回はWi‑Fiへ実際に接続する処理は含めていません。

void setup() {
  Serial.begin(115200);
  Serial.println("Setup done");
}

void loop() {
  Serial.println("scan start");

  int n = WiFi.scanNetworks();
  Serial.println("scan done");

  if (n == 0) {
    Serial.println("no networks found");
  } else {
    Serial.print(n);
    Serial.println(" networks found");

    for (int i = 0; i < n; ++i) {
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      int encType = WiFi.encryptionType(i);
      if (encType == WIFI_AUTH_OPEN) {
        Serial.println(" ");
      } else {
        Serial.println("*");
      }
      delay(10);
    }

    Serial.println("");
    delay(5000);
  } // end else
} // end loop

このスケッチは、周囲のアクセスポイントを検索して、SSIDと受信強度をシリアルへ出します。
Wi‑Fiに接続する処理はまだ入っていないので、パスワード入力の段階で止まりません。
まずは「ESP32が起動し、スキャンし、結果をPCへ返せる」ことを確認するのが狙いです。
最初の一歩としては、これくらい役割がはっきりしているサンプルのほうが結果を見失いません。

書き込み時のBOOT操作のコツ

コードを貼り付けたら、まずコンパイルを通し、そのままアップロードします。
多くのボードはそのまま書き込めますが、転送の途中で『Connecting...』のまま待ち続ける個体があります。
このときは、アップロード開始直後にBOOTボタンを押し続け、『Writing at 0x...』の表示が出たら離します。

この離すタイミングが分からず、ずっと押したままにしてしまう方が多いのですが、筆者の経験ではWriting at...を合図として意識すると一発で通ることが増えます。
『Connecting...』はまだ書き込み準備の段階で、『Writing at 0x...』まで進めばフラッシュ転送が始まっています。
つまり、BOOTを保持するのは接続が確立するまでで足ります。
見えない内部状態をボタンの勘で合わせるのではなく、画面上の文言を目印にすると迷いません。

もし書き込みが始まらないときは、ボタン操作そのものより、IDEのボード名がESP32 Dev Moduleになっているか、選んだポートが接続中のものかを見直すと切り分けが進みます。
この段階では外付け部品も配線もないので、見る場所を絞り込めるのが『WiFiScan』のよいところです。

WARNING

『Connecting...』で止まる場合は、BOOTを長押ししたまま待ち、『Writing at 0x...』が出た瞬間に離すと通りやすくなります。
書き込み手順を誤るとフラッシュ操作が進まないため、表示を目印に操作することを強く推奨します。
手順の合図は画面表示で統一しましょう。
筆者の経験では『Writing at 0x...』が出たらBOOTボタンを離す、という合図にすると再現性が高くなります。

docs.espressif.com

シリアルモニタでの確認

書き込みが終わったら、シリアルモニタを開いて通信速度を 115200 bps に合わせます。
改行設定は LF両方 NL & CR のどちらかで問題ありません。
このスケッチは入力待ちではないので、改行コードの違いで動作が変わる場面はありませんが、モニタ設定が崩れていると表示の切れ方で戸惑います。
最初はこの2つのどちらかにそろえておくと見通しが立ちます。

画面には、たとえば次のような内容が周期的に表示されます。

Setup done
scan start
scan done
4 networks found
1: HomeWiFi (-48)*
2: MobileRouter (-67)*
3: GuestWiFi (-75)*
4: Cafe_Free_WiFi (-84)*

scan start のあとに検索が走り、scan done のあとでSSID一覧が出続ければ成功です。
5秒ごとに再スキャンするので、モニタを開いたまま近くのアクセスポイントの増減を見ることもできます。
シリアルの表示量自体は115200 bpsならすぐ流し切れるので、見ている感覚としては「待たされる」というより、「検索が終わるたびにまとまって結果が出る」という印象になります。

ここで何も表示されない場合は、モニタを開いたタイミングの関係で再起動メッセージを見逃していることがあります。
そのときはESP32のリセットボタンを1回押すと、Setup done から表示が始まります。
近隣のSSID一覧が繰り返し並ぶ状態まで確認できれば、IDE設定、USB通信、書き込み、シリアル出力、Wi‑Fi機能の土台が一通りそろったと判断できます。

ESP32でつまずきやすいポイント

書き込み失敗の切り分けフロー

ESP32で最初につまずきやすいのは、エラーの見た目が似ているのに、原因がまったく違うことです。
とくに「ポートが出ない」「書き込み開始前で止まる」「途中で固まる」は、同じ“接続不良”に見えて中身が別です。
ここがポイントです。
順番を決めて切り分けると、無駄に設定を触らずに済みます。

まず、PCに挿してもArduino IDEのポート一覧に何も現れないときは、ボード設定より先にUSBまわりを疑います。
ESP32のトラブル相談で実際に多いのが、充電専用USBケーブルを使っていたケースです。
データ線が入っていないケーブルだと給電だけはできるので、ボードのLEDが点いているのにポートは出ません。
見た目では判別できないことが多いので、パッケージに「データ通信対応」と書かれたケーブルを前提に考えたほうが混乱しません。

ポートが出ない場合の切り分け順は、ケーブル変更、USBポート変更、USB-UARTドライバ導入、PC再起動の順で進めると整理できます。
ESP32開発ボードではUSBシリアル変換に『CP210x』やCH340、FT232R系が使われることがあり、WindowsやmacOSではドライバが入っていないと認識されないことがあります。
Arduino IDE 公式ドキュメントや『Arduino core for the ESP32』の導入手順どおりに進めてもポートが出ないとき、実際にはIDEではなくUSBシリアル側で止まっていることが少なくありません。

次に、ポートは見えているのに、アップロード時に 「ESP32への接続に失敗しました: Timed out waiting for packet header」 と出る場合です。
これはESP32が書き込みモードへ入れていないときの定番メッセージです。
前のセクションで触れたとおり、まずボード名とポートの選択を見直し、それでも変わらなければBOOTを長押ししたままアップロードを開始し、『Writing at 0x...』が出たら離す流れで通ることがあります。
ワークショップでも、このタイミングを知らないだけで先へ進めなかった方が毎回のようにいます。

書き込みが始まるのに終盤で止まる、あるいは成功したり失敗したりを繰り返す場合は、設定よりもUSB給電の質を見たほうが早いです。
筆者の経験では、ここは「USB給電の相性」が盲点になりがちです。
電圧降下があるハブや細いケーブルを挟むと、書き込みの終わり際で固まることがあります。
ESP32はWi‑Fi動作時に瞬間的に500mA級の電流を求めることがあるので、普段は問題ないUSB機器でもESP32だけ不安定になることがあります。
こういうときはPC直結、またはセルフパワーのUSBハブに替えると通る場面がありますし、別PCへつなぎ替えただけであっさり解決することもあります。

シリアルモニタ側の設定違いも、初心者には見落としやすい点です。
サンプルの『WiFiScan』は Serial.begin(115200) なので、モニタのボーレートも115200に合わせます。
ここがずれていると、書き込み自体は成功しているのに文字化けして「失敗した」と判断してしまいます。

TIP

ポートが出ない段階ではIDE設定を深追いせず、ケーブル、USBポート、ドライバ、再起動の順で見ると原因が散らばりません。
タイムアウトが出る段階ではBOOT操作と電源の安定性に視点を移すと、切り分けが一気に進みます。

USBケーブル/電源の落とし穴

ESP32は、Arduino系の入門ボードに慣れている人ほどUSBまわりで戸惑います。
給電ランプが点いていると「接続できている」と思いがちですが、USBでは電源が来ていることデータ通信が通っていることは別です。
充電専用ケーブルだと前者だけ成立し、後者が成立しません。
そのため、通電しているのにポートが現れず、ドライバやIDEのせいだと誤解しやすくなります。

もう一つの落とし穴が、電源容量ではなく電圧の落ち方です。
机の上でスマホ充電用の長いケーブルやバスパワーUSBハブをそのまま流用すると、ESP32では不安定になることがあります。
とくに無線処理が絡む場面では、書き込み中や再起動直後に必要な電流が跳ねるので、余裕の少ない給電経路だと通信エラーとして表に出ます。
筆者は、同じボードでもPC前面ポートでは不安定で、背面ポートへ差し替えたら一発で通る場面を何度も見ています。
数字だけ見るとケーブルもハブも同じ「USB」ですが、実際の安定度は揃いません。

「たまに書き込める」「今日は通るのに明日は止まる」という症状も、ケーブルや電源由来だと説明がつきます。
ソフト設定のミスなら毎回同じ失敗になりやすいのに対し、給電品質が境目にあると成功と失敗が揺れます。
この揺れ方が出たら、コードを疑うより先に接続経路を短くして、PC直結かセルフパワーUSBハブへ寄せると整理できます。

GPIOの注意

ESP32はピン数が多く、どこにでもつなげそうに見えますが、実際には「避けたいピン」と「意味を知った上で使うピン」があります。
ここを知らずに配線すると、書き込みできない、起動しない、LEDが思ったように点かない、といった形でつまずきます。

まず押さえたいのが、GPIO6〜11です。
これらは内部フラッシュ接続に使われるため、一般用途では触らない前提で考えます。
EspressifのGPIOドキュメントでも、SPI flashに接続されているため他用途に使うべきではないと案内されています。
ピン番号だけ見て空いているように感じても、ESP32内部では重要な仕事をしています。

次に、GPIO34〜39は入力専用です。
スイッチやセンサー入力には使えますが、LED点灯のような出力には向きません。
初心者の方だと、LEDが光らないので配線ミスを疑い続けてしまうのですが、原因はピンの性質そのものだった、ということがよくあります。

さらに厄介なのが、GPIO0、GPIO2、GPIO12、GPIO15のようなストラップピンです。
これらは起動時のモード選択に関わるので、外部回路で強く引っ張るとブートに影響します。
とくにGPIO0は書き込みモードへ入る操作と関係が深く、GPIO12も起動条件に関わるため、何も知らずに常時固定の回路をつなぐと「急に書き込めなくなった」という状態を作りがちです。

シリアル通信でも注意点があります。GPIO1とGPIO3はUART0のTX/RXとして使われるので、USBシリアルとの通信中に干渉しやすいピンです。
ここへ外部回路をつなぐと、書き込みやシリアルモニタ表示が乱れることがあります。
最初の動作確認では、これらのピンは空けておくほうが混乱が少なくなります。

初心者向けにざっくり整理すると、最初のうちは「出力したいなら34〜39は避ける」「6〜11は使わない」「0/2/12/15は起動に絡むので慎重に扱う」「1/3はシリアル通信用と考える」という理解で十分です。
ピン数が多いESP32でも、最初に自由に使える範囲を頭の中で絞るだけで、配線トラブルの大半を避けられます。

ブレッドボード幅の罠

ESP32DevKitC系ボードで見落とされやすいのが、ブレッドボードの幅です。
一般的な5穴ブレッドボードは中央の溝をまたいで部品を載せる前提ですが、DevKitCは横幅があるため、挿した瞬間に外側の列まで埋まりやすくなります。
つまり、ボードは刺さったのに、ジャンパ線を差し込む穴がほとんど残らないという状態です。

この状態だと、配線ミスではなく物理的に作業が進みません。
初心者の方は「ブレッドボードに載ったから準備完了」と思いがちですが、実際には一番使いたい列がESP32本体で塞がれてしまいます。
筆者も講座で初めて触る方に渡すときは、この段階で手が止まることが多いので、細身のESP32ボードを選ぶか、横幅に余裕のあるブレッドボードを使う前提で説明しています。

とくにセンサーやLEDを複数つなぐ予定があるなら、標準的な5穴ボード1枚では窮屈です。
ジャンパ線を無理に斜めへ引き回すと、どの列へ入っているか追いにくくなり、あとでGPIO番号の勘違いまで誘発します。
ESP32はピン数が多いぶん、物理的に配線スペースを確保できるかどうかが、そのまま作業のしやすさではなく読み間違いの少なさにつながります。
細身の派生ボードや大きめのブレッドボードが好まれるのは、見た目の都合より、この配線余白を確保できるからです。

Wi‑Fi対応マイコンとしての最初の活用例

スマホからLED制御

『ESP32』で周囲のWi‑Fiが見えたら、その次に試す題材として相性がいいのが、簡易WebサーバーでLEDを点けたり消したりする構成です。
ブラウザで『ESP32』のIPアドレスを開き、画面上のボタンを押すとGPIOにつないだLEDが反応する、という流れです。
配線はLチカの延長ですが、操作する側がUSBシリアルモニタではなくスマホになるだけで、無線マイコンを触っている実感が一気に出ます。

筆者はワークショップでも、この「スマホから押したらLEDが光る」体験を早めに入れます。
理由は単純で、目の前の回路と手元のスマホが1回つながるだけで、学習の熱量が明らかに上がるからです。
Lチカだけだと「書き込めた」で終わりがちですが、Web経由で反応すると「次はリレーもいける」「家の中の機器を操作できそう」と用途の想像が広がります。

ここでのポイントは、いきなり外出先からの遠隔操作を目指さないことです。
まずは自宅や作業部屋のルーターにつないで、スマホも同じLANに参加した状態でアクセスするところまでで十分です。
この段階ならポート開放は不要で、構成も単純です。
『ESP32』側はWiFi.hとサンプルに近い短いコードでWebサーバーを立て、HTMLのボタンからオン・オフのURLを叩くだけでも成立します。

つまずきやすいのは、SSIDとパスワードの入力です。
文字列の打ち間違いで接続できないのに、サーバー側のコードを疑って時間を使うことが少なくありません。
筆者は設定フォームを自前で作るとき、空欄チェックや文字数の確認を先に入れておくことがあります。
これだけでも「そもそもネットワーク名が空だった」「余計な空白が入っていた」という初歩的な詰まり方を減らせます。
スマホからの1ステップ体験を早く通したい場面では、この手の小さな仕掛けが効きます。

Webサーバー動作に入ると、Lチカのときより消費電流の揺れが大きく出ます。
前述の通り、無線動作では瞬間的な電流要求が跳ねるので、USB給電が細い経路だと「接続できたりできなかったり」という半端な状態になります。
LED制御の練習はコードの問題に見えやすいのですが、ページを開いた瞬間に再起動するような症状なら、まず電源ラインの安定性を疑ったほうが整理しやすくなります。

センサー値のブラウザ表示

LED制御の次に手応えがあるのが、センサー値をHTTPで表示するパターンです。
温度、明るさ、可変抵抗の値など、何でもいいので1つ読み取って、ブラウザに数字として出すだけで「測る」と「見せる」がつながります。
ここまで来ると、『ESP32』は単なるマイコンではなく、小さなネットワーク機器として理解しやすくなります。

シリアルモニタに数値を流す方法はデバッグには便利ですが、スマホやPCのブラウザで見える形になると、共有のしやすさが一段上がります。
机の上でセンサーを指で触ったり、照明を近づけたりしながらページを更新すると、値の変化がそのまま伝わります。
成功体験として強いのはここで、数値がネットワーク越しに見えた瞬間に「このまま記録や通知へ発展できる」という見通しが立ちます。

実装は難しくありません。
ADCで読んだ値をHTMLに埋め込んで返すだけでも十分ですし、数秒ごとに再読み込みするだけでも最初の教材としては成立します。
動く仕組みを理解する段階では、凝った画面よりも「アクセスしたら今の値が見える」ほうが学びがぶれません。
『Arduino IDE』で扱うなら、導入の軽さという点でも相性がよく、『Arduino IDE』公式ドキュメントが案内している標準的な流れの延長で進められます。

センサー表示では、見た目より電源と配線の影響が出ます。
アナログ値がふらつくとコードのせいにしたくなりますが、実際にはGNDの取り回しやUSB給電の不安定さで値が暴れる場面があります。
とくに無線通信とセンサー読み取りを同時に動かすと、静かなLチカよりノイズの気配が見えやすくなります。
電源ラインに余裕があると、ページ更新のたびに値が崩れるような不自然な挙動を避けやすく、回路と通信を別々に切り分けて考えやすくなります。

Espressifの『Arduino core for the ESP32』には無線まわりのサンプルや実装例がまとまっているので、Wi‑Fi接続とHTTP応答の流れをつかむ足場になります。
最初からクラウド連携へ進むより、ローカルLANの中で「取れた値が見える」状態を固めたほうが、どこで失敗しているかを追いやすくなります。

2.4GHz運用とルーター設定の基本

『ESP32』の最初のWi‑Fi活用では、2.4GHz帯のネットワークを前提に考えると話が素直になります。
スマホやPCは5GHzにもつながりますが、『ESP32』側で最初に合わせる帯域は2.4GHzです。
ここを曖昧にしたまま進めると、「スマホから見えているWi‑Fiにつないだつもりなのに、ESP32だけ入れない」という混乱が起きます。

ローカル用途では、ルーターが家の中の交通整理役になります。
『ESP32』がルーターからIPアドレスをもらい、スマホも同じルーター配下に入っていれば、スマホのブラウザからそのIPへアクセスできます。
この段階ではインターネット越しに公開するわけではないので、ポート開放の設定は要りません。
まず同一LAN内だけで完結する形にすると、失敗したときに見る場所が絞れます。
通信が届かない原因も、Wi‑Fi接続、IP確認、URL入力の3つにほぼ集約できます。

家庭用ルーターでは2.4GHzと5GHzに別のSSIDが付いていることもあれば、同じ名前でまとめられていることもあります。
入門段階では、どのSSIDへ『ESP32』をつないだのかを意識しておくと整理が楽です。
スマホ側も同じLANにいる必要があるので、スマホがモバイル回線へ戻っていたり、別のゲストネットワークへ入っていたりすると、LED制御ページが開きません。
コードが正しいのに反応しない場面では、このLANの一致が見落とされがちです。

無線設定そのものより先に、電源設計も同列で考えたいところです。
Wi‑Fi接続中は瞬間的な電流要求が大きく、500mA級のピークに触れる記述もあります。
つまり、ルーター設定が合っていても、給電経路が弱いと接続処理の途中で不安定化し、結果として「Wi‑Fiがつながらない」ように見えます。
実際には認証やDHCPの手前で再起動していることもあり、見かけ上はネットワーク設定の問題と区別がつきません。
Webサーバーやセンサー表示まで進めるなら、USBケーブル、5V入力、3.3Vレギュレータまわりの余裕まで含めて、通信機能の一部として捉えるとつまずきが減ります。

次のステップ:省電力・OTA・ESP-IDFへ

『ESP32』の入門を終えたら、次は「1回動いたものを、電池で長く動かし、あとから更新できる形へ寄せていく」段階に入ります。
筆者はこの流れで進めると遠回りが減りました。
まずは測定、次にDeepSleep、そして一定周期で送信という形にまとめると、構成の良し悪しが見えやすくなります。
とくに無線は接続のたびに負担が大きいので、送る回数そのものを減らすだけで、電池の減り方が目に見えて変わります。

DeepSleepの設計ポイント

DeepSleepは、測定して送信したら深く眠り、決めた条件で起きるという運用を作るための基本機能です。
常時Wi‑Fi接続のまま動かすと、センサー値そのものより待機時間のほうが電力を消費しやすく、バッテリー駆動では不利になります。
前述の通り、Wi‑Fi接続時には瞬間的な電流ピークが大きく出るので、毎秒のように再接続する設計は避けたほうが筋がいいです。

ここがポイントです。
省電力化は、まずスリープ時間とウェイク後の処理順を決めるところから始まります。
たとえば、起床したらセンサーを読む、必要な値だけ送る、送信が終わったらすぐ眠る、という順番です。
この流れが固まると、通信処理が長引いているのか、センサー待ちが無駄なのかを切り分けやすくなります。
筆者の経験でも、電池駆動は「測る」「起きる」「送る」を1サイクルとして設計したときに安定しました。
常時つなぎっぱなしより、Wi‑Fiに乗る回数を減らしただけで持ち方の印象が大きく変わります。

起床条件も先に決めておくと後で困りません。
一定時間ごとに起こすのか、ボタンや外部信号で起こすのかで、回路もスケッチも変わります。
バッテリー機器として組むなら、「何をきっかけに起きるのか」と「起きている時間をどこまで短くできるのか」を対で考えるのが基本です。

OTA更新の基本戦略

OTAは、USBケーブルを挿し直さなくてもネットワーク経由でファームウェアを更新する仕組みです。
机の上の試作では便利機能に見えますが、実際には複数台を別の場所へ置く段階で価値が跳ね上がります。
センサー端末を天井裏や分電盤の近く、棚の奥へ設置したあとに不具合が見つかると、物理回収なしで直せるかどうかが運用コストを左右します。

入門直後の段階では、まず「USB書き込みが前提の開発」から「ネットワーク更新も考えた構成」へ頭を切り替えるだけでも十分です。
たとえば、設定値をソースに埋め込みすぎない、更新後に復帰しやすい起動処理にする、失敗時に起動不能にならないパーティション構成を意識する、といった視点です。
量産や現場展開を見据えるなら、OTAは後付けの飾りではなく、保守の前提になります。

学習の入口としては、『Arduino core for the ESP32』の実装例を見ながら全体像をつかむのが現実的です。
無線機能をすでに触っているなら、GitHub上の『Arduino core for the ESP32』を追うだけでも、どこまで『Arduino IDE』で進められるかが見えてきます。

Arduino IDEとESP-IDFの役割分担

『Arduino IDE』で扱うなら、導入の軽さという点でも相性がよく、『Arduino IDE』公式ドキュメントが案内している標準的な流れの延長で進められます。
公開時には関連記事(例:「ESP32入門:まず揃えるもの」「USBケーブルの選び方ガイド」など)を最低2本、本文中に内部リンクとして追加してください。
(注)現状このサイトに関連記事がないため、公開時に編集担当が本文中に内部リンクを最低2本追加してください。

セキュア機能の位置づけと注意点

Secure BootFlash EncryptionOTAは、本格運用へ入ると避けて通れない要素です。
試作では後回しでも動きますが、第三者に渡る機器、現地更新が前提の機器、ファームウェアの改ざんや読み出しを避けたい案件では、早い段階で位置づけを理解しておいたほうが設計がぶれません。

ここで意識したいのは、有効化したあとに開発の流れそのものが変わる点です。
たとえば保護機能を入れた状態では、従来のように気軽に書き換える感覚から、署名や暗号化を前提にした更新運用へ移っていきます。
つまり、セキュリティ機能は単独の設定項目ではなく、配布手順、鍵管理、障害復旧まで含めた運用設計の入口です。
OTAがここで効いてくるのは、現地でUSB接続せずに更新を回せる前提を作れるからです。

学習ロードマップとしては、まず『Arduino IDE』で通信とスリープの感覚を身につける、その次にOTAの流れを理解する、運用を意識する段階でESP-IDFの公式ドキュメントへ進み、Secure BootとFlash Encryptionを読む、という順番が無理なくつながります。
入門の延長で触れるなら、この順番が最も手を動かしやすく、途中で目的を見失いません。

Podelitsya stat'ej