ESP32 の Wi-Fi を使ってみる

ESP32には、無線通信機能のWi-Fi、Bluetoothが
搭載されています。
今回はこのWi-Fi機能を使ってみます。

使用するESP32は、
以前に、”Arduino IDE ESP32 (ESP-32) の開発準備
 https://shinog.jp/computer/arduino/arduino-ide-esp32-esp-32-%e3%81%ae%e9%96%8b%e7%99%ba%e6%ba%96%e5%82%99/
で使用したもので、技適対応製品です。
※技適については、総務省 電波利用ホームページで解説されています。
 https://www.tele.soumu.go.jp/j/adm/monitoring/summary/qa/giteki_mark/

ESP32
ESP32

今回、使用するスケッチは、Arduino IDE の、
「ファイル」 - 「スケッチ例」にある、
 ESP32 Dev Module - ”WiFi - SimpleWiFiServer”
というスケッチを使ってみます。

このスケッチでは、
ESP32にLED点灯回路作成し、ESP32をサーバとして起動します。

このESP32に作成したLED点灯回路のLEDの点灯・消灯を、
PCやスマホなどのWebページからネットワーク経由で制御するものです。
これが出来れば、遠隔でのいろいろな操作が可能になりそうですね。

Wi-Fi環境1
Wi-Fi環境1

今回の私の環境は、
・PCとルータは有線
  - 私のPCには、無線(Wi-Fi)接続設備がありません。
・ルータと ESP32 は無線(Wi-Fi)
  - 私の ESP32 には有線接続設備がありません。
という環境で行います。

Wi-Fi環境2
Wi-Fi環境2

ESP32にグローバルIPアドレスを割り当てることができる方は少ないと思います。
ESP32にプライベートIPアドレス(ローカルIPアドレス)を割り当てる場合、
ON・OFFを指示するPCもESP32と同じローカルネットワーク内の、
IPアドレスを割り当てる必要があります。
※ネットワーク間の通信を可能にした環境が構成されている場合は問題ありません。

ESP32 の開発環境ですが、
Arduino IDE を使用する場合、”arduino-esp32”ライブラリのインストールが必要です。
このライブラリのインストールは、
Arduino IDE のライブラリ管理のインストールに対応していなため、
手動(用手)で行います。

以前に、”Arduino IDE ESP32 (ESP-32) の開発準備”で、
 https://shinog.jp/computer/arduino/arduino-ide-esp32-esp-32-%e3%81%ae%e9%96%8b%e7%99%ba%e6%ba%96%e5%82%99/
”このESP32用のプログラム開発をArduino IDEで行うなための設定” を
済ませてある場合は、必要ありませんが、
ESP32 をはじめて利用する場合は設定(インストール)が必要になります。

ここで、もう一度設定(インストール)してみます。
※設定(インストール)済みの場合は、読み飛ばして下さい。

 1.GitHub のWebページより、”arduino-esp32”ライブラリをダウンロードします。
   https://github.com/espressif/arduino-esp32
  ダウンロードのファイル名:arduino-esp32-master.zip
  このファイルを、解凍しておきます。

 ”arduino-esp32”ライブラリのダウンロード
”arduino-esp32”ライブラリのダウンロード
ダウンロードファイルの展開
ダウンロードファイルの展開

 2.インストール済み Arduino IDE のArduinoホルダの、
  hardware フォルダに、”espressif”フォルダを作成します。

 ”espressif”フォルダの作成
”espressif”フォルダの作成

  私の場合 : "C:\Program Files (x86)\Arduino"
          (C:\ → Program Files (x86) → Arduino)
  ※場所が分からない場合は、
   デスクトップの Arduino アイコンを右クリック
      → プロパティ(P) でリンク先(T)で確認出来ます。

ファルダ作成位置の確認
ファルダ作成位置の確認

 3.作成した、espressif フォルダに、”esp32”フォルダを作成します。

 ”esp32”フォルダの作成
”esp32”フォルダの作成

 4.作成した、esp32 フォルダ内に、1.で解凍しておいた
  arduino-esp32-masterフォルダの中身全部をコピー(移動)します。

フォルダへファイル群の移動
フォルダへファイル群の移動

 5.コピー(移動)したファイル群の中にある、”tools” フォルダに移動します。
  ”get.exe”ファイルを実行します。
  ※get.exe ファイル選択し、右クリック → 管理者として実行(A)を選択します。

