nyacom.net

ほとんど自分向けの外部記憶装置。

ESP8266ベースのArduinoをWifiにつなぎ,Webサーバにしてみる

   

ESP8266ベースのArduino wemos D1を使って,自宅のWifiにつないでみました。

前回までにとりあえずLチカはできたので,残りの宿題事項として,

  • 自宅のWifiに接続する
  • ブラウザからアクセスしてHello Wordを表示する

が残っている状態です。
とりあえずまずはWifiにつないで,IPアドレスが取れるのかをやってみようと思います。

Wifiに接続する

wemos D1のESP8266からWifiに接続するには,
ArduinoのWifiライブラリと,ESP8266のWifiヘッダがあればいいっぽいです。
そこで,前回のLチカを改造して,次のようなスケッチを用意してみました。

Wifiライブラリ

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

void setup() {

    pinMode(BUILTIN_LED, OUTPUT);   // Pin mode for Bultin LED

    Serial.begin(115200);   // Set baud 115200
    Serial.println("");
    Serial.println("ESP8266 Wifi test");

    WiFi.begin("xxxxxx", "xxxxxx");
    WiFi.mode(WIFI_STA);    // STA mode

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.print("Connected as ");
    Serial.println(WiFi.localIP());
}

void loop() {
    digitalWrite(BUILTIN_LED, HIGH);
    delay(500);
    digitalWrite(BUILTIN_LED, LOW);
    delay(500);
}

ポイントは

  • WiFi.begin(SSID, PASSWD) で接続先のSSIDを指定
  • WiFi.mode(WIFI_STA) でWiFiを端末モードに切り替え(デフォルトはAPモードでも動くっぽい)
  • WiFi.status() で接続状態を取得

このスケッチをコンパイルし,ボードに転送してシリアルコンソールを覗くと,
DHCPからIPが取得できればIPアドレスが表示されるはずです。

Workspace 1_515

腑抜けするくらい簡単にネットワークに参加できてしまったので,
今度はWEBサーバを立ててブラウザからアクセスしてみようと思います。

WEBサーバを立てる

ArduinoのESP8266サポートにはWebサーバのライブラリがあるので,それを使ってみます。
さっきのWiFiテストのスケッチを以下のようにしてみました。

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

ESP8266WebServer server(80);        // Integrated webserver

void onroot() {
    server.send(200, "text/html", "Hello Word");
}

void setup() {

    pinMode(BUILTIN_LED, OUTPUT);   // Pin mode for Bultin LED


    Serial.begin(115200);   // Set baud 115200
    Serial.println("");
    Serial.println("ESP8266 Wifi test");

    WiFi.begin("xxxxxx", "xxxxxx");
    WiFi.mode(WIFI_STA);    // STA mode

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.print("Connected as ");
    Serial.println(WiFi.localIP());

    // Web server setting
    server.on("/", onroot);
    server.begin();
}

void loop() {
    server.handleClient();
    digitalWrite(BUILTIN_LED, HIGH);
    delay(500);
    digitalWrite(BUILTIN_LED, LOW);
    delay(500);
}

ポイント

  • ESP8266WebServer.h をinclude
  • ESP8266WebServer server(80); でHTTPサーバと待ち受けポートを指定
  • server.on(pass, func) で HTTPリクエストの pass アクセス時に実行するハンドルfuncを指定
  • server.begin() でHTTPサーバを起動
  • loop()内でserver.handleClient()を呼ぶ事で,HTTPリクエストを処理

このスケッチをボードに転送し,
シリアルコンソールに表示されるIPアドレスを叩くと “Hello World” を拝めます。

こんなもんでWEBサーバになっちゃうとか( ゚д゚)スゲーと思ったのでした。

夏休みの工作のお供にESP8266はいかがでしょうか?

 - electronics