DesignSpark Electrical Logolinkedin
Menu 検索
フォーラムで質問

Raspberry Pi 3 Model B+でセンサプラットフォームを作る

PoE(Power over Etehrnet)はセンシングプラットフォームの構築において非常に便利だ

リモートセンサ端末の開発という視点で考えると、PoE (Power over Ethernet)を搭載したラズパイ 3B+ は、とても有意義な選択肢と言えるだろう。今回、ラズパイに複数のセンサを搭載したリモートセンシング端末を作ってみようと思う。センサ用の拡張ボード「DesignSpark Pmod HAT」と「熱電対Pmodモジュール」をPythonスクリプトで制御し、温度の値をMQTTと呼ばれるプロトコルを利用して送信するところまでやってみよう。

PoE(Power over Ethernet)ってなんなの?

まずはPoEについて簡単に解説しよう。PoEとはPower over Ethernetの略語であり、要はイーサネットケーブルで電力とデータの両方を供給しようとしたIEEE規格である。これによって、データ通信と電力供給を1本のケーブルで実現することができる。PoEの利点をまとめると以下の通りだ。

  • LANケーブルのみでデータ通信と電力供給が可能
  • 電源ケーブルが不要
  • 電源コンセントが存在しない場所でもデバイスが設置可能

センサ用インターフェースの複数の選択肢の検討

まずはRaspberry Pi 3 Model B+で利用可能なインターフェースを挙げよう。

  • USB: 最も多くのユーザにとって扱いやすいインターフェースだ。RS-422や自動車のネットワークであるCANなどの他のバスに接続するためのアダプタを利用する場合もある。
  • プレーンGPIO: 「BitBang」技術によって状態などを読み取ることが出来るデジタルピンだ。一般的なセンサであるDS18B20温度センサなど、1-Wire式といった低速バスをサポートしている。
  • I2C:マスタ/スレーブ型のシンプルなバスシリアルインターフェース。2つの線を利用し、7bitのアドレス範囲を利用できる。非常に様々なセンサやADCが利用可能であり、デジタルI/O拡張を利用することでより多くのGPIOピンの利用できる。EEPROMなどが代表例だ。
  • SPI: 「クロック」「データ送受信」「スレーブデバイス選択」の4つの線で行うインタフェース方式。これもI2Cと同様、多くのデバイスが利用可能だ。通常、I2Cより高速な通信を行うことができる。しかし、BitBang GPIO技術を利用しない場合は、2つのラインしか利用することができないので注意だ。

ブレッドボード、ジャンパ線もしくはパーフボードを利用すれば、単純に複数のセンサを利用することができる。しかし、そうした用意が必要ない、もっと便利なシステムがある。そのうち2つを次に紹介しよう。

MikroElektronika製 Clickボード

「Clickボード」は様々なプラットフォームを提供するコンパクトなインターフェースアダプタ“シールド”だ。Raspberry Pi 3 Model B+ (896-8660)において様々なセンサなどのデータを簡単に取得できるようにしてくれるのだ。

Clickボード向けに用意されているPythonコードのサンプルには以下のセンサが含まれている

  • カラーClick (923-5999): RGBCカラーセンサ
  • アクセルClick(923-5999): 3軸加速度センサ(882-8900)
  • ウェザーClick: 気温、湿度、気圧センサ

もちろん、他にも多くのセンサやADCといったモジュールが利用可能だ。サンプルコードとしてC言語のものが多く提供されており、あなたのプロジェクトを開始するのに非常に役に立つことだろう。

Pi 3Clickシールドについての詳細については過去の投稿を確認してほしい。

Digilent製 Pmod

Pmodモジュールは元々FPGAやマイクロコントローラのプラットフォーム用の周辺モジュール規格だった。既に各種のセンサやアクチュエーターがリリースされていて、市場でも数多くのプロジェクトで使用されている。このように一般的に普及しているセンサソリューションをラズパイでも活用できるようにしたのが上の写真の「DesignSpark Pmod HAT」である。このインタフェースボードを使うことで、ラズパイでPmodモジュールを手軽に使用することができる。

こちらもClickボードと同様、多くのモジュールが用意されている。Pmod HAT向けのPythonライブラリも提供されており、6つのPmodが利用可能だ。また、そのうち4つのセンサ/入力を以下に挙げる。

  • PmodAD1 (134-6443): 2チャンネル12bit ADC
  • PmodSNS20 (136-8069): ±20A DCもしくはACADEMY入力、高精度電流センサ
  • PmodMIC3 (134-6475): MEMSマイクロフォンモジュール
  • PmodTC1 (134-6476): 冷接点式熱電対-デジタル変換器