追加ファイルのダウンロード
追加ファイルのダウンロード
ダウンロード中のコマンドプロンプト画面
ダウンロード中のコマンドプロンプト画面

  コマンドプロンプト画面が開き、ダウンロードとインストールが実行されます。
  ※このとき、PCがインターネットへ接続できる環境であることが必要です。
   (私の場合、10分程度掛かりました)
  コマンドプロンプト画面が閉じれは完了です。

ダウンロード完了後のフォルダ
ダウンロード完了後のフォルダ

これで、”arduino-esp32”ライブラリのインストールは完了です。

ここからは、
ESP32 を使って、スケッチ例の SimpleWiFiServer を実行してみます。

ESP32 をUSBケーブルでパソコンと接続し、通信ポート名(番号)を
確認しておきます。
 ※Windowsスタートメニューを右クリックし → デバイスマネージャー(M)を
  選択します。
 私の場合:”Silicon Labs CP210x USB to UART Bindge (COM5)”で、
        ”COM5”ということです。 

 デバイスマネージャー画面
デバイスマネージャー画面

Arduino IDE を開発ターゲットを ESP32 に設定します。

Arduino IDE を起動します。
 1.メニュー「ツール」 → 「ボード」 → 「ESP32 Arduino」
    → 「ESP32 Dev Module」を選択します。
  ※このとき、ESP32 Arduino が表示されず選択できない場合、
   ”arduino-esp32”ライブラリのインストールができていないことが考えられます。

ボードの設定
ボードの設定

 2.メニュー「ツール」 → 「シリアルポート」 → 「COM5」 を選択します。
  ※シリアルポートはデバイスマネージャー(M)で確認したポートを選択します。
   このとき、ESP32 がPCと接続されていないと選択できません。

シリアルポートの設定
シリアルポートの設定

これで、IDEの設定は完了です。

ボートとシリアルポートの設定確認
ボートとシリアルポートの設定確認

では、スケッチ例を開きます。
メニュー「ファイル」 → 「スケッチ例」から、
  ESP32 Dev Module用のスケッチ例欄内の
     「WiFi」 → 「SimpleWiFiServer」を選択します。
 ※このとき、ESP32 Dev Module用のスケッチ例が表示されない場合、
  ”arduino-esp32”ライブラリのインストールができていないことが考えられます。

スケッチ例の選択
スケッチ例の選択

この、SimpleWiFiServer スケッチは、
ESP32 の GPIO5 端子に接続された、LEDを
遠隔で、Webを利用して、ON、OFF操作するものです。

ESP32 と LED の接続回路は図の通りです。
   この回路図の作図には fritzing を利用させて頂いております。
   https://fritzing.org/home/

回路図
回路図

このスケッチには、細かくコメントが付けられていますので、
私が解説するより確かです。

スケッチ内容のポイントは、
 http://192.168.1.14
 http://192.168.1.14/L
 http://192.168.1.14/H
この3種類のリクエストがWebから送られてくるので、
これを読み分けて処理するように記述されています。

要求内容(リクエスト)に、この、/L、/Hがあるとき、
LEDの操作を行うように記述されています。

では、
スケッチの変更(修正)内容です。

~ 略 ~

#include <WiFi.h>

const char* ssid     = "yourssid";	← SSIDを設定
const char* password = "yourpasswd"; ← SSIDのパスワードを設定 

WiFiServer server(80);

