カテゴリー
ESP8266+ESP32+RISC-V

Webコンテンツを M5Stack に 配信する – Selenium

Raspberry Pi 上で動作する Selenium を使って、インターネット上のWebコンテンツを M5Stack に配信する方法について説明します。

概要

インターネット上のWebコンテンツを表示するには、通常、 HTML や JavaScript を解釈して描画するための Chrome や Safari といったWebブラウザ機能が必要です。本稿では Selenium を使って、Raspberry Pi 上で描画した画像を M5Stack に配信します。

Selenium を使って、Raspberry Pi 上のインターネット・ブラウザで描画した画像を M5Stack に配信する

Selenium

本システムでは、上図のようにRaspberry Pi 上で動作する Selenium を使って、Webブラウザ(表示されない)でインターネット上のコンテンツを取得し、その画面キャプチャを撮影し、そのキャプチャ画像を LAN 内の M5Stack へ配信します。

下図は、インターネットのWebコンテンツを、M5Stack 上に表示したときの一例です。

Selenium を使って、インターネット上のWebコンテンツを M5Stack の LCD に表示する

ただし、本稿で紹介するプログラムで可能なのは表示のみで、Webページのリンク移動は出来ません。

必要な機材

  • M5Stack CORE または M5Stack CORE2
  • Raspberry Pi
  • インターネット接続環境、開発環境(PC等)
M5Stack と同じLANに接続した Raspberry Pi からコンテンツを画像として受信して表示した。

Selenium を Raspberry Pi にインストールする

Seleninum は、Raspberry Pi 上の Webブラウザ Chromium を Chrome ドライバ経由で制御することができます(前図)。

使用するには、以下の手順でインストールします。

Chrominum の更新

Raspberry Pi 上の Webブラウザ Chromium を最新の状態にします。最新版にしておくことで、後にインストールする Chromeドライバ のバージョンと一致させることが出来ます。

$ sudo apt update ⏎
$ sudo apt dist-upgrade chromium-browser ⏎

Chromeドライバのインストール

Chromium を Seleninum で制御するためのドライバです。下記のコマンドでインストールします。

$ sudo apt install chromium-chromedriver ⏎

バージョン確認

Webブラウザ Chromium と Chromeドライバ のバージョンが一致していることを確認します。下記の例では、 chromium-browser と chromium-chromedriver の両方が 113.0.5672.95-rpt1 で一致していました。

$ dpkg -l --no-pager chromium-browser chromium-chromedriver ⏎
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前                  バージョン         アーキテクチ 説明
+++-=====================-==================-============-===================================================
ii  chromium-browser      113.0.5672.95-rpt1 arm64        Chromium web browser, open-source version of Chrome
ii  chromium-chromedriver 113.0.5672.95-rpt1 arm64        WebDriver driver for the Chromium Browser

Selenium のインストール

下記のコマンドで Selenium をインストールします。

$ pip install selenium ⏎

以上の手順は、下記のウェブサイトを参考にして、実施しました(Chromium と Chromeドライバ が同時にリリースされるので、最新版を使うという部分が、一見、当たり前のようですが、良い着目点だと思います)。

Raspberry Pi でブラウザを自動操作してみる
– いろはぷらっと:
https://irohaplat.com/raspberry-pi-selenium-installation/

サンプル・プログラムsignage_serv_get_site.py のダウンロード

筆者が作成したソフトウェア signage_serv_get_site.py は、下記のコマンドで、ダウンロードし、実行することが出来ます。

$ git clone https://bokunimo.net/git/m5 ⏎
$ cd m5/tools ⏎
$ ./signage_serv_get_site.py ⏎

GitHub上のサンプル・プログラム:
https://github.com/bokunimowakaru/m5/blob/master/tools/signage_serv_get_site.py

サンプル・プログラムの動作確認

