前回はESP32でWi-Fiを使用してIoTウェブサーバを作りましたが、もう一つの選択肢として、ESP32と同じくespressif社のESP8266マイクロコントローラがあります。これは先述のESP32の一つ前の世代のマイクロコントローラです。性能面ではESP32に劣りますが、それでもArduinoのATMega328Pよりもはるかに高性能です。また、ESP32よりも長く市販されているということは、より多くの人に利用されているとも言えます。そのため、ESP32よりもESP8266の方がサンプルとなるスケッチやライブラリが見つけやすい一面もありますArduino向けのWiFiシールドにもWiFi用のチップとしてESP8266を採用しているものが数多くあります。

ESP8266モジュールはESP32よりもさらに一回り小さなサイズです。こちらにも、パターンアンテナが内蔵されています。ESP8266もESP32と同様に非常に小さなチップとなっており、その小ささゆえに電線の接続がしにくくなってしまっています。ESP8266をより大きな基板に載せて扱いやすくしたモジュールが多数販売されています。
ESP8266 NodeMCU WiFi開発ボード の環境設定
ここでは、「NodeMCU WiFi開発ボード」を使用します。
NodeMCU WiFi開発ボードはUSB経由でスケッチの書き込みが行えます。ブレッドボードで使用することもできます。NodeMCU WiFi開発ボードを使用するためには、Arduino IDEにファイルをインストールする必要がありますが、前回のESP32よりは簡単に行えます。まず、Aruino IDEで「ファイル」>「環境設定」メニューを開きます。

「追加のボードマネージャーのURL」に、次の内容を追記します。ボードマネージャーが設定ファイルなどを探しに行く先のURLの設定をする場所です。
http://arduino.esp8266.com/stable/package_esp8266com_index.json
「OK」ボタンを押して設定画面を閉じます。

「ツール」>「ボード」>「ボードマネージャー」で新しいボードをインストールするウィンドウを呼び出します。


検索ウィンドウで「NodeMCU」で検索して、esp8266 communityのESP8266パッケージをインストールします。インストール後、「ツール」>「ボード」で確認すると、ESP8266を使用したボードがたくさん出てきます。

ここでは「NodeMCU 1.0」を選択して、可変抵抗とLEDを使った実験を行います。
先のESP32の実験から、ボードだけが変わります。今回も2枚のブレッドボードをまたぐように設置しました。
回路図

プログラム
スケッチもESP32から大きく変わりません。
#define LEDPIN D3 //(1)
#define ANALOGPIN A0
#define NETZWERKNAME "MeinWLAN"
#define PASSWORT "M.e.i.n)P.a-s/s-wo{rt"
#include "ESP8266WiFi.h" //(2)
WiFiServer Server(80);
WiFiClient Client;
String Request;
void setup()
{
pinMode(LEDPIN, OUTPUT);
Serial.begin(115200);
delay(100);
Serial.println();
Serial.print("Verbinde mit: ");
Serial.println("MeinWLAN");//Serial.println(NETZWERKNAME);
WiFi.begin(NETZWERKNAME, PASSWORT);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Erfolgreich. Eigene IP-Adresse: ");
Serial.println(WiFi.localIP());
Server.begin();
}
void loop()
{
Client = Server.available();
if (Client)
{
Serial.println("Neuer Client");
boolean leereZeile = true;
while (Client.connected())
{
if (Client.available())
{
char c = Client.read();
if (Request.length() < 100)
Request += c;
if (c == '\n' && leereZeile)
{
Serial.print("Request von Client: ");
Serial.println(Request);
if(Request.indexOf("ein")>0)
digitalWrite(LEDPIN,HIGH);
if(Request.indexOf("aus")>0)
digitalWrite(LEDPIN,LOW);
Client.println("HTTP/1.1 200 OK");
Client.println("Content-Type: text/html");
Client.println("Connection: close");
Client.println("Refresh: 2");
Client.println();
Client.println("<!DOCTYPE HTML>");
Client.println("<html>");
Client.print("Analogwert: ");
Client.print(analogRead(ANALOGPIN));
Client.println("<br><br>");
Client.println("<a href='?ein'>LED einschalten</a>");
Client.println("<br><br>");
Client.println("<a href='?aus'>LED ausschalten</a>");
Client.println("</html>");
Request = "";
break;
}
if (c == '\n')
leereZeile = true;
else if (c != '\r')
leereZeile = false;
}
}
delay(1);
Client.stop();
Serial.println("Verbindung mit Client beendet.");
Serial.println("");
}
}
スケッチの解説
(1) ArduinoやESP32ではデジタル出入力ピンは数字だけで指定しましたが、NodeMCUでは「D」を付けた状態で指定します。
(2) WiFi接続に使用するライブラリが「ESP8266WiFi.h」に変わります。ESP8266ボードをインストールした際に一緒にインストールされています。
(3) ESP32とは異なり、アナログ入力の命令はArduinoと同じanalogRead()関数が使えます。
スケッチのアップロード後、ESP32の時と同じ動作をします。
シリアルモニタで確認したIPアドレスにアクセスすると、webサイトが表示されます。
最後に、「NodeMCU」という言葉は実験用のボード(基板)のことだけを意味するものではないことを付け加えておきます。ESP8266を中心に構築された、オープンソース・低コストのIoTプラットフォームとして開発・公開されています。(https://www.nodemcu.com/index_en.html)
このプラットフォームではESP8266にロードできるNodeMCUというフリーのOSが開発されていて、コンパイルをすることなく、Luaスクリプト言語を使ってプログラムをマイコン上で直接開発・実行することができます。

コメントを残す