こんにちは!ボクはオニちゃんサーバーです!!

生い立ち

この鬼の置物は、17年ほど前にダイソーに売ってあったものを清家が購入したものです。 当時のダイソーは中国の変なものが沢山売っていまして、清家はそれが面白く感じて買い集めていました。

買い集められた他の人形は、全て飽きられて捨てられましたが、この人形の気持ち悪るく可愛いいところが良く、棄てられるのをまのがれました。会社が何度か引越しをしても捨てられずいました。17年間もオフィスの片隅で何もせずポツンと立っておりました。


IoTで働き者に変わる

しかし清家は、このオニちゃんにも仕事してもらいたいと思いました。 今はIoTの時代ですので、サーバーとして生まれ変わってもらうことにしました。 IoTのおかげでオニちゃんは働き者に生まれ変わりました。

具体的な仕事は、HTTPサーバーとFTPサーバーです。このWEBページはオニちゃんから配信されています。 今後は名前を「オニちゃんサーバー」と呼びます。

オニちゃんのケツメドを掘って、マイコンボードの「ESPr® Developer」を内蔵しました。Arduino IDEを使って、FTPサーバーとWEBサーバーのサンプルソースコードを参考にしてプログラムを書きました。今後はこれを尻子玉と呼んでます。


尻子玉のESPr® Developerとは

スイッチサイエンスの製品です。結構良くできております。

ESP-WROOM-02 Wi-Fiモジュール(フラッシュ2 MB)とUSB-シリアル変換IC FT231XSを搭載した開発ボードです。
その他にも3.3 V出力レギュレータやリセットスイッチ、動作モード切替用スイッチが搭載されているのでESP-WROOM-02 Wi-Fiモジュールをすぐにお使いいただけます。
https://www.switch-science.com/catalog/2500/

これはWi-Fi機能を持ったマイコンです。ちっちゃくて消費電力も少なく、簡単にプログラミングできます。

実はこれは間違って買ってしまったもので、本当はBluetooth機能を持つ最新のESP32が欲しかったんですね。しかし捨てるよりも、オニちゃんの尻子玉になってもらった方がいいなと思いました。


機能とソースコード

ネットで公開されていたHTTPとFTPサーバーのソースコードをマージしました。しかし、今一般的に動作しているサーバーと機能を比較した場合、殆ど機能がありません。このWEBページが辛うじて公開できるくらいの機能しかありません。30年前のNCSA HTTPDと比較しても機能は低いと思います。

元となったソースコードでは、ブラウザーキャッシュも使われないので、HTTPヘッダーの追加をしたりしております。MIMEタイプも増やしました。再度書きますが、このWEBページを公開できるレベルの能力です。

#include <ESP8266WebServer.h> #include <ESP8266FtpServer.h> const char* ssid = "******"; const char* password = "******"; const char* ftpuser = "******"; const char* ftppass = "******"; ESP8266WebServer webSrv(80); FtpServer ftpSrv; //set #define FTP_DEBUG in ESP8266FtpServer.h to see ftp verbose on serial void setup(void){ Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.config(IPAddress(192, 168, 253, 99), IPAddress(192, 168, 253, 1), IPAddress(255, 255, 255, 0)); WiFi.begin(ssid, password); Serial.println(""); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); //FTP SERVER OPEN if (SPIFFS.begin()) { Serial.println("SPIFFS opened"); ftpSrv.begin(ftpuser,ftppass); //username, password for ftp. set ports in ESP8266FtpServer.h (default 21, 50009 for PASV) Serial.println("FTP server started"); } //WEB SERVER OPEN webSrv.onNotFound(onNotFound_); webSrv.begin(); Serial.println("HTTP server started"); } void loop(void){ ftpSrv.handleFTP(); webSrv.handleClient(); } void onNotFound_() { if (!loadFromSPIFFS(webSrv.uri())) { //404 - File Not Found の場合 String message = ""; message += "<html>"; message += "<head>"; message += "<meta charset='utf-8'>"; message += "</head>"; message += "<body>"; message += "<h1>"; message += "そんなファイルはありません"; message += "</h1>"; message += "<p>"; message += "URI: "; message += webSrv.uri(); message += "<br/>"; message += "Method: "; message += (webSrv.method() == HTTP_GET) ? "GET" : "POST"; message += "<br/>"; message += "Arguments: "; message += webSrv.args(); message += "<br/>"; for (uint8_t i = 0; i < webSrv.args(); i++) { message += " NAME:" + webSrv.argName(i) ; message += "<br/>"; message += " VALUE:" + webSrv.arg(i); message += "<br/>"; } message += "</p>"; message += "</body>"; message += "</html>"; webSrv.send(404, "text/html", message); } } bool loadFromSPIFFS(String vPath) { // Serial.print("path:"); // Serial.println(path); if (vPath.equals("/")){ vPath = "/index.htm"; } File dataFile = SPIFFS.open(vPath, "r"); if (!dataFile.isFile()) return false; String dataType = "text/plain"; if (vPath.endsWith(".jpg")) dataType = "image/jpeg"; else if (vPath.endsWith(".png")) dataType = "image/png"; else if (vPath.endsWith(".gif")) dataType = "image/gif"; else if (vPath.endsWith(".css")) dataType = "text/css"; else if (vPath.endsWith(".js")) dataType = "application/javascript"; else if (vPath.endsWith(".ico")) dataType = "image/x-icon"; else if (vPath.endsWith(".xml")) dataType = "text/xml"; else if (vPath.endsWith(".pdf")) dataType = "application/pdf"; else if (vPath.endsWith(".zip")) dataType = "application/zip"; else if (vPath.endsWith(".htm")) dataType = "text/html"; webSrv.sendHeader("Content-Length", String(dataFile.size())); webSrv.sendHeader("Connection", "close"); webSrv.sendHeader("Access-Control-Allow-Origin", "*"); webSrv.streamFile(dataFile, dataType); dataFile.close(); return true; }

ひっそりしっかり働いています

会社の台所の湯沸かしポットの裏で、ひっそりしっかりと働いています。夏場は結構暑い場所なんですけど、止まらず働いてくれるかを期待したいです。

FTPクライアントでコンテンツを更新しております。 ロシア名物のNginxにリバースプロキシをやってもらっています。

今後オニちゃんサーバーが魔改造されましたら、このページは更新されると思います。

更新:2019/6/6