インターネット・ブラウザなどで、Raaspberry Pi の8080ポートにアクセスすると動作確認が出来ます。同じLANに接続しているPCやスマホのブラウザのアドレスバーに「http://(IPアドレス):8080」の書式で、アクセス先を入力すると「Hello! World!」のメッセージとともにコンテンツが表示されます。

下図は、Raspberry Pi のアドレスが 192.168.1.7 だった場合に「http://192.168.1.7:8080」を入力した時の一例です。

同じLANに接続しているPCやスマホのブラウザのアドレスバーに「http://(IPアドレス):8080」の書式で、アクセス先を入力すると、「Hello! World!」のメッセージとともにコンテンツが表示される

M5Stack 側の製作

M5Stack 側には、ex17_signage デジタル・サイネージ for M5Stack を書き込みます。

下記の記事を参考に、プログラム中の #define SSID と #define PASS に、無線LANアクセスポイントのSSIDとパスワードを、#define BMP_SERVER に Raspberry Pi のIPアドレスを設定してから、M5Stack への書き込んでください。

起動後、時計と画像が重なって表示されますが、M5Stack のLCD面にある3つのボタンのうち、一番、右のボタンを押すと、時計表示を消すことが出来ます(2023年6月4日に仕様変更)。

M5Stackは、1分に1度の頻度で、Raspberry Pi からコンテンツを取得します。Raspberry Pi 側がインターネットから情報を再取得する間隔は、コンテンツ次第です。

自動更新されないコンテンツについては、driver.refresh() で更新することも出来ますが、Webサーバの負荷を高めてしまうので、更新頻度に注意する必要があります。

コンテンツを変更する

アクセス先は、プログラム signage_serv_get_site.py の変数 url で設定します。

アクセス先は、プログラム signage_serv_get_site.py の変数 url で設定する

下記は、プログラム signage_serv_get_site.py 内に一例として記載しているコンテンツのURLの一例です。

例1 気象庁-大阪府の天気予報
url=’https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=270000′

例2 NICT-日本標準時
url=’https://www.nict.go.jp/JST/JST5.html’

例3 bokunimo.net-ホーム
url=’https://bokunimo.net/’

Ambient からコンテンツを取得する

センサ値などを蓄積し、グラフ化して表示するクラウド・サービス Ambient からコンテンツを取得すれば、センサ値の変化の様子を常時表示する端末を作ることが出来ます。

センサ値などを蓄積し、グラフ化して表示するクラウド・サービス Ambient からコンテンツを取得する実用例

プログラム signage_serv_get_site.py の起動直後は、グラフが完全に表示されるまでに少し時間を要します。

その後は、自動で最新データを取得するので、Raspberry Pi 側(Chromium上)は常に最新状態に更新され、M5Stack からのアクセスに対して、即座に応答できるようになります。

Ambient の場合、最新データを自動で取得するので、Raspberry Pi 側(Chromium上)は常に最新状態に更新される。ただし、本例の場合は、M5Stack が Raspberry Pi にアクセスするのが1分ごとなので、最大約1分の遅れが生じる

Ambient は画面作りが簡単

Ambient (https://ambidata.io/)であれば、ブラウザ上で画面のレイアウトが出来ます。組み込み側で画面レイアウトを変更するよりも、手軽です。

レイアウト編集中の様子(イメージ)

むすび

本システムは、ハードウェアの処理能力だけを考えると、M5Stack 単体でも可能です。しかし、M5Stack 側に Chrome のようなWebブラウザを実装するのは手間がかかります。

しかも、画面レイアウト調整を M5Stack の実環境で行う場合、何度も書き込みと確認が必要になり、とても多くの労力を要します。同じリポジトリ内にいくつかのゲームやLCDを活用したサンプル・プログラムが含まれていますが、これらの画面作りには、プログラム製作の80~90%以上を費やしています。

今回は、M5Stack 側での画面作りはほとんどなく、Raspberry Pi やクラウド側の既存エディタで行うことで、同じシステムを手軽に構築することが出来ました。


ボクにもわかる M5Stack のブログ
by bokunimo.net

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es