なりすまし・フィッシングメール・偽サイトにご注意ください

さくらのIoT

私たちの生活においてデジタルサイネージを様々な場所で目にすることが多くなりました。デジタルサイネージは動画や音声でより魅力的にサービスや商品を宣伝できる電子看板であり、表示の切り替えをリアルタイムに行えることを生かして広告効果をさらに高められます。一方、その表示内容を配信するIoT向けネットワークや配信システムの構築は一般的に容易ではありません。この記事では、さくらインターネットが提供する「さくらのモノプラットフォーム」を活用することでクラウド型のデジタルサイネージを簡単に作成できることを、当社エンジニアが制作した「電子看板デモ」の仕組みを通して解説します。

デジタルサイネージとは?

デジタルサイネージとは、デジタル技術を活用してディスプレイやプロジェクタなどに広告などの情報を掲載する媒体のことです。

デジタルサイネージの特徴

デジタルサイネージは従来の看板とは異なる特徴があります。以下にメリットとデメリットを挙げてみます。

デジタルサイネージのメリット

項目 説明
視認性が上がる ディスプレイやプロジェクタの明るさを生かし、看板やポスターに比べて広告のインパクトを高められます。
表現の幅が広がる 動画や音声を組み合わせることで、静止画ではできない表現が可能になります。
配信コンテンツの内容変更がしやすい 鮮度の高い情報発信に適しています。

デジタルサイネージのデメリット

項目 説明
コストが高い 電子機器の初期費用の他、配信システムの通信費用が継続的にかかります。
故障のリスク 故障時は交換や修理に伴う費用が発生します。

デジタルサイネージの種類

デジタルサイネージの種類は主に3つの型に分類できます。

スタンドアローン型

単にデジタル記録された静止画を表示するものや、TVCMのようなムービークリップをループして流し続けるものなどが該当します。機器単体で運用が可能であり、USBメモリなどで保存されたデータを読み込ませるため、運用のコストがあまりかからないことがメリットです。しかし、データの入れ替えには直接機器を操作する作業が必要なため、運用台数が多い場合や、アクセスしにくい場所に設置した場合その手間がデメリットとなります。

クラウド型(ネットワーク型)

クラウドサーバに格納しているデータを読み出して表示させる方法です。パソコンでクラウドシステムから更新をすることで、多数のデジタルサイネージのディスプレイ表示を一括更新でき、リアルタイムに情報更新ができることがメリットです。しかし、クラウドシステムやネットワークを利用するための費用が発生するのでスタンドアローン型と比べて運用コストが高額になってしまう点がデメリットです。

インタラクティブ型

そのサイネージを見るユーザの持っている機器(スマホなど)と通信し、インタラクティブに情報発信できるような仕組みのものも存在します。地図で場所案内や自動販売機で購入できるような仕組みや、翻訳機能、また専門的な情報を調べるために検索機能も搭載することができます。多機能であることがメリットですが、その操作を助けるタッチパネルやモーションセンサ機器が高額である他、システムとネットワーク利用料も同様にかかります。

デジタルサイネージの仕組みと課題

クラウド型のデジタルサイネージの一例として、ネットワーク経由でクラウド上のサーバからコンテンツを読み出して表示する仕組みで動作するものがあります。

これが設置される場所は室内だけでなく、屋外や高所となる場合もあり、この時ネットワーク回線としては携帯電話回線を使用すると便利です。一方、デジタルサイネージ本体はコストや消費電力を抑えるため、コンピュータ機器としては性能が限られた中で処理を行うものとなりがちです。
携帯電話回線の取り扱いとクラウドサーバへの通信を効率良く行う専用の組み込みシステム設計によりこれらの両立を狙えますが、そういった組込みシステム設計には通常のソフトウェア開発とは異なったノウハウが求められることが課題です。

さくらのモノプラットフォームを利用した電子掲示板

当社のエンジニアが「さくらのモノプラットフォーム」の開発キットを利用し、LTE 回線で表示更新ができるクラウド型デジタルサイネージのサンプルを作成しました。サンプルのため機能は限られていますが、「さくらのモノプラットフォーム」が提供する「IoTシステムの構築を楽にするプラットフォーム」「IoTデバイス開発のための設計情報」「マルチキャリア対応通信回線」を最大限活用することにより、できるだけ労力を削減して構築することができました。以下に制作内容の技術的な解説を記載しますので、同様の開発を行いたい方は是非ご参考にいただけますと幸いです。

免責事項

