« ArduinoのESP8266でアクセスポイントに接続してみる | トップページ | ESP8266の電源電圧(3V3端子の電圧)の読み取り »

2015年7月24日 (金)

Arduino の ESP8266をwebサーバーにしてみよう

2017/03/02 追記

清水様より

'onRoot' was not declared in this scope
by Arduino 1.8.1 + http://arduino.esp8266.com/stable/package_esp8266com_index.json

とのご指摘が有りました。

確かに本記事の前半のコードでエラーがでます。
setup()の最後のほうに

  server.on("/",onRoot);

が記述してあり、onRoot()がありません。setu()内のserver.on("/",onRoot);を削除してください。

修正及び後半のコードが Arduino 1.8.1 + http://arduino.esp8266.com/stable/package_esp8266com_index.json
にてj動作することを確認しました。

以上、2017/03/02 追記 終わり

Arduino の ESP8266をwebサーバーにしてみよう

ESP8266で最低限のWebサーバーを構築してみる。

昨日の「ESP8266でアクセスポイントに接続してみる」に以下の追加します。

・インクルードファイルの追加(#include <ESP8266WiFi.h>の下に)2行追加

#include <WiFiClient.h>
#include <ESP8266WebServer.h>

・Webサーバーの生成。インクルードの下に追加。

ESP8266WebServer server(80);

・サーバーを起動する。setup()の最後に次の1行追加

server.begin();

・クライアントからの接続処理を呼び出を処理するため loop() の中身を次の1行のみにする。

server.handleClient();

以上4行の追加と loop() 内の入れ替えで完了。
全てのコードは以下のようになる。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);
  delay(100);
  Serial.println("");

  pinMode(5, OUTPUT);  // オリジナルは13だがテスト環境の都合で5に変えてある。
  WiFi.mode(WIFI_STA);
  WiFi.begin("ssid","psddword");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print(WiFi.localIP());

//  server.on("/",onRoot);
  server.begin();
}

void loop() {
  server.handleClient();
}

マイコンボードへの書き込みが完了したら、シリアルモニタを起動し

....
192.168.0.2

シリアルモニタに表示されたIPアドレス http://192.168.0.2/ にアクセスするとFireFoxでは

Not found: /

と表示される。ESP8266の電源OFFの状態ですタイムアウトまで数十秒かかる「ページ読み込みエラー」になる。ESP8266のWebサーバーが動いている状態ではすぐに「Not found:」が表示される。表示はブラウザによって異なると思います。

次に、プログラムで "Hello" と応答するコードを追加してみます

"Hello" を返す関数を setup() の上に追加。

void onRoot() {
  server.send(200,"text/plain","Hello");
}

onRoot() を登録するため server.begin() の上に追加

  server.on("/",onRoot);

全コードは以下の通り

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);

void onRoot() {
  server.send(200,"text/plain","Hello");
}
void setup() {
  Serial.begin(115200);
  delay(100);
  Serial.println("");

  pinMode(5, OUTPUT);  // オリジナルは13だがテスト環境の都合で5に変えてある。
  WiFi.mode(WIFI_STA);
  WiFi.begin("ssid","psddword");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print(WiFi.localIP());

  server.on("/",onRoot);
  server.begin();
}

void loop() {
  server.handleClient();
}

以上で http://192.168.0.2/ にアクセスすると

Hello

と表示される。これでメッセージを返すWebサーバーになる。

テキストでなく HTML を返す Web サーバーにするには onRoot() を以下のように変えます。

void onRoot() {
  String msg = "<html><head><title>ESP8266WebSerber</title></head><body><h1>Hello</h1></body></html>";
  server.send(200,"text/html",msg);
}

これで大きな文字で "Hello" が表示されます。

« ArduinoのESP8266でアクセスポイントに接続してみる | トップページ | ESP8266の電源電圧(3V3端子の電圧)の読み取り »

Arduino」カテゴリの記事

コメント

compileできない

'onRoot' was not declared in this scope

by Arduino 1.8.1 + http://arduino.esp8266.com/stable/package_esp8266com_index.json

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/569662/61946664

この記事へのトラックバック一覧です: Arduino の ESP8266をwebサーバーにしてみよう:

« ArduinoのESP8266でアクセスポイントに接続してみる | トップページ | ESP8266の電源電圧(3V3端子の電圧)の読み取り »