Wi-Fi(wifi)モジュールESP8266の内、ESP-01やESP32を使ってmDNS/Multicast Domain Name System機能により常時、IPアドレスではなく、mDNS.localという指定した任意のホスト名でアクセスしてみるページ。
後述の前提環境があれば、ESP8266/ESP32モジュールや開発ボードにサンプルスケッチをアップロードするだけと超カンタン。
これまた動作確認に過ぎず、実用品ではありませんが、ネットワークを介したアプリを作る上でこの上なく、便利な基本操作ということで。
ここでは、ESP8266の中でも最もベーシックなESP-01とESP32を使うが、ESP-01でできるということは、ESP-02...、ESP-07、...、ESP-12、...ESP-14、ESP-WROOM-02などでも、これら開発ボードでも、もちろん、できるということで。
ただ、ESPシリーズの内、日本の技適を通っていて、モヤモヤすることなく、堂々と使えるものは、いまのところ、ESP-WROOM-02/ESP-WROOM-32(とこれらを搭載した開発ボード)のみ。
何れにしても最も手軽で手間がなく、限りなく悩みどころが少ないのは、開発ボードです。
mDNS機能を持つパッケージアプリケーションとしてLinuxならAvahi、Mac/WindowsならBonjourがインストール済みであること(macOSはBonjourはプリインストール済みのはず)。
Arduino IDEが利用できることは、もちろん、ESP8266やESP32をArduino IDEで使えるようにしておくこと。
ESP-01やESP-02〜ESP14などのESP8266チップなら、Arduino IDEの[ツール] => [ボード]から[Generic ESP8266 Module]を選択、ESPモジュールにスケッチをアップロードできる状態であること。
ESP32なら、[espressif/arduino-esp32]の要領でESPモジュールにスケッチをアップロードできる状態であること。
ちなみにこれらArduino IDEの環境設定で追加する方法の場合、カンマ区切りで複数指定可能。
よってESP8266でmDNS機能を使う場合にもプログラム書き込み時だけでなく、実行時もラズパイやパソコンなどOSをインストールできるハードウェアは別途必要となります。
尚、ESP8266やESP32の開発ボードである場合、先のようにArduino IDEで利用可能にするとボード情報に様々な関連ボードが追加されるので、使うボードに適したものを選択することになるわけですが、例えば、次のようになります。
ESP8266 NodeMCUボードなら、Arduino IDEの[ツール] => [ボード]から[NodeMCU 0.9 (ESP-12 Module)]や[NodeMCU 1.0 (ESP-12E Module)]などを選びます。
ちなみにESP8266 NodeMCUボードについては、ボード上のピン番号(D0-D8)と実際のGPIOが異なるのでプログラム・スケッチを書く場合、標準でインクルードされる模様のpins_arduino.hの定義に沿って指定します。
また、ESP32 DevKitCやDevKitボードなら、[ESP Dev Module]を選びます。
開発ボードについては、あとは基本的にArduinoボードと同様にスケッチをアップロード、電源としてUSBケーブルをつなぐか、VIN(5V)/G(ND)に5Vを供給して組んだ回路を実行するだけです。
ESP-01にプログラムをアップロードするには、USBポートを備えたCP2102やFTDI系のシリアルUSB変換モジュールを併用する必要があります。
尚、USBポートを備えた開発ボードではないESP-01〜ESP-14単体及びブレイクアウトボード(≒ピッチ変換基板)との組み合わせは、全て同様にシリアルUSB変換モジュールを要します。
ESP-01の定格電圧は3.3VなのでシリアルUSB変換モジュールも3.3V専用か3.3V/5V兼用なら3.3Vに切り替えて接続します。
尚、ESP-01は、プログラム書き込み時と実行時でRSTとGPIO0のHIGH/LOWを巧みに切り替える必要がありますが、RTS/DTRピン(ホール)のあるFTDIモジュールなら、これらにESP8266のRST/GPIO0をそれぞれ接続することで自動でアップロードできる為、これを使うことをおすすめします。
ただ、これらRTS/DTR、ブレッドボード上でピンホールにジャンパワイヤを挿す場合、ピンヘッダや3.3V/5V切り替え用ジャンパピンのハンダ部が隆起しているのですが、ピンホールが、この付近にある為、USBシリアル変換モジュール並びに挿したジャンパワイヤを手でうまく押さえる必要はあるでしょう。
なんなら、手で持った方が、安定するでしょう。
ちなみにESP-01については、SPIFFSを使おうにもフラッシュメモリ容量の関係でArduinoOTAは難しい模様。
ESP-01 | FTDI | 別電源 |
---|---|---|
RX | TX | - |
TX | RX | - |
RST | RTS | - |
GPIO0 | DTR | - |
VCC | - | 3.3V |
GND | マイナス |
また、パソコンのUSBは最大500mAと大丈夫そうに思えるし、実際、たいていの場合、書き込みできますが、往々にしてWiFiモジュールは多くの電流を必要とすることがあり、ESP8266も300mAを超えることもあるとのことなのでそれらが要する電流量不足やパソコンのUSBポートの損傷回避などを考慮し、実行時はもちろんのこと、書き込み時も念の為、別電源をとった方がよさ気。
尚、検証・運用時には、元電源が3.3Vだと過電流により2V程度まで電圧降下し、ESP8266にリセットがかかり、WiFi接続が途切れるなどの状況になる可能性があるので5Vから降圧、更に電圧降下に耐え得るよう、より短時間で通常電圧に戻る負荷過渡応答特性に優れた電圧レギュレータを使う必要がありそう。
全ての回路で同じとは限りませんが、とある回路を作って9V電池で動かしてみたところ、7V切ったあたりで動作が不安定になり、電池を交換したら正常になりました。
ただし、これは、ESP-01やESP-xx+ピッチ変換基板での話であって、開発ボードについては、何らかの対策が講じられているようで、この必要はなさそうです。
ここでは、ソフトウェアというか開発環境としてArduino IDEを使うものとします。
Arduino IDEでESP8266ボードを使える状態なら、[ファイル] => [スケッチ例] => [ESP8266mDNS] => [mDNS_Web_Server]があると思うので、このサンプルスケッチを開き、宅内無線LANルーターかアクセスポイント用のSSID/PASSWORDを適宜編集し、ESPボードにアップロードします。
尚、ESP32の場合は、(Arduino IDEでESP32ボードを使える状態で)[ファイル] => [スケッチ例] => [ESPmDNS] => [mDNS_Web_Server]。
これは任意ですが、USBシリアル変換モジュールはそのままにPCが認識したUSBポートが、Arduino IDE上で選択されていることを確認、シリアルモニタを開き、baudrateは115200、改行なし(WindowsならCR+LFかも)とします。
もし、何も表示されなければ、ESP-01の入力電源を入れ直すなどして再起動、宅内無線アクセスポイントに接続すると、このような内容が表示されるはず。
ブラウザのURL入力欄にESP8266なら[ESP8266.local]、ESP32なら[esp32.local]と入れて[Enter]とすると、このように表示されます。
尚、ホスト名(除.local)は、スケッチのMDNS.begin()関数の引数で指定されたものとなるので、この部分を編集していなければ、デフォルトでは、[ESP8266.local]や[esp32.local]でアクセスできるということになります。
敢えて言うまでもありませんが、IPアドレスを固定ではなく、DHCPに割り振らせるようにしている場合、アクセスする度にIPアドレスが常に同じという保証はないし、固定だったにしてもドット付きの数字(IPアドレス)で覚えておくより、文字(ホスト名)の方が覚えやすく、書き(入力し)やすいと思われ、IPアドレスが変わっても、IPアドレスが変わったことすら意識することなく、同じホスト名でアクセスできるのは、とても便利。
無線に限ったことではありませんが、LANを使う場合、IoT専用ならまだしもパソコンやスマホ・タブレットなどと共用している場合には、IPを固定するのも面倒なのでDHCPを使うのが楽だという前提もあります。
また、人が介在する手作業なら別ですが、ラズパイとESPボードやArduinoボードなどネットワークを介したM2M(Machine to Machine)通信だった場合、プログラムを書くにあたり、DHCPに払い出されたIPを追わずに済むので、常に同じホスト名でアクセスできるに越したことはないでしょう。
検証・テストなどで本来のESP32/ESP8266ボードとは別のボードにうっかり、同名のmDNSホスト名で(繰り返し)アップロードしてしまった場合などにmDNSホスト名として*-2.localといった連番付きホスト名が割り当てられてしまうことがあります。
そんな時は、重複している検証ボードがネットワークに参加していない状態で本来のボードにスケッチを改めてアップロードするのが吉。
というか、その前に検証ボード側に全く関係ない、もしくは、重複しないホスト名を変更したスケッチをアップしておかないと、その後、接続、ネットワークに参加した際に同じ状況になる可能性が高いので注意。
尚、この場合、ルータの再起動、操作側端末・PCなどでsystemctl restart networking、systemctl restart avahi-daemonを実行しても効果ないっぽい。