こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
DesignSpark Environmental Sensor Development Kit(ESDK)ハードウェアはDesignSparkが提案するエアークオリティープロジェクト(AQプロジェクト)の中核を担うシステムユニットです。このユニットで検出したセンサーデータを読み取るためには、DesignSpark.EDSK Pythonモジュールを活用する必要があります。この記事ではセンシングしたデータをESDKのタッチスクリーンに表示し、さらにクラウドデータベースと分析プラットフォームにアップロードする手順を紹介します。
アプリがセンサーを読み取ってローカルディスプレイを駆動し、データをクラウドメトリックプラットフォームにポストする
DesignSpark.ESDK
ESDKのPythonモジュールは次のことを可能にします:
- Raspberry Piのハードウェアシリアル番号の取得
- I2Cバスプロービングによるセンサー検出
- ESDKセンサーモジュールの読み込み
- 生の測定値を℃や%などに変換するアルゴリズムの実装
- GPSの読み取り
- 必要に応じたヘルパー機能の提供(巡回冗長検査CRCなど)
現時点でPythonモジュールはまだ初期段階であり、今後はセンサーのハードウェアの追加をサポートのみならず、そのアーキテクチャや機能の改善などに時間をかけて進化させていく予定です。
上記の機能は単にメインアプリケーションに統合するのではなくモジュールとして開発されており、Python Package Index(PyPI)に公開されています。これはESDKハードウェアがこのPythonモジュールを元にして、他の多くのアプリケーションで使用していくことを考慮してコードの再利用をしやすくするためです。
アプリケーション
Pythonバックエンド
ここでの”Pythonコード”は簡単に言うと:
- DesignSpark.ESDK経由でセンサーを読み取る
- WebSocket APIを使用して測定値を公開する
- ブローカーが設定されている場合はMQTT経由で読み取り値を公開する
- 1つ以上のエンドポイントが設定されている場合、読み取り値をPrometheusに公開する
WebSocket APIについては後ほど詳しく説明します。MQTTは、ローカルマシンで読み取りを行う必要がある場合、またはすでに設定されているリモートブローカーがある場合に特に有用です。一方、PrometheusはDesignSpark Metricsクラウドで使用されている時系列(時系列に並んだ)データベースです。エアークオリティープロジェクトで使用されているクラウドプラットフォームについては別の記事で紹介する予定です。
Webフロントエンド
ディスプレイHATのグラフィカルユーザーインターフェースを作成するためにQtウィジェットツールキットなど、様々なオプションを検討しました。しかし最終的にはウェブページとして構築して、キオスクモードで起動したブラウザで表示することに決定しました。これはネイティブアプリケーションのGUIツールキットよりもHTML、CSS、JavaScriptの基本的なUIが一般的であるため、より多くのコミュニティがカスタムインターフェースの作成に対し参入障壁が低いという利点があるからです。
現在、紹介しているバージョンでは温度+湿度、TVOC、CO2、粒子状物質の4つの測定値表示ボックスからなるシンプルなウェブページが用意されています。測定値はJavaScriptのクライアント側のコードで更新され、PythonアプリケーションからWebSocket API経由でデータを受信しています。
今後はウェブインターフェースを進化させて、マルチウィンドウにして設定やステータス情報、チャート、ネットワークアクセスなどにも対応し画面サイズに合わせたレスポンシブデザインにする予定です。現時点ではインターフェースはローカルのみですが、もし興味がある方はブラウザで簡単にHTMLをロードして、プログラムを書き換えてアップロードすることでユーザーカスタマイズができます。
インストール
Raspberry Piのプリインストールイメージをダウンロードして8GB以上のマイクロSDカードに書き出します。WindowsではEtcherなどのツールを使って行います。Linuxではコマンドラインで dd
を使って行います。プリインストールイメージの書き出しプロセスは、通常のRaspberry PiのOSイメージの書き出しと同じです。
いずれインストールプロセスは最新の標準Raspberry Pi OSリリースをインストールし、これをブートしてアプリケーションインストーラスクリプトを実行するように切り替わるでしょう。これによりプロジェクトのメンテナンスと、より完全で大きなOSイメージファイルを配布する必要性をなくします。
コンフィギュレーション(構成)
Air Qualityアプリケーションは下のファイルを介して構成されます:
/boot/aq/aq.toml
このパーティションはfat32でフォーマットされているためWindowsはもちろん、LinuxやMacでもマウントができて、編集が容易です。
それではメインのESDKハードウェアのセクションから構成オプションを見ていきましょう!
[ESDK]
friendlyname = "bjonesoffice"
gps = false
latitude = 53.7129968
longitude = -1.9392022
debug = false
friendlyname
はその名の通りデバイスに使用する便利なラベルです。理想としては所有者名と場所の組み合わせなど、一意なものにすべきですがRaspberry Piハードウェアのシリアル番号がESDKハードウェアを区別する主要な手段として使用されるため、重要性はあまりなく、グローバルで一意なものである必要はありません。
“gps = true”
が設定されておりGPS受信機が位置の固定値を持つ場合には、センサーの読み取りに位置のタグ付けを行います。しかし、デフォルトでは“gps = false”
に設定されており、この状態では位置情報の代わりにハードコーディングされた緯度・経度が使用されます。当初は屋内利用が多かったためこれが初期設定になっています。
またデバッグオプションがありますがデフォルトでは無効になっています。
[local]
csv = false
次にローカルログのセクションがあり、インストール時点ではセンサーの読み取り値を/aq/data/
下のCSVファイルにロギングするオプションが1つだけあります。これはext4ジャーナリングファイルシステムでフォーマットされた専用パーティションに配置されています。生成されたCSVファイルはscp(例:WindowsではWinSCP)を使用してネットワーク経由でコピーするか、Raspberry PiをシャットダウンしてマイクロSDカードを取り外して別のLinuxコンピュータに挿入してコピーする必要があります。
[mqtt]
broker = "localhost"
basetopic = "airquality"
username = ""
password = ""
デフォルトではMQTTはRaspberry Pi上で動作するブローカーに発行するように設定されており、上図のように認証は設定されていません。この設定は簡単に変更できてリモートブローカーを使用したり、ユーザー名とパスワードを設定して認証を有効にしたり、別のベーストピックを設定したりすることができます。
[prometheus.global]
instance = ""
key = "”
url = "prometheus-prod-01-eu-west-0.grafana.net/api/prom/push"
interval = 300
Prometheus*セクションは1つ以上あり、センサーの測定値をリモートのPrometheus時系列データベースに書き込むスレッドを設定します。上記の例ではインスタンスIDとAPIキーの値が欠落しています。Intervalパラメータはセンサーのデータを書き込む頻度を指定します(この例では300秒毎、つまり5分毎です)。Prometheusはデフォルトでは設定されていませんので、別のクラウドプラットフォームの記事で設定方法や動作を説明します。
更新情報
今回紹介した初期バージョンであるアルファ版リリースではPythonコードは単純にpiユーザーのホームディレクトリの下から実行され、“git pull”経由で更新されます。今後はアプリケーションは順次パッケージ化されていき、より便利な更新メカニズムを導入していく予定です。これはRaspberry PiのOSを純正に切り替え、エアークオリティーアプリケーションをインストールするスクリプトと同時に展開される予定です。