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;
  }