【ESP8266】NodeMCUでサクッとサーバーを構築する

ESP8266

Arduino環境でESP8266を用いたサーバー構築

こんにちは、くろべこです。

アマゾンで1個500円程度で購入できるWiFi開発ボードESP8266があることは皆さんご存じかと思います。今回は、初めて使う方やこれから使う方をを対象にして、ESP8266でサーバーを構築する方法について取り上げていきたいと思います。

サーバーを構築する方法として【ステーションモード(STA)】【アクセスポイントモード(AP)】がありますが、本記事で紹介するのはステーションモードになります。

用語解説:DHCPサーバーDHCPサーバーとはローカルネットワークに接続されている機器にIPアドレスを自動的に付与するサーバー

■ステーションモード:WiFi子機

■ステーションモード:WiFi親機

イメージはこんな感じで、ステーションモードが家庭内のWifiルーターの子機となり、アクセスポイントモードがESP8266自身が無線親機となります。

早速、次項からはステーションモードでHTTPサーバーをESPに実装していきたいと思います。ESP8266のサンプルプログラムを使用するので1時間程度あれば誰でもできると思います。


ESP8266 HelloServer

サンプルプログラムはESP8266の開発環境を導入した時にデフォルトでついてくる【HelloServer】を使用してみましょう。

もし、ESP8266の開発環境をArduinoに導入していない場合は以下のサイトが参考になりますので、まず開発環境を整えてください。

参考:ESP8266 Arduino 開発環境

サンプルプログラムが開けましたら、早速書き込みを行ってください。Arduinoよりは書き込みが長いと思いますが、100%になるまで待ちましょう。

書き込みが終了しましたら、シリアルモニタを開いてリセットボタンを押してみてください。正常に無線に繋がったらIPアドレスが割り振られるはずです。

WiFiに繋がらない場合

  • シリアルモニタのデータレートが合っていない
  • SSIDの打ち間違え
  • PASSの打ち間違え

そして、ブラウザのURLを打ち込むところに割り振られたIPアドレスをコピペしてみましょう。ここでは【100.64.1.29】です。うまくいっていたら下の図のように【hello from esp8266!】という文字が書いてあるページが開かれるはずです。


HelloServerのコード解説

目標のESP8266でサーバー構築はできたと思いますが、使用したHelloServerのコードについて少し解説したいと思いますね。

■ヘッダーファイルのインクルードと定数/変数定義

<ESP8266WiFi.h> 

ArduinoのWiFi.hに基づいたヘッダーファイル

<WiFiClient.h> 

サーバーへのリクエスト等を行うためのクライアントヘッダ。今回のコードでは削除しても問題ないです。

<ESP8266WebServer.h> 

クライアントからのGET/POSTの処理についてのヘッダ。後述するhandleRoot関数でリクエストに対するWebデータを作成して、handleClientでリクエストに対してWebデータのレスポンスが出来る。

<ESP8266mDNS.h>

マルチドメイン(mDNS)を使用することが出来る。mDNSというのはローカルネットワーク内でお手軽にホスト名の解決をしてくれる仕組みです。HelloServerでは【http://esp8266.local】というホスト名でもアクセスできるようにIPアドレスとドメイン名を紐づける為のヘッダです。

ESP8266WebServer server(80)

ネットワーク間でUDPやTCP通信をするためには機能ごとにポートと呼ばれる扉を設定する必要があります。今回は【HTTP】というアプリケーションに則ったTCP通信なので80番ポートになります。このように役割が決まっている通信に関してはポート番号はすでに予約されています。俗に言うウェルノウン(よく知られている)ポートというやつです。今回はサーバー設定なので80番ポートを開放して待ち受けている状態です。

■クライアントにウェブページ(HTML)を返す関数(handleRoot/handleNotFound)

handleRoot(){}

クライアントからのリクエストに対して返すHTTPデータになります。実際に返すデータはserver.send(HTTPステータスコード, データフォーマット, データ)で返します。

handleNotFound(){}

クライアントが誤ったルートパスでアクセスしたときに返答するデータです。いわゆる404エラーというやつですね。

HTTPステータスコード

  • 1xx:情報
  • 2xx:アクセス成功
  • 3xx:リダイレクション
  • 4xx:クライアントエラー
  • 5xx:サーバーエラー

■セットアップ

WiFi.mode(WIFI_STA) / WiFi.begin(ssid, password) / WiFi.status()

WiFiの接続とサーバーモードで開始する設定です。WiFi.status()を監視することで接続状態を検出しています。

MDNS.begin(“esp8266”)

冒頭で説明したDNS設定ですね。IPアドレスとドメイン名を紐づけています。

server.on(“/”, handleRoot)

前項で設定した関数(handleRoot)を設定しています。デフォルトでのページになります。

server.on(“/inline”, [](){})

http:// IP-Address/inlineでアクセスできるページの設定です。ラムダ式という記述方法を使用しているようです。

server.onNotFound(handleNotFound);

誤ったルートパスでクライアントからリクエストがあった時に返すページです。前項で404エラーで登録した関数を呼び出すようになっています。

server.begin();

HTTPサーバー開始。

■クライアントからのリクエスト処理

server.handleClient()

クライアントからのリクエストに対して、セットアップで登録したルートパスのHTTPデータを返します。


コメント

タイトルとURLをコピーしました