試作品ですので、本内容をご利用に当たり以下の内容はご承知おき下さい。

  • 当サンプルは技術的な実現性を示す目的でのみ作成されており、製品に求められるような特性を一切持っておりません。製品開発に直接用いることはご遠慮下さい。
  • 当情報に基づいて利用者が下した判断および起こした行動により、いかなる結果が発生しても、当社はその責を負いかねます。

また、当社の「本サイトご利用にあたって」も御覧ください。

システムの概要

当システムは、さくらのクラウド上に構築した「電子看板アップローダ(Webアプリ)」と「電子看板制御ボード」の2つの要素から構成されています。電子看板を更新する際には、インターネットに接続されたPCから「電子看板アップローダ(Webアプリ)」にアクセスし、Webページの指示に従って表示するコンテンツを指定します。電子看板アップローダは「さくらのモノプラットフォーム(モノプラ)」のゲートウェイが備えるWeb API経由で画像のアップロードと、モノプラのプロジェクトに登録されたSCM-LTEM1NRF向けへのメッセージ送信を行います。電子看板制御ボードは電源が入っている間定期的に「さくらのモノプラットフォーム(モノプラ)」からのメッセージが無いか確認します。画像ファイル名が記載されたメッセージを受信した場合はその画像のダウンロードをモノプラにリクエストし、受信したデータをディスプレイに表示します。

電子看板制御ボード

SCM-LTEM1NRF を搭載した電子看板制御ボードはRaspberry Pi PicoとSCM-LTEM1NRFを用いブレッドボード上に配線することによって構築されています。

Raspberry Pi Pico

当ボード上でRaspberry Pi PicoはDVI信号の出力と、モノプラへのメッセージ有無の確認・ダウンロード制御を担っています。本来Raspberry Pi Picoには映像出力機能がありませんが、Raspberry Pi Pico用DVIアダプタ基板をはんだ付けすることで映像コネクタを増設し、PicoDVIライブラリを使用することで映像出力が可能になります。当構成はRaspberry Pi Picoを定格を超えたクロック速度で動作させている他、DVI信号の伝送に適さない2.54mmピッチのIOパッドを通した出力を行っているため、実験環境によっては動かないケースがあります。
PicoDVIによる映像出力はデフォルトでは640x480 (VGA) と小さなサイズであり、画像保存に使えるメモリも限られておりこれ以上のサイズの画像表示は困難です。当サンプルでは変わり種の480x1920サイズのディスプレイへの出力を実現するため、フレームレートを下げるとともに8倍の拡大表示を行うことで画像用メモリを節減したバージョンを使用しています。動作確認は 8.8インチ細長液晶 + HDMI I/Fボードのみで行われているため、他環境での再現性は保証できません。
Raspberry Pi Pico用プログラムはpico_sign_sipf_xmodemリポジトリのswディレクトリ以下に格納されています。
これは Raspberry Pi PicoのC/C++SDKを用いて開発されており、ubuntu 22.04LTS環境上で下記のコマンドでコンパイルできます。

sudo apt install git gcc make cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential golang
git clone --recursive git@github.com:homelith/pico_sign_sipf_xmodem.git
cd pico_sign_sipf_xmodem/sw
make

コンパイルの結果生成されるsw/build/app/pico_sign_board.uf2ファイルをRaspberry Pi Picoに書き込みます。書き込みにはRaspberry Pi Picoを MicroUSB ポート経由でPCに直結することで行えます。書き込み後 Raspberry Pi Pico単体で電源を投入することで、あらかじめ初期画像としてプログラム内に記録されているtestcard_60x1280.pngの内容がスクロール表示されることが確認できます。

Raspberry Pi Pico

