MESHではじめるIoT生活

第10回 MESHでここまでやる? MESHハブアプリを使って、玄関に置けるIoT灯篭を作ろう!

こんにちは、ヨシケンです!
2017年春から、MESHの各種タグの使い方に始まり、SDKでの拡張、そしてArduinoやRaspberry Pi(以下、ラズパイ)と連携するところまで来ました。
年末にラズパイ版のMESHハブアプリが正式にリリースされたので、今回もハブアプリを使ってガジェットを作っていきたいと思います。
MESHハブアプリのインストール方法などについては、前回の記事を見てみて下さいね。

 

ラズパイにUSBで様々な機器をつなげて、MESHでコントロールしよう

ラズパイ上のハブアプリでMESHが動くようにはなりましたが、ラズパイの機能をもっと使って面白いものを作りたくありませんか?
例えば、ボタンタグを押すとラズパイにつながったLED電飾が光るといった事や、加湿器、扇風機からカメラまでつないでコントロールする事ができるようになります。
今回は、ラズパイ、USB電飾、MESHタグを一緒にケースに入れて、庭や玄関先などに置いておけるIoT灯篭を作りましょう。温湿度タグで外気温が事前に分かって、家を出る前に洋服のコーディネートなどにも役立ちますね。簡単なPythonスクリプトも書いていきますよ!

IoT灯篭

 

今回のMESH工作の流れ

1. ラズパイとMESH GPIOタグをつなぐ
2. ラズパイのLEDを光らせる
3. MESHタグと合わせて、ガジェットを作る

必要なモノ一覧

MESHタグ:

Raspberry Pi 3 Model BMESHハブアプリをインストール済)

USB付きLED電飾(マルチカラー、ゴールドなど100均で売っています)
USB付きLED電飾

モバイルバッテリー、これらを入れるケース(全て100均で手に入れました)
モバイルバッテリー、これらを入れるケース

 

ラズパイとMESH GPIOタグの接続

まずMESHからラズパイに信号を送って、MESHで操作できるようにしていきます。

これは、MESH GPIOタグをラズパイのGPIOピン(紛らわしいので、この後はラズパイ側は単にピンと呼びます)につなぐ事によりできるようになります。ここではラズパイのピン配置のうち、USB端子に近い方のピン19とピン26を使っていきます。

ラズパイとMESH GPIOタグの接続

まずラズパイのピンのうち、ピン19とGPIOタグのDOUT1(ブルーのケーブル)、ピン26とDOUT2(イエローケーブル)をつなぎます。

ピン19とGPIOタグのDOUT1、ピン26とDOUT2をつなぐ

ここで、ラズパイ側で簡単なPythonスクリプトを書きます。
ラズパイへのログイン方法、X-Windowの立ち上げ、コマンドラインでの操作などは、こちらのラズパイで何かしたい!と思った人のまとめに詳しく載っていますので、見てみて下さいね。

また、ラズパイに画面やキーボードを繋がなくても、SSH(セキュア通信プロトコル)接続で自分のパソコンからログインして、パソコンのコマンドツールを使う方法もあります。SSH接続の仕方は、こちらの記事などに詳しくまとまっていますので、参照しながら、コマンドプロンプトでPythonプログラミングができる環境を用意して下さい。

そしてこちらがOn、Offを検知するPythonサンプル・スクリプトのonoff.pyです。

sudo vi onoff.py
———————————————————————————————————————————————————
#!/usr/bin/python
# -*- cording: utf-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

