こんにちは、ヨシケンです!
2017年春から、MESHの各種タグの使い方に始まり、SDKでの拡張、そしてArduinoやRaspberry Pi(以下、ラズパイ)と連携するところまで来ました。
年末にラズパイ版のMESHハブアプリが正式にリリースされたので、今回もハブアプリを使ってガジェットを作っていきたいと思います。
MESHハブアプリのインストール方法などについては、前回の記事を見てみて下さいね。
ラズパイにUSBで様々な機器をつなげて、MESHでコントロールしよう
ラズパイ上のハブアプリでMESHが動くようにはなりましたが、ラズパイの機能をもっと使って面白いものを作りたくありませんか?
例えば、ボタンタグを押すとラズパイにつながったLED電飾が光るといった事や、加湿器、扇風機からカメラまでつないでコントロールする事ができるようになります。
今回は、ラズパイ、USB電飾、MESHタグを一緒にケースに入れて、庭や玄関先などに置いておけるIoT灯篭を作りましょう。温湿度タグで外気温が事前に分かって、家を出る前に洋服のコーディネートなどにも役立ちますね。簡単なPythonスクリプトも書いていきますよ!
今回のMESH工作の流れ
1. ラズパイとMESH GPIOタグをつなぐ
2. ラズパイのLEDを光らせる
3. MESHタグと合わせて、ガジェットを作る
必要なモノ一覧
MESHタグ:
Raspberry Pi 3 Model B(MESHハブアプリをインストール済)
USB付きLED電飾(マルチカラー、ゴールドなど100均で売っています)
モバイルバッテリー、これらを入れるケース(全て100均で手に入れました)
ラズパイとMESH GPIOタグの接続
まずMESHからラズパイに信号を送って、MESHで操作できるようにしていきます。
これは、MESH GPIOタグをラズパイのGPIOピン(紛らわしいので、この後はラズパイ側は単にピンと呼びます)につなぐ事によりできるようになります。ここではラズパイのピン配置のうち、USB端子に近い方のピン19とピン26を使っていきます。
まずラズパイのピンのうち、ピン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)
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を選んで、レシピを書いていきます。
ボタンタグを使って、ボタンが一回押されたら、GPIOタグのDOUT1をHighにします。その後、Lowに戻すようにします。
同様にボタンを2連続で押したら、DOUT2をHighにし、その後Lowにするようにします。
ここまで出来たら、MESHボタンタグを1回押してみると、ラズパイ側(さきほどのonoff.pyを流して、その画面を開けたままにしておいて下さい)に、On!というメッセージが出たのではないでしょうか?またダブルクリックすると、Off!と出てくると思います。
これでMESHの動きと、ラズパイの動作が紐付いたと思います。
ラズパイとLED電飾の接続
ただメッセージが出るだけではつまらないので、ラズパイにUSBでつながるLED電飾を接続しましょう。
これは100均で買ってきたUSB電飾で、電源が入ると七色に光る単純なものです。ラズパイのどのUSB端子につないでも構いません。
さて、ラズパイ側で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をする事ができます。
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スクリプトを作ります。
———————————————————————————————————————————————————
#!/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サービスを登録していきましょう。
———————————————————————————————————————————————————
[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、明るさ、温湿度タグをケースの中にセットします。
ちゃんと入れてフタを閉めれば、外に置いてもある程度防水防塵になると思います。
目の部分にLEDをセットするとそれっぽくなってきます。
それではMESHアプリでそれぞれの動きを定義していきます。
外に置くので、夕方になって暗くなったら、灯篭が光りだすようにします。
明るさタグを、明るさが1-3に変わったら、を設定し、それとGPIOのDOUT1をHighにする、をつなぎます。
これにより暗くなったらUSBに接続されたLED電飾が光りだします。
また朝になったら(明るさタグが4以上になったら)、LEDを消すようにDOUT2をHighにします。これによりUSBの電力供給が切れて、LEDが消灯します。
夜中の間ずっとついているのも、もったいないので、人感タグと組み合わせて、「暗い」プラス「人を検知したら」などとすると、より実用的になります。
また温湿度タグを入れて、毎朝7時に気温をメールやTwitterにあげると、毎朝、家の外の温度が分かって、服装のコーディネートなどに役立ちますね!
こちらが最終的なMESHアプリの設定になります。
さあ、やってみましょう!
まずテストで、ボタンタグを一回押すとLEDが付き、ダブルクリックすると消えるかの確認をします。
そして、家の門近くなどに置いて、夕方になるまで待ちます。
夕方家に帰ってくると、もう暗くなりかけているので、LEDが光り始めます。
こちらの動画で、明るさに合わせて、光ったり、消えたりするのが分かると思います。
またLED以外にもUSBで動作する扇風機や加湿器なども対応する事ができます。
さて今回は、MESHハブアプリにUSB機器をつなぎ、MESHでコントロールしました。ラズパイ・ハブにした事によって、外などにも気軽に置けるガジェットになったのではないでしょうか?
次回も、ラズパイとMESH、様々な機器をつないで、便利なものを作っていきたいと思います。
お楽しみに!
(ヨシケン)
今回の連載の流れ
第1回:SONY MESH で始めるIoT新生活!はんだ付け不要、ノン・プログラミングで電子工作
第2回:SONY MESHアプリの5分でできるセットアップ!
第3回:SONY MESHとIFTTTを使って、雨を知らせるIoT鍵置きを作ろう!
第4回:SONY MESHを使って、IoT鉛筆立てを作ろう!
第5回:SONY MESHのGPIOタグを使って、リモートで動くロボットを作ろう!
第6回:SONY MESHのGPIOタグとスマホで本格IoT!大事な人の位置を知らせるメーターを作ろう!
第7回:SONY MESHとArduinoを連携させて遠隔操作ができるメイド・ロボを作ろう!
第8回:MESHでここまでやる? 話題のスマートスピーカーGoogle HomeやAmazon Alexaとつないで、声でMESHを操作しよう!
第9回:MESHでここまでやる? Raspberry PiでMESHが動く!話題のラズパイ版MESHをいち早く使って、スマート・ホームを実現しよう!
第10回:MESHでここまでやる? MESHハブアプリを使って、玄関に置けるIoT灯篭を作ろう!(今回)
第11回:MESHでここまでやる? MESH拡張基盤で、USB機器やサーボモータをつないで、面白ピタゴラ装置を作ろう!
第12回:MESHでここまでやる? Seeed Grove、littleBitsなどを使って、ピタゴラ装置を完成させよう!