以下の内容はhttps://supernove.hatenadiary.jp/entry/2024/12/21/235847より取得しました。


Wio BG770Aでミニサイネージを作ってみた

この記事は SORACOM Advent Calendar 2024 15日目の記事です。遅刻してすみませんでした…

さて、このブログも約半年ぶりの更新です

色々忙しくてなにかじっくりハードウェアと遊ぶ時間が取れなかったですが、久々に新しいハードウェアを触る機会がありました

先日SORACOM UG東海でSeeedさんが開発した新製品のマイコンボードの体験会がありました

soracomug-tokyo.connpass.com

その名も WioBG770A

こちらはSeeedさんが発売しているWioLTEの後継機的な立ち位置で、省電力が売りのセルラー通信ができるボードになっています

当日はこのボードで色々触って結構面白いボードだと感じました

で、その後懇親会で何を血迷ったのか(?)このボードを勢いで注文しましたw

というわけで今回はこのボードを使って遊んでみた話です

今回作るもの

今回は定期実行で天気APIを叩いて現在の気象情報表示する簡単なサイネージをWio BG770Aで実装してみることにしました(画像はイメージです)

システム構成はこんな感じです

AWSをベースにした構成になっており、EventBridge SchedulerでLambdaを定期的に実行しLambdaではOpenWeatherのAPIを使って現在の気候を取得し、そのデータをAWS IoT経由でSORACOM BeamからWio BG770Aに表示データを飛ばす仕組みになっています

事前準備

今回はデバイス側、クラウド側でそれぞれ以下の準備が必要です

バイス

ハードウェア

以下のハードウェアを準備します

ソフトウェア

Wio BG770A ユーザーマニュアルの「2-1. 開発環境を準備する」を参考に、開発環境をインストールします

BG770A用の環境をセットアップしたら、追加で以下のライブラリをセットアップします(すべてArduinoIDE上のライブラリマネージャからインストールできます)

  • ArduinoJson:ArudinoでJSONを扱うためのライブラリ
  • PubSubClient:MQTTを使うためのライブラリ
  • U8gs:OLEDディスプレイを操作するためのライブラリ

クラウド

アカウント

開発環境

今回はAWSのリソースをSAMでデプロイするので、SAMの実行環境を用意します

また、コンテナを使ってアプリケーションのビルドをすることを想定しているのでDockerのセットアップも行います

バイス側の構築

ハードウェアのセットアップ

SIMカードはWio BG770Aの基盤の裏側にあるカードスロットにカードの端子が基板側に向けて取り付けます

OLEDディスプレイはI2Cで接続するので、4つあるGrove端子の中の I2C と書かれた端子に接続します

ソースコードの実装

Arduinoに以下のGistのコードを保存し、コンパイル、書き込みをします

執筆時点(2024/12/21時点)ではまだMQTTを使ったサンプルも事例が見当たらないので多分これが初の事例ですw

そういうこともあって、接続方法がわからず探り探りでMQTTのSubscribe方法を実装しましたが、デバイスのライブラリが無事にPubSubクライアントに対応してたおかげて思ってたより詰まることなくスムーズに実装できました(Seeedの松岡さん、フォローありがとうございます!)

いずれMQTTを切り抜いたサンプルはPR出そうと思います

PR出しました

github.com

また、省電力を売りにしているのでGroveの端子に接続してモジュールを操作したいときは setup() 関数には以下の1行を追加してGrove端子に対して電源を共有する設定を追加します

WioCellular.enableGrovePower();

クラウド側の構築

OpenWeatherのAPIキーを取得

OpenWeatherにログインしたら、画面右上のアカウントから My API Keys を選択します

APIキーの設定画面が表示されたら任意のAPIキー名を入力して Generate をクリックします

生成されたAPIキーはこの後の設定で必要なのでどこかにメモしておきます

AWS IoT、SORACOM Beamのセットアップ

