M5Stack Monitor for Nature Remo series

visibility450
visibility450

M5StackのEInkディスプレイ付き無線通信ユニット M5Paper を使った、Nature Remoシリーズのセンサ・データ表示器です。

link https://github.com/ciniml/m5stack-remo-monitor
動画
開発素材

API

デバイス

ツール

システム構成
system image

システム構成

自宅にある Nature Remo3 が室温および湿度を測定し、Natureのサーバーにアップロードしています。 また、Nature Remo E liteはWi-SUNの無線通信上でECHONET Liteプロトコルを使って電力事業者が設置しているスマートメーターにBルート経由でアクセスし、瞬時電力消費量と積算電力消費量を取得し、Natureのサーバーにアップロードしています。

Natureのサーバーはサードパーティのデバイスを接続するためのサービスとして、Nature Cloud APIによるアクセスを提供しており、本リポジトリで公開しているファームウェアはこのAPI経由で上記2つのデバイスがアップロードした情報を取得します。 また、取得した情報をもとにM5Paperに搭載されているEInkディスプレイに現在値および最大過去24時間分の変化をグラフ表示します。

ファームウェア構成

M5Paper上のファームウェアは、前述の通り、

  • NatureサーバーにNature Cloud API経由でアクセスして情報を取得
  • 取得した情報をEInkディスプレイに表示

の2つの処理を行います。

これらの処理は、いくつかのライブラリやフレームワークを用いて実装されています。

ファームウェア構成

Rust

本ファームウェアは一部を除いて主要な処理はRustで記述しています。

ESP-IDF

ESP32の開発元であるEspressifが開発しているESP32向けのソフトウェア開発環境です。ESP32シリーズ向けのファームウェアをC言語およびC++言語にて開発するための各種ライブラリおよびツールチェインを提供します。 また、後述する esp-idf-sys などを組み合わせることにより、Rustによるファームウェア開発も可能です。

esp-idf-sys

主にEspressifにより開発されている、ESP-IDFの機能をRustから使うためのクレート (Rustのライブラリ) です。 ESP-IDFのAPIをRustから呼び出すためのcffiによるバインディングが含まれています。

また、ESP32向けのRust環境は、ESP-IDFと合わせてビルドされることが前提となっており、そのためにESP-IDFのビルドシステムを呼び出して最終的なファームウェアのバイナリを生成する機能も esp-idf-sys により提供されます。

ESP32 std

Rustのツールチェインはプラットフォーム依存部分をstdクレートとして各種プラットフォーム向けに用意しています。ESP32 stdはESP-IDF環境向けのstdクレートで、ESP32向けのRustツールチェインに含まれています。

esp-idf-svc

esp-idf-sysが提供するESP-IDFのバインディングはESP-IDFのAPIをRustから呼び出せるようにするだけのものなので、Rustから呼び出すのは安全ではありません。 esp-idf-svcはこれらの機能をRustから安全に呼び出せるようにするためのラッパーを提供します。

esp-idf-svcの機能により、ESP32の無線通信機能などをRustから簡単に使えるようになります。

LovyanGFX

高性能な組込み向けの表示デバイスドライバ、および描画機能を提供するライブラリです。M5Paperに搭載されているEInkディスプレイ EPD_ED047TC1 の制御に使います。 C++で実装されており、ESP-IDF上で動作します。

lgfx-rs

LovyanGFXをRustから呼び出すためのバインディングおよびラッパーを提供します。現在のところ本ファームウェアで必要となる程度のLovyanGFXの機能に対するラッパーのみ提供しています。

fuga-remo-api

RustでNature Cloud APIからのレスポンスを処理するためのパーサー。

fuga-json-seq-parser

ESP32のような使用可能なRAMの量に制限のあるデバイス上で、比較的サイズの大きいJSONをパースするためのクレート。fuga-remo-apiの実装につかっています。

ファームウェアの処理

ファームウェアの処理は主に2つのタスクに分かれています。

Nature Cloud API通信処理

Nature Cloud API経由で情報を取得します。 HTTPSにてサーバーに接続し、返ってきたレスポンスを前述の fuga-remo-api を用いて解析し、対象となるセンサー情報や電力消費量の情報を抽出します。

抽出した情報はキュー経由でディスプレイ表示処理に送られます。

Cloud APIの通信処理に関しては、 こちらのブログ記事 にも記載しています。

ディスプレイ表示処理

前述のCloud API通信処理から送られてきた情報をもとに、 lgfx-rsからLovyanGFXのディスプレイ・ドライバを呼び出して、現在の室温・気温・瞬時電力の値および時系列のグラフを描画します。

ストーリー

作った理由

主な理由は2つあります。

1つ目は、Remo3/Remo E liteの情報を常に表示している端末が欲しかったためです。 家庭で最も電力を消費するのはエアコンを代表とする冷暖房器具です。これらの設定温度を最適化するために、ある程度の時間で時系列で同期した温度・湿度・消費電力の情報の可視化が必要です。 Remo3/Remo E liteはこれらの情報を取得可能であり、Remo E liteの電力情報は公式アプリで時系列情報としてグラフ表示可能ですが、常に表示しておくには追加でAndroid/iOSデバイスが必要になります。 また、公式アプリでは温度・湿度の時系列での表示には現在のところ対応していません。

作成したファームウェアはM5Paper上に必要な情報を最大24時間分、時系列で表示しつづけます。

2つ目は、ESP32の無線通信機能をつかったファームウェアを現在の組込みRust環境でつくってみたかったためです。 現在のところ、ESP32等のファームウェアの開発には主にC/C++言語が用いられます。 一方、組込み向けファームウェアの開発に向いている新しい言語としてRustが注目されており、Linuxカーネルモジュールの開発にも試験的に利用可能となってきています。

ESP32の開発元であるEspressif自身がRustでの開発環境の整備に力を入れており、まだまだ発展途上ではあるものの、ESP32の無線通信機能を用いたファームウェアの開発が可能となってきています。

こういったRustによる通信機能付きファームウェア開発のターゲットとして、M5Stackのようなディスプレイ付きの製品は適しており、今回はターゲットとして画面サイズの要件から M5Paper を選択しました。

メンバー
  • user
    Kenta Ida @ciniml

関連イベント
  • event M5Stack Japan Creativity Contest 20232023-07-15 開催
関連リンク

同じニオイがする作品
  • event ぺパ子のファッションチェック
  • event 声でみんなの生活をサポート (声のプレゼント)
  • event Kobots コネクト・カスタマイズ・ロボット
  • event 歩行リハビリエンタメシステム Melody Shoes

Proto lovers ♥
user
user

イベントまとめ

コンテストまとめ

作品を登録しよう

モノづくりしている人に、つくった作品を見てもらえ、リアクションがもらえるかも?

close

目次


Proto lovers ♥
user
user