成果の概要・ポイント
- カスタム基板に合わせた組み込み Linux 環境を構築
- 前バージョンでは不可能だったリモートアップデートと動作状況の管理を実現
- クラウド連携により遠隔管理・監視機能を実装
利用技術
- OS: Yocto Project
- プログラミング言語: Python、bash
- GUI フレームワーク: Qt
- クラウドプラットフォーム: Google Cloud Platform(App Engine)
- 通信プロトコル: TCP/IP、シリアル通信
プロジェクトの概要
LEDデジタルサイネージ機器の製造企業様から、新バージョンのソフトウェア開発をご依頼いただきました。基板は同社がボードメーカーに依頼してカスタマイズしたものです。
当社の担当範囲は、端末アプリケーション、LED パネルファームウェアのバージョン管理、および動作状況の管理です。
背景と課題
新バージョンでは、より高性能なハードウェアを開発し、以下のような機能強化が計画されていました。
- リアルタイムでの遠隔監視・制御
- 多様なセンサーとの連携強化
- システムの安定性と保守性の向上
発注元にはハードウェアの専門家がいましたが、Linux・ネットワーク・サーバーに明るい人員はいませんでした。ソフトウェア開発には、サイネージの制御サーバーを手がける別の会社も参画しており、同社が Web 側、当社が組み込み側を担当する分担としました。
当社が引き受けたのは、Yocto のビルド、センサーや LED パネルとのシリアル通信、SBC 上でのハードウェア対応です。
技術的な実装内容
1. Yocto Project による組み込み環境構築
Yocto Project の採用は、基板をカスタマイズしたボードメーカーからの指定でした。カスタム基板のため、メーカー提供の BSP をそのまま使うことはできず、デバイスドライバの追加などの手当てが必要でした。
必要最小限のコンポーネントで構成したことで、メモリ使用量は非常に小さく抑えられています。一方、起動時間はドライバの読み込みタイミングに制約があり、大きくは短縮できていません。
2. 通信システムの実装
- GPS、温度センサー、バッテリー等とのシリアル通信インターフェース
- 管理サーバーとの安定した TCP/IP 通信
- 複数ボード間での協調動作に備えた内部 TCP/IP 通信(将来の構成に備えたもので、実際にこの構成を採った製品はありません)
- 通信エラー時の自動リトライ機構 — 設置場所によっては通信環境が良くない場合があるため
- データの暗号化 — 表示内容を書き換えられると問題になるため
直接接続する LED パネルは柔軟に拡張できる構成のため、パネルの構成に応じて表示サイズを変えられるように対応しました。
3. 制御アプリケーションの開発
Python と Qt フレームワークを採用しました。発注の時点で詳細な仕様が固まっておらず、開発を進めながら頻繁に修正していくことが分かっていたためです。性能が不足する箇所が出た場合は、その部分だけを C に置き換えていく想定で設計しました。
実装した機能は次のとおりです。
- リアルタイムでのサイネージ表示制御
- センサーデータの収集と処理
- ログ収集と異常検知機能
- LED パネルファームウェア更新機能
4. クラウド連携機能
クラウドに Google Cloud Platform を選定したのは当社です。
当社の担当範囲では、当初はアクセス数が多くありません。一方で、設置台数が増えたときのスケーリングは確保しておく必要があります。この両立のために App Engine を採用し、費用の最適化を図りました。当時、このようなスケーリングができるサービスは他にあまりなかったためです。現在であれば、別の選択肢もあると考えています。
実現した機能は次のとおりです。
- デバイスの遠隔監視とステータス管理
- LED パネルファームウェアのリモートアップデート
- 収集データの分析とレポーティング
- 異常発生時のアラート通知
開発における工夫点
- モジュール設計: 将来の機能拡張を考慮した疎結合なアーキテクチャ
- エラーハンドリング: 非常時の情報表示に使われることもあるため、止まらないことを最優先に設計・実装
- パフォーマンス最適化: リソースの限られた組み込み環境での効率的な動作
体制
当初は1名、後半は2名で担当しました。
成果
稼働状況
試験運用ではトラブルもありましたが、本稼働後、サーバー側は無停止で稼働しています。端末側には個別のトラブルがあるものの、当社が開発したアプリケーションに起因して停止したものはありません(表示の乱れなど軽微なものは発生しています)。
前バージョンとの差分
前バージョンでは、リモートアップデートと動作状況の管理ができませんでした。今回のバージョンでこれらを実現しています。なお、サイネージの表示機能そのものは当社の担当範囲外です。
リモートアップデートの範囲
対象は端末アプリケーションと LED パネルのファームウェアで、OS は対象外としました。 改修のタイミングで実機のメンテナンスを行う運用だったため、すべてをリモートで完結させる必要がなかったためです。
まとめ
本プロジェクトは、ハードウェアに強い発注元と、Web 開発に強い開発会社の間で欠けていた「組み込み Linux とハードウェア連携」の領域を、当社が引き受けた事例です。
社内にハードウェアの専門性はあるが、Linux やネットワークの担い手がいない — という状況は、製造業では珍しくありません。領域を切り分けて外部に出す形は、その解き方のひとつです。