SCM-LTEM1NRF は「さくらのモノプラットフォーム」開発者向けに提供されるDIP 型の評価モジュールです。2023年4月現在、開発キットお申込みフォームからのお申込みで開発者一人につき原則1つ無償提供されています。また、互換仕様の開発ボード(Mixdake for モノプラットフォーム開発ボード)がフィールドテストや小規模製造の目的でナチュラルスタイル社販売ページにて販売されています。
当ボードは「簡易なコマンドインタプリタを内蔵したモノプラットフォームクライアントとして振舞わせ、その操作を別のマイコンなどから行う方式」と「モノプラットフォームへのLTE接続用ライブラリを用い、搭載されているマイコンのみで開発を行う方式」の2パターンのどちらかで開発することができます。後者はシステムをマイコン1個で完結させることができ、IoTシステムに求められる低消費電力性を最大化する方式として有効ですが、搭載マイコンである nRF9160 の開発に関する知識が必要でパワーユーザー向けです。当システムでは nRF9160 マイコンでは行えない画像出力を行う必要性と開発の簡単化のため、前者の方式を用います。
SCM-LTEM1NRF を「簡易なコマンドインタプリタを内蔵したモノプラットフォームクライアントとして振舞わせる」ファームウェア(sipf-std-client_nrf9160)はデフォルトで書き込まれているため、基本的には変更の必要はありません。ただし、当システムはsipf-std-client_nrf9160v0.4.0以降で実装されている$$FPUTおよび$$FGETコマンドを使用しているため、それ以前のファームウェアでは動作しません。ファームウェアの更新はボードと nRF9160 対応の書き込みツール(例:SEGGER J-link シリーズ)を接続しての書き込みか、マニュアル「8-3. SCM-LTEM1NRFファームウェアのFOTA実行方法」に示したオンラインアップデートなどで行えます。
SCM-LTEM1NRF搭載のSIMはあらかじめ「ご利用の流れ(SCM-LTEM1NRF)」の手順で「さくらのモノプラットフォーム」に登録しておく必要があります。登録が正常に完了しており、装置周辺がLTEの電波通信が行える環境の場合、単体で電源投入したあとしばらくすると LED が両方点灯状態になり、通信準備ができていることを確認できます。

回路の作成

上記の回路図のように、ブレッドボード上で2つのマイコンへの電源供給と相互接続を行う配線を実施します。SCM-LTEM12NRFはLTE通信の瞬間に大電力を消費するため、システム全体への電源供給は余裕を持ったACアダプタ(2A以上)によって行うことを推奨いたします。この構成に電源を投入すると初期画像の表示が始まり、SW2を押すか10秒程度待つとRaspberry Pi PicoからSCM-LTEM1NRFにモノプラからの受信メッセージ有無を確認するポーリング作業が始まります。ポーリングを行っている間Raspberry Pi Pico上に搭載されたLEDが点灯するため、正常時は「受信メッセージは無い」ということで作業が終了し、1秒程度で LED は消灯します。

Raspberry Pi Pico用ソフトウェアの簡単な解説

Raspberry Pi Picoに搭載されているマイコンRP2040は2コアのARM Cortex-M0+コアと両コア間の非同期通信を補助するFIFO、線形補間処理などの特定演算を補助するSIO(Single cycle IO)、GPIOを制御する専用ステートマシン(ProgrammableIO)を備えており、PicoDVIライブラリはそれらを駆使して実装されています。図に従って、表示する画像はあらかじめrgb565形式に変換しておき、「画像メモリ60x1280」に保存しておきます。コア#0がメインループの中で1行づつ読み出してrgb565情報1行分のキュー(colour queue)に格納、そのデータをコア#1が取り出し、DVI 方式のディスプレイ出力に用いられる信号フォーマットTMDSのシンボル群に変換します。変換速度を高速化するため、RGB3チャンネルのうち2チャンネルでは線形補間アクセラレータ#0(interpolator0)を呼び出して処理を行います。TMDSのシンボル群はもう一度tmds1行分のキュー(tmds queue)に格納され、DVI 信号出力を行っているステートマシン(PIO)が次の 1pixelのデータを要求する時に発生させる割り込みを契機にコア #0 の割り込みハンドラ内で取り出され、PIO に供給されます。
当電子看板制御ボードではさらに、コア #0 のメインループ内でUART1インタフェース(Raspberry Pi Pico6番ピンと7番ピン)の制御を同時並行的に行う処理を追加し、SCM-LTEM1NRF標準ファームのコマンドインタプリタ(21番ピンと22番ピンを用いたボーレート115200baudのシリアル通信)にアクセスする構成となっています。SCM-LTEM1NRF標準ファームのコマンドインタプリタは、「$$RX とタイプすると、受信メッセージがある場合は受信メッセージ内容を出力して最後にOK、何もない場合は単にOKと返す」といった文字ベースのコミュニケーションを行うインタフェースです。Raspberry Pi Pico 側のシリアル通信制御では、大まかに「180秒ごと、もしくはSW2が押された時は即座に受信メッセージが無いか確認($$RXメッセージを発行して応答を待つ)」「受信メッセージが文字列形式であった場合は、$$FGET コマンドを続けて発行してその文字列をファイル名として解釈した画像ファイルをダウンロードし、画像メモリをアップデート」「受信メッセージが数値型形式であった場合は、看板のスクロールする速度と解釈して適用」の3つの制御が、画像出力タスクを停止させないよう、バックグラウンド的に行われています。
詳しくはPicoDVIライブラリおよび当ボード用Raspberry Pi Picoソフトウェアのソースコードをご覧ください。

