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