• IoT

IoT奮闘記 ~なめこから始まるIoTシステム構築~

こんにちは。
ひょんな事からなめこの原木を手に入れたので、秋を楽しみにしている、宇野です。

多くの方々同様にベランダ菜園を行っているのですが、この度なめこが仲間入りしました。
このなめこをおいしくいただくためにIoTシステムを構築してみました。この取り組みを通して、電源にとても苦労し、悪戦苦闘を繰り返した結果、わが家がLPWAの基地局になってしまいました。その辺の苦労話を共有させていただきます。

湿度センサーを用いたIoTシステムの作成

なめこですが、どうやら「気温30度、湿度90%、風通し良く、日当たりよい」という条件を満たす必要があるようです。多少は風が入るようにしたビニールハウスをベランダに作ってその中に原木を置くことにしたのですが、気温や湿度はどうなのだろうと思い、センサーを置いてみることにしました。また、せっかくなので湿度が下がってきたら水を撒くことにしました。

今回作ったIoTシステムの構成は下図の通りとなります。

同僚からの「簡単に始めるべきだ」という甘言に屈し、Wio Nodeという、ほぼ接続するだけでデータが取れるマイコンにSHT31という温湿度センサーをGROVEで接続することにしました。
このマイコンESP8266ベースのMCUを搭載しているため、別途搭載しなくても無線LANが使用可能です。動作としてはセンサーで取得したデータを無線LAN経由でSeeedのクラウドサービス上に送信する仕組みとなっており、そのデータをAPIを使って表示することになります。

今回は家の無線LANを経由してSeeedに送付されたデータをIBMCloudのNode-RED(無料プランで収まります)で10分間隔で取得することにしました。取得したデータを整形し、可視化のためにAmbientに送付しています。また、湿度が90%を下回ったら同じくWio Nodeに接続されているリレースイッチを操作してポンプを起動し、水を撒くという仕組みとしました。

2日でシステムが停止。運用上の問題点

動かしだして2日目、電池切れでシステム停止が発生。

Wio Nodeは前述の通り無線LANを使用します。屋外であるベランダから屋内のアクセスポイントの間には鉄板の入った壁もあります。また、電子レンジ等2.4GHzに干渉する電波もたくさん飛び交っている状況と思われます。お世辞にも通信状態が良いとはいいがたい状況のため、電力消費量が多くなっていることを想定し計測してみると、5.17Vで0.061A。今回使用したモバイルバッテリーは3.7V 4700mAhのため、計算上は約2.3日しか持たないことが判明。
止まったところでなにも問題は無いのですが、2日に1回はバッテリー交換とかそんな運用は受け入れられない・・・

電力W(Wワット)=電圧V(Vボルト)× 電流I(Aアンペア)
17.39Wh = 3.7V × 4700mAh(4.7Ah)

Wio Node
5.17V * 0.061A = 0.31537 W

なので、
17.39Wh / 0.31537 W = 約55.14 時間 = 約2.3日

それならばと、電池を気にしなくてよいよう、エネルギーハーベスティングの環境構築に着手。10W発電の太陽電池パネルとコントローラ、12Vバッテリーを設置。理論値としては一日当たり約2.09Ahです。何事もなければ1日の発電量で3.2日分は蓄電できている計算です。発電効率が常に100%ならですが・・・
結果として、晴れていれば電池切れもなく使えていましたが、曇りや雨になるとやはり使い切ってしまう事が判明。Wio Node、結構な大飯ぐらいです。

屋外IoTデバイスにおける課題と解決策

そこでやっと踏ん切りが付きました。
「簡単に実現できるかもしれないが、屋外のような電源の無い環境で使用するIoTデバイスに無線LAN使うとか無謀な手はやめよう!!」

屋外で使用するIoTデバイスは電源が近くになかったり、簡単に交換できないことがしばしば。省電力であることがとても重要になります。
そのため、通信に関しても省電力で済む仕組みがたくさんでています。無免許で利用でき、個人での利用が可能であり、あまりお金がかからず、通信費もかけたくない・・・と、いう事でLoRaWANの環境を構築することとしました。
LoRaWANのゲートウェイ機器は完成品を購入すると高価ですが、Dragino社から販売されているLoRa GPS HATというRaspberryPiをアクセスポイント化するための機器を使用する事もできます。今回はこれを使用する事で安価に構築しました。