#ラズパイGPIOピンの19と26を使用
onPin = 19
offPin= 26GPIO.setup(onPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(offPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)print(‘Ctrl + C to exit’) #このプログラムはCtrl + Cで抜けます

while True:
on_state = GPIO.input(onPin)
off_state= GPIO.input(offPin)
if on_state == True:
print(‘On!’)
time.sleep(0.2)
if off_state == True:
print(‘Off!’)
time.sleep(0.2)

これは、ラズパイのピン19に信号が送られたら(Highになったら)、‘On!’というメッセージを出し、ピン26がHighになったら’Off!’という反応を返すスクリプトです。

ラズパイ上でこのスクリプトを流してみます。流した後、エラーが出なければ問題ありませんので、Ctrl + Cで抜けて下さい。

ラズパイ上でスクリプトを流す
それでは、MESHアプリの設定もしていきましょう。
ラズパイには既にMESHハブアプリがインストールされていると思いますので、タブレットから今回のラズパイHubを選んで、レシピを書いていきます。

ラズパイHubを選択

ボタンタグを使って、ボタンが一回押されたら、GPIOタグのDOUT1をHighにします。その後、Lowに戻すようにします。
同様にボタンを2連続で押したら、DOUT2をHighにし、その後Lowにするようにします。

ボタンタグ

ここまで出来たら、MESHボタンタグを1回押してみると、ラズパイ側(さきほどのonoff.pyを流して、その画面を開けたままにしておいて下さい)に、On!というメッセージが出たのではないでしょうか?またダブルクリックすると、Off!と出てくると思います。
これでMESHの動きと、ラズパイの動作が紐付いたと思います。

ラズパイ上でスクリプトを流す

 

ラズパイとLED電飾の接続

ただメッセージが出るだけではつまらないので、ラズパイにUSBでつながるLED電飾を接続しましょう。
これは100均で買ってきたUSB電飾で、電源が入ると七色に光る単純なものです。ラズパイのどのUSB端子につないでも構いません。

ラズパイとLED電飾の接続

さて、ラズパイ側でUSBの電源の入り切りをするために、hub-ctrlという便利なPythonパッケージがあります。
これをダウンロード、インストールしておきます。

# 事前必須ライブラリのインストール
sudo apt-get install libusb-dev# hub-ctrlのダウンロード
wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c# パッケージの展開
gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static

# プログラムの登録
sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrl

ラズパイ上でスクリプトを流す

インストール後にこちらのコマンドで、USB電源のON/OFFをする事ができます。

# 電源をONにする
sudo hub-ctrl -h 0 -P 2 -p 1# 電源をOFFにする
sudo hub-ctrl -h 0 -P 2 -p 0

どうでしょうか?コマンドを打って、USBにつないだLEDがついたり、消えたりしたでしょうか?

では、先ほどのスクリプトに追加して、GPIOの信号によりLEDを操るled.pyスクリプトを作ります。

sudo vi led.py
———————————————————————————————————————————————————
#!/usr/bin/python
# -*- cording: utf-8 -*-import RPi.GPIO as GPIO
import timeGPIO.setmode(GPIO.BCM)

#ラズパイGPIOピンの19と26を使用
onPin = 19
offPin= 26

GPIO.setup(onPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(offPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

print(‘Ctrl + C to exit’) #このプログラムはCtrl + Cで抜けます

while True:
on_state = GPIO.input(onPin)
off_state= GPIO.input(offPin)
if on_state == True:
os.system(‘sudo hub-ctrl -h 0 -P 2 -p 1’) #LED電源のON
print(‘On!’)
time.sleep(0.2)
if off_state == True:
os.system(‘sudo hub-ctrl -h 0 -P 2 -p 0’) #LED電源のOFF
print(‘Off!’)
time.sleep(0.2)

更にこのスクリプトを、ラズパイ立ち上げ時に自動で起動させるようにします。
Systemdサービスを登録していきましょう。

sudo vi /etc/systemd/system/led.service #サービスを作る
———————————————————————————————————————————————————
[Unit]
Description=LED ON OFF[Service]
ExecStart = /python /home/pi/web/cgi-bin/led.py
Restart = always
Type = simple[Install]
WantedBy = multi-user.target

———————————————————————————————————————————————————
sudo systemctl enable led #サービスの有効化

sudo systemctl start led #サービスのスタート

sudo systemctl stop led #サービスのストップ

sudo systemctl status led #ステータスの確認

さあこれでラズパイをリブートすれば、先ほどのスクリプトが立ち上がっているはずです。(ハブアプリが立ち上がるまでに数分かかります。)
ボタンタグを1回押してLEDの点灯、2連続で押して消灯するか見てみましょう。

 

他のMESHタグと組み合わせて使う

それでは、全てをつなげてIoT灯篭を完成させましょう。
まずラズパイとバッテリー、MESH GPIO、明るさ、温湿度タグをケースの中にセットします。
ちゃんと入れてフタを閉めれば、外に置いてもある程度防水防塵になると思います。

ラズパイとバッテリー、MESH GPIO、明るさ、温湿度タグをケースの中にセット

目の部分にLEDをセットするとそれっぽくなってきます。

目の部分にLEDをセット

それではMESHアプリでそれぞれの動きを定義していきます。

外に置くので、夕方になって暗くなったら、灯篭が光りだすようにします。
明るさタグを、明るさが1-3に変わったら、を設定し、それとGPIOのDOUT1をHighにする、をつなぎます。
これにより暗くなったらUSBに接続されたLED電飾が光りだします。
また朝になったら(明るさタグが4以上になったら)、LEDを消すようにDOUT2をHighにします。これによりUSBの電力供給が切れて、LEDが消灯します。

MESHアプリでそれぞれの動きを定義

夜中の間ずっとついているのも、もったいないので、人感タグと組み合わせて、「暗い」プラス「人を検知したら」などとすると、より実用的になります。

また温湿度タグを入れて、毎朝7時に気温をメールやTwitterにあげると、毎朝、家の外の温度が分かって、服装のコーディネートなどに役立ちますね!
こちらが最終的なMESHアプリの設定になります。

最終的なMESHアプリの設定

さあ、やってみましょう!

まずテストで、ボタンタグを一回押すとLEDが付き、ダブルクリックすると消えるかの確認をします。

そして、家の門近くなどに置いて、夕方になるまで待ちます。
夕方家に帰ってくると、もう暗くなりかけているので、LEDが光り始めます。

IoT灯篭のLEDが光り始める

こちらの動画で、明るさに合わせて、光ったり、消えたりするのが分かると思います。

またLED以外にもUSBで動作する扇風機や加湿器なども対応する事ができます。

USBで動作する扇風機や加湿器

さて今回は、MESHハブアプリにUSB機器をつなぎ、MESHでコントロールしました。ラズパイ・ハブにした事によって、外などにも気軽に置けるガジェットになったのではないでしょうか?

次回も、ラズパイとMESH、様々な機器をつないで、便利なものを作っていきたいと思います。
お楽しみに!

(ヨシケン)

IRKitではじめるIoT
ヨシケン(吉田 顕一)

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net