Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8837

M5Paperでウェブサイトを表示する node.js 版

$
0
0
はじめに 以前、こういった記事を書きました。 https://qiita.com/RAWSEQ/items/9467c4194849cfa548b4 その後APIドキュメント等参考にふと試して気づいた事といえば・・ https://docs.m5stack.com/en/api/m5paper/epd_canvas .pngファイル読めるじゃん!(時間かかるけど)という事はImageMagic変換必要なし。 画像を回転する必要ないじゃん!(むしろM5Paperとしては横型がデフォまである) 結論:Node.js(Puppeteer)で十分!! となりました。という事で・・・ M5Paper-WebServiceなるものを用意しました!! https://github.com/RAWSEQ/m5paper-webservice Windows Mac Linux 対応しています(多分) |【常時稼働しているPC,サーバー】 |(Webデザイン) | | ↓ | |(画像変換(screenshot.png))| ===> (WIFI) ===> M5Paper ----------------------------- 常時稼働のPCが必要です。 構造としてはPCにてNode.js内で元の Webデザインとなるhtml,css,js用のWebサービス を立ち上げ、 更に、(screenshot.png)にアクセスすると Webデザインを画像変換して提供する ようになっています。 何故M5Paperに処理を委ねないのかという疑問があると思いますが、主に以下の点において有利です デザインが自由にできるから M5Paperをシンクライアントとするので電池長持ちになる(数日どころでなく数カ月単位) インストール・使い方 Node.js環境が無ければインストールします。(最新で問題ない) Githubから git や zip でダウンロードして展開します。 展開した /m5paper-webservice フォルダ内でターミナルのコマンド実行 npm install 同ターミナルで以下を実行して、(なにも反応が無いので、そのまま立ち上げたまま) node index.js ブラウザから http://localhost:3001/screenshot.png にアクセスすると 画像の様なHello, World.画像が表示されます。 元のHTMLといえば http://localhost:3001/view.html で確認できます。 フォルダ内の /web/view.html を編集すると反映されます。 更に指定によっては外部サイトも表示可能 例) http://localhost:3001/screenshot.png?url=https://www.yahoo.co.jp/ なので、[url]パラメータの部分をよろしく遊ばせたら、ファーストビュー閲覧限定のウェブブラウザもどきが完成するという・・ ※ 設定したポート3001はローカルネットワークからアクセスできるようにポート開放する必要があります。 (おまけ:http://localhost:3001/screenshot.png?url=http://localhost:3001/dash/index.html から例の日めくりも確認できます。フォントはフリーライセンスに切り替えた為、ひと狩り行きたくなる様な感じになってます) (RAWSEQ/m5paper-webservice)内の私が作った画像,HTML,CSS,JS類は再利用OK(MITライセンス)なのでデザインが得意でない方も自己の判断でご利用ください。 M5Paper側に書き込むプログラム (Arduinoの書き込み方は既にご存じかと思いますので省略) Arduino_sketch #include <M5EPD.h> #include <WiFi.h> M5EPD_Canvas canvas(&M5.EPD); # バッテリー残量表示関数 int Chk_battery() { char buf[20]; uint32_t vol = M5.getBatteryVoltage(); if(vol < 3300) { vol = 3300; } else if(vol > 4350) { vol = 4350; } float battery = (float)(vol - 3300) / (float)(4350 - 3300); if(battery <= 0.01) { battery = 0.01; } if(battery > 1) { battery = 1; } //uint8_t px = battery * 25; sprintf(buf, "BATT%d%%", (int)(battery * 100)); canvas.drawString(buf , 0, 0); return (int)(battery * 100); } # メインプログラム void setup() { M5.begin(); # ↓こちらが画面の回転。引数を0 → 90とすると縦型になります M5.EPD.SetRotation(0); M5.EPD.Clear(true); WiFi.begin("【WIFIのSSID】", "【WIFIのPassword】"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } # キャンバスサイズ(横,縦)こちらも回転に応じて調整 canvas.createCanvas(960, 540); canvas.setTextSize(3); canvas.drawPngUrl("http://【M5Paper-webserviceのIP】:3001/screenshot.png"); Chk_battery(); canvas.pushCanvas(0,0,UPDATE_MODE_GC16); # 10秒待つ。失敗する様であれば調整 delay(10000); # 3時間おきに実行 M5.shutdown(10800); } void loop() { } M5Paperデバイス特性の注意: USBにつながっている際はどんな事があろうとも常時電源ONの状態になります。 USBケーブルを抜いて再起動完了後、背面の白いボタンを1回押すと電源停止。(3時間後にまた起動) この状態で安定します。 通常はサイドの黒いダイアルを3秒押し込むと再起動(起動周期の調整にも使えます) 何かあったら、背面の白ボタン1回押す→サイドの黒いダイアルを3秒押し込みで何とかなると思います。 あと、M5.shutdown(10800); の記述は環境変数の設定の様なものなので、その後 M5.shutdown(); と宣言しても、電源停止しても永久に3時間後に再起動し続ける。完全停止したい場合は一度 M5.shutdown(0); と宣言しないといけない。

Viewing all articles
Browse latest Browse all 8837

Trending Articles