IoT機器で温湿度を測定してクラウドでグラフ化 ハードウェア編(その1) | そう備忘録

IoT機器で温湿度を測定してクラウドでグラフ化 ハードウェア編(その1)

温湿度の測定

会社で事務所や工場の様々な所に温湿度センサーを設置して数分間隔で温湿度の測定を行っている。

測定結果はWi-Fi経由で集まってくるのだがWi-Fi(子機)の調子がイマイチで接続エラーが度々発生している。

同じ場所でスマートフォンやパソコンでWi-Fiに接続すると問題なく接続ができるので測定機器の子機(Wi-Fi)の問題だと思うだが中々解決出来ないでいる。

それならばとRaspbryyPi Zeroと温湿度センサー(DHT22モジュール)で代替出来ないかとプロトタイプを作成してみたので、備忘録を何回かに分けて記事をアップしようと思う。

初回はまずはハードウェア編。

主な実現したい機能は以下の通り。

  • 指定した間隔(分)で温湿度を測定する
  • 指定した間隔(分)でデータをサーバーにアップロードする
  • アップロードしたデータは集計、グラフ表示する
  • 温湿度のしきい値(上限、下限)を超えた場合はアラートを発信する
  • しきい値は場所毎に異なる値を指定出来るようにする
  • 設定情報はGoogle Sheetで一括指定して設定値を変更したら各端末に速やかに反映させる
  • それぞれの端末は遠隔で再起動等の操作が出来るようにする
  • 測定端末は複数台設置するが基本的に室内とする(屋外には設置しない)
  • 100V電源を確保できる場所とする(バッテリー駆動も一応試してみる)
  • 初期コスト、ランニングコストともに出来るだけローコストで実現する

システム概要図

システム概要図は以下の通り。

温湿度の測定結果をAWS経由で表示・概要図

設定値

温湿度の取得間隔やしきい値や場所情報の情報はGoogle Sheetsに格納する。

シートの情報を随時変更可能で、定期的にシートを読み込んで最新の設定情報を取得する。

温湿度モジュール

温湿度モジュールはDHT22モジュールをRaspberryPi Zeroに接続して使用する。

DHT22モジュールについての詳細は過去の記事を参照して欲しいのだが、湿度は0度~99.9%(0.1%単位、測定誤差±2%)温度は-40℃~80℃(0.1℃単位、測定誤差±0.5℃)となっている。

尚、湿度は測定誤差(個体差)がそれなりにあったので上記のGoogle Sheetsで端末毎に補正出来る仕様とした。

AWS(Amazon Web Services)

RaspberryPi ZeroではPython3.7でプログラムを作成してMQTTプロトコルで温湿度の情報及びアラート情報をAWS IoT Coreにpublishする。

AWS IoT Coreでは測定データをElasticsearch Serviceに送り、kibana(オープンソースのデータ視覚化ダッシュボード)でグラフ表示すると同時にDynamoDBにも送信する。

DynamoDBへの送信は必須では無いのでElasticsearch Serviceのみ、または逆にDynamoDBのみへの送信でも良いと思う。

アラート情報はリアルタイムでAWS Simple Notification ServiceでメールまたはSMS(ショートメッセージ)で担当者に知らせる仕様とした。

ハードウェア

必要なハードウェア

必要なハードウェアは以下の通り。

RaspberryPi Zero本体

RaspberryPi Zero本体。

今回はプロトタイプなので扱いやすいピン付きを使用したが実際に複数台購入するのであれば下記のピン無しを使って自分でハンダ付けをしても良いと思う。

SDカード

OS(Raspbian)起動用のSDカード。

温湿度情報を一時的にローカルディスクに保存するので、ある程度の容量があった方が良いが16GByteあれば十分。

自分は余っていた32GByteのSDカードを使用した。

電源アダプタ

RaspberryPi Zeroに電源を供給するためのアダプタ。

プロトタイプ作成中は電源スイッチ付きの方が扱いやすいが本番の連続稼働の場合はスイッチが無くてもそれほど大きな問題は無い。