なお、お金をかけたくなかったので、データ送付先のクラウドサービスとしてThe Things Network(TTN)を使用することにしました。
かなり昔、FONというサービスがあったかと思います。自宅にFON用のアクセスポイントを設置して公開することで、どこの誰が公開しているFONのアクセスポイントであっても接続して利用することができるというものです。そのLoRaWAN版と思ってください。

ただ、まだこのアクセスポイントは日本には少ないため、住んでいる地域の唯一のアクセスポイントとなってしまう可能性があります。うちにもやたらたくさんアクセスが来るようになり、使いたい人多かったんだなと思う反面、セキュリティこわっと思ったので、内部のネットワークには全くアクセスできないようにする工夫もすることになりました。

新しい構成は図の通りです。

DHT11という温度・湿度センサーをDragino社のLoRa mini Devに接続。LoRaネットワークでRaspberryPiにデータが送信され、有線ネットワークを経由してインターネット上のTTNにデータを送付します。今回は(サンプルもあったので)Cayenneというダッシュボードを使用してグラフを表示する事にしました。

DHT11とLoRa mini Devの消費電力を計測してみたところ、5.18V 0.027A。なので、1日の発電量で約7.8日持つという計算になり、ここ数日の不安定な天気であったも安定して温度・湿度をとる事ができるようになりました。

IoTシステムを組むにあたって、大概がどのようなセンサーとかどのようなデバイスでとかいうあたりに目が行くことになるかと思いますが、電池、これ重要!!無線LANのように電気をバンバン消費する物をやめてみるとか、どうやったら長く動かすことができるか。そういう所にも目を向ける必要があると気づかされました。

ちなみにですが、先日のビニールハウスの温度:

・・・42度・・・気温は制御できないので、ダメかなこりゃ・・・

可視化のためのダッシュボード環境のセットアップ

※構築方法は、「第1回The Things Network(TTN)勉強会」@柏の葉ハンズオン(株式会社オープンウェーブ  尾鷲彰一様)」で紹介して頂いた内容を参考にしています。

LoRaWanのアクセスポイント構築

① RaspberryPi 3B or 3B+ を用意します。
OSはStretch以上、Busterでも動作を確認しました。
MicroSDは32GBで十分です。
HATも着けてしまって問題ありません。
② ネットワークの設定を行い、updateやmakeのために必要となるパッケージをインストールします。
③ SPI経由でHATが取得してきたデータをネットワークに流したいので、SPIの設定を行います。

$ sudo raspi-config

④ 必要となるモジュールを取得してきます。

$ cd /home/pi
$ wget https://github.com/bokse001/dual_chan_pkt_fwd/archive/master.zip
$ unzip master.zip
$ mv dual_chan_pkt_fwd-master dual_chan_pkt_fwd
$ cd dual_chan_pkt_fwd

⑤ global_config.jsonを変更します。
ユーザやインターフェース情報、接続先の設定を適切に変更します。
また、受け付ける周波数を変える場合はfreq、freq2のところも併せて変更します。

$ vi global_config.json

⑥ 日本向けの設定を追加します。

$ vi dual_chan_pkt_fwd.cpp

232行目~234行目に以下を追記します。

#define REG_PA_CFG 0x09
int PWR_JPN_1276 = 0x3f;
int PWR_JPN_1272 = 0xe;

437行目~442行目に以下を追記します。

if(sx1272){
 WriteRegister(REG_PA_CFG, PWR_JPN_1272, CE);
} else {
 //sx1276
   WriteRegister(REG_PA_CFG, PWR_JPN_1276, CE);
}

⑦ makeして適切な場所に配置します

$ make
$ su -
# cd /home/pi/dual_chan_pkt_fwd
# make install

手動で実施しないと出力が見れないので、一度止めて起動しなおします。

# systemctl stop dual_chan_pkt_fwd
# ./dual_chan_pkt_fwd

Gateway ID に表示されるアドレスをTTNに設定する必要があるので画面に表示されたら控えておきます。

⑧ TTNでユーザ登録し、ゲートウェイを登録します。
登録の際に以下入力します。

項目
ゲートウェイEUI 実行時に表示されたGateway ID
I’m useing … チェックを入れます
周波数計画 Asia 923-925MHzを選択します
Router ttn-router-jp