「さくらのモノプラットフォーム」コントロールパネルを用いた動作検証とデバッグ

本来であれば、この時点であらかじめ携帯電話回線認証機能、メッセージ送受信、ファイル送受信機能を備えたWebシステムを構築しておかねば、完成した電子看板制御ボードの動作確認やデバッグは行えません。しかし、今回用いたメッセージ送受信やファイルアップロード・ダウンロードの仕組みは、あらかじめ「さくらのモノプラットフォーム」が定義して提供しているものであるため、「さくらのクラウド」コントロールパネルにログインして操作することで、「モノプラットフォーム」-「サービスアダプタ」に登録されたWebsocket型アダプタからメッセージ送受信、「モノプラットフォーム」-「プロジェクト」に登録されたモノプラットフォームプロジェクトから送受信の候補となるファイル登録が行えます。すなわち、あらかじめ画像ファイルをプロジェクトに登録しておき、そのファイル名を文字列形式でペイロードに乗せたメッセージを送信することで、あとで説明する電子看板アップローダが無い状態でも、電子看板制御ボードに任意の画像を表示させ、デバッグを行うことが可能です。

「さくらのクラウド」コントロールパネルにログインし、「モノプラットフォーム」-「プロジェクト」タブを開いたところです。電子看板制御ボードが用いるrgb565形式の画像ファイルが数個登録された状態が確認できます。

「さくらのクラウド」コントロールパネルにログインし、「モノプラットフォーム」-「サービスアダプタ」タブから WebSocket 方式アダプタを開いたところです。「メッセージ送信」メニューから可変長文字列形式の画像ファイル名を記入して送信することで、電子看板制御ボードに画像ファイルダウンロード開始のメッセージを送付することができます。

電子看板アップローダ

「さくらのクラウド」コントロールパネルからのメッセージ送受信・ファイル送受信の機能はデバッグ用途等を想定した最低限にとどめられています。そこで、電子看板制御システムとして操作者が使いやすいものとするため、電子看板アップローダをWebアプリの形で実装し、インターネットにつながったPCやスマホから簡単に操作できるようにします。

Django Webフレームワークを用いた動作

外部のWebシステムからアクセスするため、テスト用に用いたWebSocket方式サービスアダプタの他にincoming-webhook型サービスアダプタを作成します。