その他アダプタ

RaspberryPi ZeroのHDMI出力はmini HDMIなので通常サイズのHDMIに変換するアダプタ、USB製品(マウスやキーボード)を接続するためのUSBケーブルなど。

ケース

ラズパイゼロを格納するケース。

プロトタイプ用に専用のケースを使用しているが、室内に設置する前提なので100円ショップで代替のケースを探しても良いと思う。

スターターキット

上記の本体、SDカード、アダプタ類、ケースを別々に購入するよりもスターターキットでまとめて購入してしまった方が手間が少ない上に割安で購入できる。

1セットだけスターターキットを購入して2台目以降は本体のみを購入するのが良いと思う。

キーボード

キーボード(既に持っていれば不要)。

自分はラズパイ用にEwinのミニキーボードを使用している。

というのもRaspberryPi上でのキー入力やマウス操作をするのは最初の初期設定程度でプログラミングやその後の操作はパソコンからVNCやsshで遠隔操作をしてしまうのでキーボードは”そこそこ入力出来れば良い”。

なのでキーボードとマウスが一体化して小型で持ち運びが容易なEwinのミニキーボードは重宝している。

下記のキーボードは自分が持っているキーボードの後継にあたる製品。

モニター

HDMI入力を受け付けるモニター(既に持っていれば不要)。

下記はタッチスクリーンのモニター。

今回のプロトタイプではタッチスクリーンである必要は無いが、以前に別の目的で購入して(RaspberryPi 3 B+に接続)まぁまぁだったので紹介しておく。

接続

DHT22モジュールとRaspberryPi Zeroとの接続は以下の通り。

尚、今回購入したDHT22モジュールはVCCとDATの間に抵抗が入っていた。

RaspberryPi ZeroとDHT22モジュールとの接続

GND

RaspberryPi Zeroの2番ピン、5Vに接続する

VCC

RaspberryPi Zeroの6番ピン、GNDに接続する

DAT

RaspberryPi Zeroの7番ピン、GPIO4に接続する

DHT22モジュール

DHT22モジュール

RaspberryPi Zeroとの接続

RaspberryPiZeroとの接続

その他初期設定

その他、初期状態のOSから以下の変更を行った。

パッケージの更新

sudo apt-get update
sudo apt-get upgrade

上記のコマンドにてパッケージ類を最新の状態にした

ホスト名の変更

メニューから設定ー>RaspberryPiの設定、システムタブでホスト名を変更した

SSHとVNCを有効にする

メニューから設定ー>RaspberryPiの設定、インターフェースタブを開いてSSHとVNCを有効化した

VNCはプロトタイプ作成中のみ有効にしておき、本運用をするのであれば無効化する

SSHは運用開始後も遠隔操作をしたい時があるので有効化しておく

デフォルトユーザpiの変更

プロトタイプ作成中はデフォルトユーザのpiのままで開発をしたが、本運用するのであれば、デフォルトのユーザpiはそのままにしておくとセキュリティ上問題があるので別ユーザ名に変更する方が良い

piの変更方法はこちらの記事を参照

固定IPの割当

無線LANのIP Addressを固定IPに変更した

再起動の度にDHCPから異なるIP Addressを割り当てられるとVNCやSSHで接続する時に面倒なのでIP固定にした

固定IPへの変更方法はこちらの記事を参照

Python3をデフォルトにする

pythonのデフォルトが2.7だったので(Kernel version:4.19)python3をデフォルトに変更した

これをやっておかないと次回以降にインストールするpaho-MQTTやGoogle Spreadsheet用のモジュールがPython2.7にインストールされてしまう

変更方法はこちらの記事を参照

Python IDLEのインストール

プロトタイプ用にPythonの開発環境を以下のコマンドでインストールした

sudo apt-get install idle-python3.7

本運用の端末には不要

続く

ハードウェアの設定、接続や初期設定についてはこれで終了とする。

次回はAWSの設定やGoogle Sheetsを読み込むための事前設定の記事とするつもり。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。