以下のドキュメントのステップ1とステップ2を行い、SORACOM BeamをAWS IoTに接続するための設定を行います

users.soracom.io

パラメータのセットアップ

今回はLambda関数でOpenWeatherのAPIを叩くにあたり、APIキーをAWS Systems Managerのパラメータストアに格納しLambdaからSDK経由で呼び出すことにします。

AWS Systems Managerのコンソールを開いて、左のペインから「パラメータストア」を選択します

右上の「パラメータの作成」をクリックし、パラメータを作成します

パラメータ名は 、 /iot-signage/OPENWEATHER_API_KEY にして、タイプは 安全な文字列 を選択します

その他の設定はデフォルトのままで「パラメータの作成」をクリックします

SAMのデプロイ

最後にSAMで今回のAWSで動かすアプリケーションをデプロイします

以下のコマンドでレポジトリをクローンします

git clone https://github.com/Miura55/iot-signage-event-batch

クローンしたレポジトリ内で以下のコマンドを実行することでアプリケーションがビルドされます

初回はコンテナイメージを取得するため、時間がかかります

sam build --use-container

ビルド後、ローカルで動作確認するときは以下のコマンドを実行するとローカルでLambda関数を実行できます(Lambdaで使用しているAWSのサービス(IoTとSystems Manager)のアクセス権がローカルでセットアップしたAWSの認証に付与されている必要があります)

sam local invoke PublishMessageFunction --event events/event-cloudwatch-event.json

AWSにデプロイするときは以下のコマンドを実行します

sam deploy 

Lambda関数に関してはさほど複雑な処理をしているわけではないのでソースコードの解説は省略しますが、以下のリンクのコードが実行されるので、詳細が気になる方はコード内のコメントを追いながらご確認いただければと思います

github.com

また、デフォルトでは名古屋の現在の気象情報を取得するようになっていますが、検索対象の都市はレポジトリ内にある template.yaml の以下の行でLambdaの環境変数として設定しています

そのため、この値を取得したい都市に変更してデプロイすると対象の都市の気象情報を取得することができます

      Environment:
        Variables:
          TARGET_CITY: 'Nagoya,JP'  // <- ここの都市を変更すると反映される

動作確認

それでは、実際に動作確認です

Wio BG770Aの電源を入れてSORACOM Beamが接続されている状態にしておきます

レポジトリにあるSAMテンプレートでは30分に1回(毎時0分と30分)Lambda関数を実行する設定 になっているため、時間になりLambda関数が実行されて以下の通りEventBridgeのイベントが実行された時間とOpenWeatherのAPIで取得された気象情報がディスプレイに表示されたら今回作ったシステムは無事に稼働してます

なぜAWSで画面更新をするのか?

今回の構成をやるぐらいならマイコン側で定期実行してもいいように思うかも知れません

ただ、遠隔地でこの装置を配置するとなったとして、その都度現場に出向いて更新作業するのは手間です

そこで、更新間隔のような頻繁に調整が必要な内容はデバイス側では無くAWSのようなクラウドで対応できるようにすることでメンテナンス製が上がるかも?という目論見で今回のようなシナリオを考えました

後は僕がハードウェアがそこまで強いわけでも無いというのもありますがねw

まとめ

今回はWio BG770AとAWSを使ってミニサイネージを作ってみました

個人的にセンサーでデータを飛ばすのもいいけどやっぱりクラウドから遠隔で操作できる方が魅力的だと思うタイプで、そこから今回のネタを思いつきました

遠隔操作といえばMQTTが思いつきますが、サンプルも事例もない中で地味に詰まるかと思いましたが、今までArduino触ってたときのカンがそのまま活かせてなんとか実装できて良かったです!(デバイスのライブラリのおかげでもあるけどw)

これでWio BGA770Aをまた一つ攻略できた気がします




以上の内容はhttps://supernove.hatenadiary.jp/entry/2024/12/21/235847より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14