株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Raspberry Pi

Raspberry Piでセンサネットワーク稼働試験(TWELITE-トワイライト編)構成・課題等

投稿日:2018年8月9日 更新日:

Raspberry Piでセンサネットワークを構築して実際に稼働してみます。今回は、TWELITE-トワイライト編としてRaspberry Piとセンサを無線で接続する構成です。Raspberry PiからAmbientにデータを送信します。この構成で安定して稼働させるにはどういった課題があるか書いてみます。

TWELITE-トワイライトは以下の製品です。
TWELITE DIP(子機としてセンサと接続)
MONOSTICK(親機としてRaspberry Piと接続)

以下のようなデータの流れになります。
センサとTWELITE DIP(子機) => (無線で2メートルぐらい) => Rapberry Pi本体(親機) => (Wi-Fi) ==> インターネット ==> Ambient(ここでデータを確認)

TWELITE DIPとセンサが以下です。bme280(温度、湿度、気圧センサ)を接続しています。これが子機になります。今回は子機は1台だけですが、必要に応じて1台の親機に複数台の子機が接続出来ます。

(※実は今回使用している上記のTWELITE製品は旧モデルです。現在のモデルとは外観は異なります。使っていなかったのでここで使ってみました。)

この子機についてのモノワイヤレスの説明が以下のページです。このページの設定にしてBME280を接続しました。10分おきにセンサのデータを送信するように設定しました。
I2Cセンサ(BME280)を接続する
どうやらAitendoのBME280は完成品ですがプルアップ抵抗も実装済のようです。以下を参照して下さい。
温湿度・気圧センサモジュール [BME280-6P]

MONOSTICKとRaspberry Piが以下です。Raspberry PiはRaspberry Pi2なのでWi-Fiドングルを使っています。こちら側が親機になります。

親機の方は初期設定のままです。
(※こちらもTWELITE製品は旧モデルです。現在のモデルとは外観は異なります。使っていなかったのでここで使ってみました。)

この構成の特徴や課題
特徴は何といってもRaspberry Piが親機でセンサが子機として独立しているのである程度離れた場所にセンサが設置出来るということです。

どの程度の距離まで電波が届くということですが実際には条件によるということで、詳細が必要な場合は以下を参照して下さい。私の場合はデスクに面した窓際が子機で反対側のデスクの端に親機です。2メートル程度でしょうか。もちろん問題なく通信出来ています。
通信距離について

課題としてはやはり電池でしょうか。以下の説明では例としてボタン電池で10年以上持つとなっています。
省電力

今回の場合はセンサも接続しているのでその分の消費もありますが、年単位で持つということでしょうか。実際には消費電力を測定すればある程度分かるとは思いますが、とりあえずはこのまま稼働を続けます。

Raspberry Pi(親機)のプログラム
無線通信ですが、親機ではシリアル通信からデータが取得出来ます。そのデータを解析してAmbientへ送信しています。

プログラムは以下です。これで稼働していますが、サンプルプログラムのレベルです。動作保証は出来ませんのでご了承ください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import sys
import os

import ambient

argv = sys.argv
argc = len(argv)

# 9999はチャネルID
# aaaabbbbccccddddはライトキー
amb = ambient.Ambient(9999,'aaaabbbbccccdddd')

def read_serial(s):
        while True:
                data = s.readline()
                data = data[2:]

                spilitdatum = data.split(":")
                #print spilitdatum

                dict = {}

                for spilitdata in spilitdatum:
                    s_key = spilitdata.split("=")[0]
                    s_val = spilitdata.split("=")[1]

                    dict[s_key] = s_val

                if ("ed" in dict):
                    if(dict["ed"] == "810078E8"): #子機のID 
                        tm = float(dict["tm"]) / 100.0
                        hu = float(dict["hu"]) / 100.0
                        at = int(dict["at"])

                        r = amb.send({"d1": tm, "d2": hu, "d3":at})

                        #print dict["ed"]

# USBデバイスが指定出来る
if argc != 2:
        s = serial.Serial("/dev/ttyUSB0", 115200, timeout=10)
else :
        s = serial.Serial(argv[1], 115200, timeout=10)

while True:
        try:
                read_serial(s)
        except KeyboardInterrupt:
                break
        except:
                continue

s.close()

稼働状況
今現在で約3週間ですが、問題なく稼働しています。
窓際に何げなく置いていますが、直射日光が当たる時間には40℃を超えている場合があります。室内といっても夏場(特に今年は)は高温になるということが分かります。
引き続き稼働します。

2018/09/10追記
2018/09/06に電池切れになりました。2ヶ月弱ぐらいです。思ったより短かったような気がします。またいろいろと調べてテストしたいと思います。

最後に自社PRですが、Raspberry Pi 関連のご依頼お待ちしております。本記事と同様のセンサネットワークの試用、試作等対応可能です。

Amazon関連リンク


AdSense

AdSense

-Raspberry Pi

執筆者:

関連記事

Raspberry Piでタッチアプリ開発(その4)ボタンとGPIOの連動

Raspberry Piでタッチアプリ開発の4回目です。前回作成したレイアウトとボタンのコールバックにGPIOの処理を組み込みます。そして、このアプリを自動起動するように設定します。 (※2021/0 …

Raspberry Piをモニターとキーボードなしで導入する(その2)初期設定とリモートデスクトップ

(※2021/05/02追記 現時点で最新版のRaspberry PI OSでモニターとキーボードなしで導入する手順を書きました。ぜひこちらを見て下さい。) Raspberry Piをモニターとキーボ …

Raspberry Piでタッチアプリ開発(その3)Kivyでレイアウト・ボタン作成

Raspberry Piでタッチアプリ開発の3回目です。前回はKivyの導入について書きました。今回は具体的なレイアウトとボタンを配置してみます。以下のレイアウトについて順番に書きます。Kivyでのレ …

Raspberry PiでIoT(MQTTで遠隔操作編 その2)MQTT Brokerの構築とPythonでのpub/sub

Raspberry PiでIoT MQTTで遠隔操作編の2回目です。2台のRaspberry Piでインターネット経由でGPIOを操作するというテーマで書いています。前回はMQTTの基本的な内容とMo …

Node.jsでRaspberryPiのGPIOを使う(その1)デバイスドライバでLED

Node.jsでRaspberryPiのGPIOを使ってみます。今回はデバイスドライバを使ってLEDのONとOFFを操作します。以下のような簡単な回路でLEDを操作します。 準備、前提は以下です。 以 …