DesignSpark Pmod Pythonライブラリは、「HブリッジPmod」や「RGBOLED Pmod」に対応しており、これらからのデータ読み取りを簡単にしてくれているのだ。

Pmod HAT、ライブラリ、その他サポートしているPmodについての詳細を確認したい場合は、過去の投稿を参考にしてほしい。

それでは次に、上記PmodのうちPmod TC1を利用した実際のサンプルを見ていこう。

 

温度のモニタリング

PmodTC1K-type熱電対を利用した温度計であり、-73℃〜482℃まで測定可能な優れものだ。そのため、様々なアプリケーションや用途で利用することができる。

それでは、例として熱いお湯のタンクの温度を測りたい場合を考えてみよう。天然の湯沸かし器がぴったり100℃で停止したいと考えてもらえば良い。しかし、困ったことに周囲に電源のコンセントは存在しない。そんなとき、離れた場所に設置するため、PoE電源のRaspberry Piが最適だ。また今回、データの配信にMQTTプロトコルを利用することにした。MQTTは簡単に利用することができ、なおかつ広くサポートされているデータの配信向けのプロトコルだ。

K-typeの電熱対線

Raspbian OS(Liteバージョンでも問題ない)では最初からDesignSpark Pmodを利用することができないため、一度起動した後、Pmodライブラリをインストールしよう。また、続いて以下のコマンドを入力してPaho MQTTライブラリをインストールしよう。

pi@3bplus:~ $ sudo pip install paho-mqtt

これで、簡単にPmodTC1からデータを読み、MQTTブローカーーーに配信できるようになった。そのための簡単なPythonプログラムの例は以下だ。

import time
from DesignSpark.Pmod.HAT import createPmod
import paho.mqtt.publish as publish

broker = 'localhost'
topic = 'house/boiler/hotwater/temperature'

therm = createPmod('TC1','JBA')

while True:
    cel = therm.readCelcius()
    print cel
    publish.single(topic, cel, hostname=broker, client_id="temp_sensor")
    time.sleep(1)

このプログラムについての簡単な解説

  • Pythonモジュール(ライブラリ)のインポート
  • MQTTブローカーーーホストと、配信したいトピックの定義
  • (JBコネクタの)JBAポート上のPmodTC1モジュールをセットアップ
  • 毎秒毎に値を読み取り、ターミナルに表示し、同時にブローカーーーにデータを配信

あなたのシステム上やIoTプラットフォームで既にMQTTブローカーーーを持っている場合は、その設定を行うことが出来る。今回は、“localhost”を利用して、簡単に確かめてみよ。そのために、次のようにMosquitto MQTTブローカーーーとそのクライアントをインストールする。

pi@3bplus:~ $ sudo apt-get install mosquitto mosquitto-clients

次のコマンドでPythonスクリプトを実行しよう。

pi@3bplus:~ $ python PmodTC1-MQTT.py

また、別のウィンドウで以下のコマンドを入力すると、ブローカーーーに配信されているメッセージを読む(サブスクライブ)することができる。

pi@3bplus:~ $ mosquitto_sub -h localhost -t 'house/boiler/hotwater/temperature'

 

 

さらにアプリケーションを利用しよう

 

今回紹介したアプリケーションの方向性として、様々なものが考えられる。例えば。今回利用したRaspberry Piに他のセンサを搭載し、同じブローカーーーを利用するとより多くのデータが配信できるようになる。そこで、Node-REDを利用してロジックを実装して様々なサービスを作成したり、収集したデータをwebページに公開したり、ある一定の値にアラートを設定して通知を行ったりするなど、その他のクラウドサービスと結びつけて新たなサービスへと応用していくことができるだろう。また、Raspberry Piに時系列に連続したデータベースであるInfluxDBをインストールし、Grafanaなどで可視化を行うこともできるだろう。

IBM CloudOpenSensorsCayenneといったクラウドサービスでは全てMQTTプロコルをサポートしており、もちろんその他多くのAPIにも対応している。

今回紹介したように、Raspberry Pi 3 Model B+にセンサを追加し、データを取得するのはDesignSpark Pmod HATとサポートされているライブラリによって比較的簡単に実現できることを理解していただいただろうか。現在、様々なオープンソースのツールが公開されており、また同時にIoTクラウドサービスも提供されている。リモートセンシングのためのプラットフォームを開発するための環境は既に身の回りに整っているのだ。あとは、その中から最適な組み合わせを見つけ出し、プロトタイピングを行うだけで、様々なサービスを簡単に開発できる。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.

14 Mar 2018, 11:00