アボカドの種の水耕栽培を始めて1週間くらい経ちました。芽がでるまで1ヶ月くらいかかるようです。植物育成LEDライトはカビの防止と生育に効果があるみたいなので、半日照明を当てていたら乾燥しすぎて種にヒビが入ってしまいました。温度や湿度を見ながらLEDライトを当てる時間を調整する必要があります。
電源コンセントにつなげる普通のLEDライトをマイコンから制御する方法を調べました。USB連動電源タップとプログラムから制御可能なUSBハブを使うと上手くいきそうです。以下のポストを参考にさせていただきました。
用意するもの
以下の部材を用意しました。
- BeagleBone Black
- SUGOI HUB4Xシリーズ
- 赤/青 植物育成LEDライト E26 小型スポットライト
- サンワサプライ TAP-RE7U USB連動タップ
- PLANEX 無線LAN子機
WeMoをもっと単純にした感じです。
Raspberry Pi 2はUSBの電源を上手く制御できない
Raspberry Pi B+ turn usb power offにもポストがあります。手元にあるRaspberry Pi 2だとUSBポートの電源を上手く制御できませんでした。一応プログラムからON/OFFできるですが、ハブにつながったUSBが全て同時に制御されます。USBには無線LANのドングルも挿しているのでネットワークが切断してしまい困ります。
Raspberry Pi 2の場合、4つあるポートのどこにUSB連動電源タップを接続してもPort 2しかON/OFFの制御ができませんでした。電源はすべてのポートで連動しているようです。
$ hub-ctrl -h 0 -P 2 -p 0 |
AC Power Control by USB Hub
AC Power Control by USB Hubに紹介されっているライブラリを使うと、対応しているUSBハブのポートの電源を制御することができます。Cで実装されたhub-ctrl.cと、Pythonのhub_ctrl.pyがあります。
Cのソースコード
BeagleBone BlackにはUbuntu 14.04をインストールしています。
$ cat /etc/os-release |
プログラムの実行に必要なパッケージをインストールします。
$ sudo apt-get update |
Cのソースコードをダウンロードしてコンパイルします。
$ mkdir ~/hub |
コンパイルしたバイナリのヘルプを確認します。
$ ./hub-ctrl --help |
Pythonのソースコード
Pythonのhub_ctrl.pyをダウンロードして実行権限を付けます。
$ wget -O hub_ctrl.py "http://git.gniibe.org/gitweb/?p=gnuk/gnuk.git;a=blob_plain;f=tool/hub_ctrl.py;hb=HEAD" |
Pプログラム実行に必要なライブラリをインストールします。今回の環境ではpyusbは--pre
フラグが必要でした。
$ sudo apt-get install git build-essential python-dev python-smbus |
ヘルプを確認します。
$ sudo ./hub_ctrl.py -h |
使い方
USBポートの電源を制御する_その1を参考にさせていただきます。
普通の電源タップにUSBケーブルが繋がっています。USBケーブルをテレビやパソコンなどに接続して、テレビの電源と連動してハードディスクなど周辺機器の電源もON/OFFさせます。節電が主な用途らしいです。
今回はこれを応用して、植物育成LEDライトを連動する機器にします。LEDライトのコンセントUSB連動電源タップに挿してスイッチをONの状態にしておきます。電源タップのUSBケーブルはプログラムから電源の制御が可能なUSBハブのポートに接続してこれと連動させます。
BeagleBone BlackのPythonのプログラムから、るUSBハブのポートの電源をON/OFFさせることで、LEDライトの電源をコントールしてみようと思います。
lsusbコマンド
lsusb
コマンドを実行して、電源をON/OFFさせるUSBハブのポート番号、Bus番号、Device番号を確認します。
$ lsusb |
AC Power Control by USB Hubのページに対応USBハブの記載がありますが、NEC製のBus 001 Device 002
がUSB連動電源タップをつないでいるデバイスです。root権限でlsusb
コマンドの詳細が表示できます。
$ sudo lsusb -v |
Port 4
には無線LANのドングルを挿しています。BeagleBone BlackがクラウドのMQTTブローカーに接続して、LEDライトをコントールするメッセージをsubscribeするために使います。USBハブはPort 1
が電源制御可能なポートになっていました。
Cのコマンド
Cのコマンドのフラグの指定方法です。バスとデバイス番号の組み合わせか、ハブ番号を指定します。
# hub-ctrl -b バス番号 -d デバイス番号 -P ポート番号 -p 0 または 1 |
LEDライトを点灯する場合は、-p
フラグを1にします。
$ sudo ./hub-ctrl -b 1 -d 2 -P 1 -p 1 |
消灯する場合は0を指定します。点灯はすぐ連動しますが、消灯の方はコマンドを実行してから5秒くらいかかります。
$ sudo ./hub-ctrl -b 1 -d 2 -P 1 -p 0 |
Pythonのコマンド
Pythonのコマンドの場合は、バスとデバイス番号を指定するとエラーになりました。
$ sudo ./hub_ctrl.py -b 1 -d 2 -P 1 -p 1 |
ハブの番号の指定で動作しました。-p 1
で点灯します。
$ sudo ./hub_ctrl.py -h 0 -P 1 -p 1 |
0を指定すると消灯します。
$ sudo ./hub_ctrl.py -h 0 -P 1 -p 0 |
アボカドとコネクテッドデバイス
赤と青のLEDライトが妖しげです。アボカドの種は3個育てていますが、1つは元気がなく、1つはカビ防止のつもりがLEDの当てすぎで乾燥して割れてしまい、1つだけ順調に育っています。
Raspberry Pi 2はBME280の環境センサーのデータをクラウドのMQTTブローカーにpublishしています。BeagleBone BlackはクラウドのMQTTブローカーをsubscribeしてLEDライトのコントロールに使っています。