Espruino on ESP32 モジュールインストーラ
モジュールを用意した後、逐一オンラインストレージのディスクイメージを作成して書き込むのは面倒なので、
node.jsのnpmのように、モジュールをサーバからインストールできるプログラムを用意します。
名前はなんでも良いのですが、mnpmとしました。
"mini-"npmというより、"もどき"npm かな?
以下のプログラムをオンラインストレージに /node_modules/mnpm.js というファイル名で保存しておきます。
SERVER_ADDRの設定は自分の環境に合わせて変更しておいてください。
/* NOTE: var mnpm = require("mnpm")後、 mnpm("モジュール名") を実行する */ exports = function(moduleName) { var fs = require("fs"); var http = require("http"); //var SERVER_ADDR = "http://www.espruino.com/modules/"; var SERVER_ADDR = "http://192.168.XX.XX/modules/"; // サーバのアドレス var DIST_DIR = "/node_modules"; // インストール先 var dist_file = DIST_DIR + '/' + moduleName + ".js"; // 既にDIST_DIRが存在するか確認 var st=fs.statSync(DIST_DIR); if (!st) { // 存在しなかったら作成する console.log("create directory: " + DIST_DIR); fs.mkdirSync(DIST_DIR); // 再度DIST_DIRが存在するか確認 st=fs.statSync(DIST_DIR); } if (!st) { // 作成できなかった console.log(DIST_DIR + " is not exist!!"); return; } else if (!st.dir) { // DIST_DIRがディレクトリでない console.log(DIST_DIR + " is not directory!!"); return; } else { // DIST_DIRが存在する console.log(DIST_DIR + " check OK!!"); } // 古いファイルを削除 try { fs.unlinkSync(dist_file); } catch(e) { // エラーは無視 } // サーバから取ってくる // File not foundでもエラーにならないから注意(そういう画面を受け取ってしまうので) http.get(SERVER_ADDR + moduleName + ".js", function(res) { res.on('data', function(data) { // 受信したデータを追加書き込み fs.appendFileSync(dist_file, data); }); res.on('close', function() { console.log("DONE"); }); }); }
以下のように実行すると、モジュールをインストールできます。
var mnpm = require("mnpm") mnpm("モジュール名")
インストールが成功すると DONE と表示されます。
なお、一度読み込んだモジュールを再度mnpmで再インストールした場合は、
ESP32を一旦リセットするか、
Modules.removeCached("モジュール名")
または
Modules.removeAllCached()
と実行して、モジュールキャッシュからデータを削除してから使用してください。 そうしないと、モジュールキャッシュに残った前回のモジュールが実行されてしまいます。