開発した電子看板アップローダはubuntu22.04LTS上で下記のように動作させてテスト(http://localhost:8080)できます。

sudo apt install python3-pip
pip install pipenv
git clone git@github.com:homelith/pico_sign_sipf_xmodem.git
cd pico_sign_sipf_xmodem/web
PIPENV_VENV_IN_PROJECT=1 pipenv install
# ここで pico_sign_web/settings/monopla.py を pico_sign_web/settings/monopla.py.template をもとに作成し、さくらのクラウド API キーとモノプラットフォームプロジェクト ID、デバイス ID を記載します。
pipenv run python3 gen_secret_key.py > pico_sign_web/settings/secret_key.py
pipenv run python3 manage.py migrate --settings=pico_sign_web.settings.settings_local
pipenv run python3 manage.py createsuperuser --settings=pico_sign_web.settings.settings_local
pipenv run python3 manage.py runserver 0.0.0.0:8080 --settings=pico_sign_web.settings.settings_local

電子看板アップローダはdjango標準のパスワード認証機能(indexに対してlogin_requiredを設定)によって管理者以外の操作から保護します。indexページにフォームを配置し、カスタム画像のアップロードとシステムに登録されたプリセット画像の選択が行えるようにしています。フォーム投稿の際はその選択に応じて /custom もしくは /preset エンドポイントへのPOSTが行われます。/custom エンドポイントはアップロードされたpng画像をrgb565方式に変更した後custom.binの名前でモノプラットフォームプロジェクトにファイル登録、その後ファイル名としてcustom.binを書き込んだ文字列形式のメッセージ送信をモノプラットフォームに指示します。/preset エンドポイントはあらかじめWebシステムに記録されている画像を用いて内部的に/custom エンドポイントへのアクセスが行われた状態を想定して処理を行います。詳しくは電子看板アップローダソースコードをご覧ください。

この段階で http://localhost:8080 にアクセス、セットアップ時に設定した管理者パスワードでログインしたのち、プリセットの看板を設定することができます。設定後、電子看板制御ボードの SW2 ボタンを押下することで、指示された画像のダウンロードが始まり表示が更新され始めるところを見ることができます。

さくらのクラウド仮想サーバとエンハンスドDBを用いたWebアプリのデプロイ

電子看板アップローダをさくらのクラウド仮想サーバなどにデプロイすることで、インターネットに接続された端末・スマートフォン等ならどこでもアクセスして制御できるようになります。この時、認証情報を保存するデータベースをローカルディスクではなく、当社LABプロダクト「エンハンスド DB」を使用して保存することにします。このようにすることで、システムの永続的な記憶情報がエンハンスドDBに切り出された状態になるため、仮想サーバ上でのデプロイにデータ移行作業が不要となり、仮想サーバのスペック変更・OSアップデートなどに伴う再構築・冗長構成の作成時に大変利便性が向上します。

この例では石狩第1ゾーンを用い、コンパクトな構成として1CPU、メモリ2GBの仮想サーバ(OS:Ubuntu 22.04 LTS server)を作成しました。

合わせてLABプロダクト「エンハンスドDB」にて当システム用のデータベースを1つTiDB方式で作成しました。

LAB プロダクトは新機能の動作検証およびフィードバック収集を目的として、さくらのクラウドにおける開発中サービスを実験的に提供しているものです。無料でご利用いただけますが、正式サービスとしてのサポートは行っておりませんのでご注意ください。利用条件も合わせてお読みください。

デプロイは以下のような手順で行い、以後 http://{設定された IP} にて電子看板の制御が行えるようになります。環境にはあらかじめdocker-ceをインストールしておきます。

git clone git@github.com:homelith/pico_sign_sipf_xmodem.git
cd pico_sign_sipf_xmodem/web
# ここで pico_sign_web/settings/monopla.py を pico_sign_web/settings/monopla.py.template をもとに作成し、さくらのクラウド API キーとモノプラットフォームプロジェクト ID、デバイス ID を記載します。
# ここで pico_sign_web/settings/settings_edb.py を pico_sign_web/settings/settings_edb.template をもとに作成し、エンハンスド DB へのアクセスキーと ALLOWED_HOST(ドメイン名によるアクセスを用いる場合)を適切に記載します。
make docker
sudo cp pico_sign_web.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start pico_sign_web

より現代的な Web システムとしての体裁を整えるためには、さくらのクラウドDNS機能によってURLでのアクセスを可能としたり、さくらのクラウドエンハンスドロードバランサを用いて冗長サーバ群の間の自動負荷分散とhttpsサイトでの提供を追加するのもよいでしょう。

「さくらのモノプラットフォーム」APIを用いたメッセージの送受信

当電子看板アップローダは電子看板制御ボードに用いられたSCM-LTEM1NRFデバイスとの通信確立、クラウドへのファイル保存、メッセージフォーマットの策定等を「さくらのモノプラットフォーム」に任せることで、外部への操作をすべてWeb API経由で行うことができ、IoTデバイスの仕様に合わせたローレベルなネットワーク通信を意識することなく、簡単な制作が可能となっています。今回使った大きな2種類のWeb APIについて簡単に解説し、合わせて取り扱い説明ページへのリンクを記載します。

Incoming Webhook API

Incoming Webhook用のURLにデータを送信することで、デバイス方向へメッセージを送信できます。 当サンプルでは電子看板制御ボードにダウンロードさせるファイル名を送るときに UTF-8 文字列形式で、スクロール速度を指定する時に int16 形式で数値を格納したメッセージを送信しています。(解説ページ

ファイルアップロードAPI

モノプラットフォームのプロジェクトに紐づく「ファイル送受信」のタブに新規ファイルをアップロードするAPIです。同じ名前のファイルをアップロードすると上書きされる仕様であり、当システムでは常に上書きを行う運用で使用しています。(解説ページ

まとめ

LTE回線で表示更新ができるクラウド型デジタルサイネージのサンプルを例に、「さくらのモノプラットフォーム」を活用することでIoT要素を含むシステムを簡単に製作できることを示しました。IoTを活用した製品開発に携わる方に役立つ情報となれば幸いです。

構成・執筆・編集
IoTプラットフォーム事業部

IoTコラムでは、さくらのIoTに関係するビジネス向けの内容や身近な例、通信技術の説明や当社エンジニアが取り組んだ開発サンプルなどを掲載しています。

2023年5月公開