ESP32によるSDWebserverの運用
(令和2年8月2日追記)
ESP32の活用法方としてウェブサーバーがある。Wifiを標準で実装していることもあり、WiFi環境を設定できる。
しかし、ESP32マルチタスクが出来ないのでサーバー稼働中にホームページの書き換えは出来ない。
基本的にはホームページの内容をプログラムに書き込むことになるので、変更が大変である。
しかし、SDカードに書き込んだ内容を表示できれば、ホームページの修正はSDカードを書き換えれば良く短時間の停止で変更が出来る。
そんなことも有るのか、SDWebserverなるスケッチが用意されているのでこれを試してみた。
〇用意したもの
1 ESP32開発キット
2 microSDカード 8G(FATでフォーマットされたもの)
3 マイクロSDカードスロットDIP化キット
以前秋月電子で買ったもの
〇配線
端子番号 ESP32
2:DAT3/CS: IO5
3:CMD/DI: IO23
4:Power+: ESP32の3.3V端子
5:CLK: IO18
6:Power-: ESP32のGND端子
7:DAT0/DO: IO19
8本有るピンのうち6本を使用する。
〇スケッチ
arduino IDE の「ファイル」「スケッチ例」「WebServer」を辿って「SDWebServer」を読み込む。
スケッチの中でSSIDとPASSWORDを自分の環境にあわせ書き換える。
const char* ssid = "**********";
const char* password = "**********";
次にホームページ本体をSDカードに書き込む。私の場合は、本家のホームページからIoT関係の部分をコピーしたもので試してみた。
/の下にホームページのディレクトリーツリーを書き込む。
/--------------------[arduuino]----------------------[img]
| | |
--wifiAP_client.htm --raspi4.jpg
--index.htm SDcard.htm SDinfo.png
esp32.htm ・
・ ・
・
SDWebServerは拡張子の.htmlではダメのようなので.htmに変更した。
〇実行
スケッチをコンパイルして実行する。書き込み後リセットスイッチを押し再起動するとシリアルモニターに
Connecting to Extender-G-9C58
Connected! IP address: 192.168.0.58
MDNS responder started
You can now connect to http://esp32sd.local
HTTP server started
SD Card initialized.
IPアドレスが192.168.0.58で立ち上がったのでブラウザからアクセスする。
とindex.htmの内容が表示される。
ディレクトリーを辿ってもくれているようなので、通常の書き方で問題ないようである。
私は、ラズパイの一つにWebServerであるapache2を立ち上げて、SDカードと同じ内容のものを
/var/www/html以下に入れておき、そこでチェックしたものをSDカードにコピーするようにセットした。
こうすることで頻繁に発生するホームページの変更を容易にすることが出来る。
ただ、このサーバーで一般に公開するのには機能不足のような気がする。
PHPとかJAVAとかSSLの問題である。SSLに対応したスケッチもあるのだろうか。
この辺の問題はプライベートネットワーク内であればクリアできるので構内用であれば簡単にサーバーが構築できて便利なような気がする。
レスポンスも意外と速いので、アクセスが重ならなければ充分実用になりそうである。
下はSDWebServerの全景である。SDカードアダプターを取り付けただけの簡単な構成である。
(令和2年8月2日追記)
同スケッチでESP8266てでも動作を確認した。ライブラリは異なるのでその部分とSDカードのピン番号を修正することで難なく動いてくれた。
速度はやはり若干劣るが全く使えないというものではない。スケッチの修正点は以下の通り。
//#include <WiFi.h>
//#include <WiFiClient.h>
//#include <WebServer.h>
//#include <ESPmDNS.h>
#include <ESP8266WiFi.h>//
#include <WiFiClient.h>//
#include <DNSServer.h>//
#include <ESP8266WebServer.h>//
#include <ESP8266mDNS.h>//
#include <SPI.h>
#include <SD.h>
コメント化部分を削除して後コメント行を追加したのと、
//WebServer server(80);
ESP8266WebServer server(80);
webserverの名前変更、後SDカード確認便をSSから16に変更。
if (SD.begin(16)) {
DBG_OUTPUT_PORT.println("SD Card initialized.");
hasSD = true;
}