void setup()
{
    Serial.begin(115200);	← シリアルモニタとの通信速度を変更する場合は設定を変更

~ 略 ~

修正箇所は、2カ所です。
 ・SSIDの設定
 ・SSIDのパスワードの設定
です。
このSSIDは、使用しているルータの設定に合わせます。
※ルーター本体の裏面や横面に記載されていることが多いです。

また、
 ・シリアルモニタとの通信速度を変更する
 ・LEDの接続GPIOを変更する
場合は、それぞれの設定記述を修正する必要があります。
特にLEDの接続ポートを変更するときは、スケッチ内の記述が、
変数を使わず定数( 5 )で記述されていますので、修正箇所が数カ所あります。
 ・pinMode( 5, OUTPUT );
 ・digitalWrite( 5, HIGH );
 ・digitalWrite( 5, LOW );
などです。

では、SSIDとパスワードを設定して実行してみます。
先ずは、検証です。
検証で問題が無ければ、
USBケーブルでESP32と接続し、マイコンボードに書き込みます。

ESP32への書き込み時に以下のメッセージが出て失敗する場合があります。
※私のESP32では、最初の書き込み時に、
 このメッセージが表示されるものがありました。

esptool.py v2.6
Serial port COM5
Connecting........_____....._____....._____....._____....._____....._____.

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

※コンパイル時の詳細表示を確認したい場合、
 詳細表示の設定は、
  1.メニュー「ファイル」 → 「環境設定 ctrl+カンマ」を選択します。

環境設定画面表示
環境設定画面表示

  2.表示された環境設定画面の
   ”より詳細な情報を表示する:” 欄の、
   コンパイル、コメント項目にチェックを付け、「OK」ボタンを押します。 

  ※スケッチの行番号を表示したい場合は 
   行番号を表示する欄にチェックを付けます。

環境設定画面
環境設定画面

この書き込み失敗時の対応方法として、
Arduino IDEの、”マイコンボードへ書き込む”アイコンをクリックした後、
ESP32 本体の、BOOT ボタンを押します。
※下記のメッセージが表示されるまで押し続けます。

ESP32のBOOTボタン
ESP32のBOOTボタン
Writing at 0x00040000... (50 %)
書き込み状況表示画面
書き込み状況表示画面

等の Writing メッセージが表示されるまで押し続け、
この段階まで、表示されたら BOOT ボタンを放します。
これで、書き込み処理は成功すると思います。

転送が完了したら、シリアルモニタを開きます。
ESP32 本体の、EN / RST ボタンを押します。

ESP32のEN/RSTボタン
ESP32のEN/RSTボタン

ルータとの接続が完了すると、

Connecting to xxxSSID名xxxx
.
WiFi connected.
IP address: 
192.168.1.14
シリアルモニタに表示される起動時メッセージ
シリアルモニタに表示される起動時メッセージ

と表示され、
指定のSSIDとのコネクティングに成功し、
ESP32に、IPv4のアドレスとして、
 192.168.1.14
が割り当てられたことが分かります。

また、
SSIDやSSIDパスワードが間違っている場合、

Connecting to xxxSSID名xxxx
....................................

と表示され、リトライが繰り返えされます。

このとき、シリアルモニタの表示内容が、
 ・文字化けして表示される:シリアルモニタの通信速度を確認します。
 ・連続してBootを繰り返すメッセージが表示される:
  1.メニュー「ツール」 → 「Upload Speed」を、
   921600 → 115200 に変更して再度転送する。
  2.PCのUSBポートを他のポートに変更して再度転送する。
   ※私の一部のPCでは、HUB(ハブ)を経由したUSBポートを
    使用するとを失敗するものがあります。
    (PC本体のUSBポートを使用するのが無難なようです)

続いて、ネットワークが正しく設定され、通信が行える状態になっているかを
コマンドを使って確認します。 
パソコンから、
Windowsスタートメニュー → Windowsシステムツール
   → コマンドプロンプトを選択し、コマンドプロンプトを起動します。

このコマンドプロンプト画面から、
 ping 相手先IPアドレス(ESP32 に割り当てられたIPアドレス)
とコマンドを発行(打鍵)します。
私の場合は、
 ping 192.168.1.14
と発行します。

正常に通信が可能な場合

pingの結果画面(成功時)
pingの結果画面(成功時)

何らかの理由で通信できない場合

pingの結果画面(失敗時)
pingの結果画面(失敗時)

これで、通信状態の確認もできました。
では、Webブラウザを起動します。
(Firefox、Google Chrome、Microsoft Edge等何でも可)

URL欄に、
 http://ESP32に割り当てられたIPアドレス
私の場合は、
 http://192.168.1.14
と打鍵します。

ブラウザの指示選択画面とシリアルモニタ画面
ブラウザの指示選択画面とシリアルモニタ画面

LEDのON、OFFを指示する画面が表示されました。
あとは、クリックしてみるだけです。

 ・(Click here to turn the LED on pin 5 on.)
 ・(Click here to turn the LED on pin 5 off.)
のクリックにあわせて、LEDが点灯、消灯すれば
サンプルスケッチの実行は成功です。

実行結果(ON時)
実行結果(ON時)
 実行結果(OFF時)
実行結果(OFF時)

PCに割り当てられたIPアドレスを知る場合は、
Windowsスタートメニュー → Windowsシステムツール
   → コマンドプロンプトを選択し、コマンドプロンプトを起動します。

このコマンドプロンプト画面から、
 ipconfig
とコマンドを発行(打鍵)します。

ipconfig によるIPアドレスの確認
ipconfig によるIPアドレスの確認

私のPCには、IPv4のアドレスとして、
 192.168.1.17
が割り当てられているのが分かります。