クライアント機(LoRa_mini_Dev)をTTNに登録

クライアント機(LoRa_mini_Dev)をTTNに登録し、温度・湿度センサーの値を取れるようにします。

① TTNにログインし、アプリケーションの追加 で必要事項を入力します。
TTN内のアプリケーション名です。IoTデバイスを登録するための枠を作っているようなものです。

項目
アプリケーションID 適当に入力
記述 適当に入力
ハンドラー登録 ttn-handler-asia-se を選択

② アプリケーションにIoTデバイスを登録します。
アプリケーションのデバイス(端末)を選択してデバイス登録にて必要事項を入力し、登録します。

項目
デバイスID 適当に入力
デバイスEUI 矢印のボタンをクリックして自動生成させます

③ デバイスの設定 画面を開き、アクティベーション方法でABPを選択します。
デバイスアドレス、ネットワークセッションキーのHEX値、AppセッションキーのHEX値をそれぞれコピーして控えておきます。

④ openwaveが公開しているLoRa mini Dev用のパッケージを自分の作業用PCに入手します。
この中のTTN_ABP_sample.inoのデバイスアドレス、ネットワークセッションキー、アプリケーションセッションキーに控えた値を入力します。
Cayenne_TTN_ABP_sample

LoRa mini Devをセットアップする

データシートにしたがってDHT11をLoRa mini Devに接続します。

  • 9にVCC
  • 7にGND
  • 14にData

② Arduino IDEに必要なライブラリ等をインストールします。
以下をダウンロードし、メニューのスケッチ>ライブラリをインクルード>ZIP形式のライブラリをインストールよりそれぞれインストールします。

周波数の変更を行っている場合は、lorabase_as923.hを開き、AS923_F1/F2の値を合わせます。

③ LoRa mini Devを接続し、ボードでArduino/Genuino Unoを選択。
シリアルポートは繋いだ時に表示されるものを選択します。

④ TTN_ABP_sample.inoを開き、書き込みを行います。
書き込みに成功し、ツール>シリアルモニターに投稿状況が表示されることを確認します。
RaspberryPiの画面にrxpk updateの投稿が届いていることを確認します。

⑤ TTNに届いていることを確認します。

  • TTNのデバイスの「データ」で投稿されたものが表示されることを確認します
  • TTNのゲートウェイの「トラフィック」に投稿が表示されることを確認します

※ デバイスのデータはフレームをリセットすると届くようになることがあります。

Cayenneのセットアップ

Cayenneのセットアップを行い、データの可視化を行えるようにします。

① myDevices Cayenne にユーザ登録をします。
https://mydevices.com/cayenne/signup/ から登録できます。

② Cayenneにデバイスの登録を行います。
Cayenneにログイン後、LoRaボタンを選択し、左ペインからThe Things Networkを選びます。
左上の検索ボックスでLPPと入力するとCayenne LPPが表示されるので選択します。

③ 以下入力します。

項目
Name プロジェクトの名前
DevEUI TTNに登録したデバイスのEUI
Location This device doesn’t move
Address 日本語で住所を入れます

④ ダッシュボード画面に切り替わるので、URLの最後の部分を控えます。

⑤ TTNからCayenneにデータが送付されるよう設定を行います。
アプリケーション一覧>作成したアプリケーション を開き、PayloadFormatsを選択します。
PayloadFormats画面にて、プルダウンからCayenne LPPを選択します。
インテグレーションの画面に切り替えて インテグレーションの追加を選択します。
MyDevicesを選択して、プロセスID欄に控えておいたURLの最後の部分を入力します。

⑥ Cayenneのダッシュボード画面に登録したデバイスが表示されるようになり、温度や湿度が更新されれば成功です。

関連記事

  1. 金曜日に届いたFitbit Inspire HRで週末2つアプリを作っ…

  2. M5StickC(マイコン)で格ゲーをつくる

  3. コンテナに入れてみる

  4. 娘に渡すIoTデバイス(Wio LTE+GPSセンサー)

  5. IoT x 料理(Raspberry Pi+Groveリレー+1wir…

  6. RFIDタグでホテルのカードキーシステムを再現しよう(RFIDリーダR…

  7. M5Stack(マイコン)+絶対圧センサーで応援してくれるエクササイズ…

  8. Nature Remoを使って憧れのスマートホーム化!

PAGE TOP