0%

IoTでアボカドの発芽促進とカビを防止する - Part2: BeagleBone Blackで植物育成LEDライトを制御する

アボカドの種の水耕栽培を始めて1週間くらい経ちました。芽がでるまで1ヶ月くらいかかるようです。植物育成LEDライトはカビの防止と生育に効果があるみたいなので、半日照明を当てていたら乾燥しすぎて種にヒビが入ってしまいました。温度や湿度を見ながらLEDライトを当てる時間を調整する必要があります。

電源コンセントにつなげる普通のLEDライトをマイコンから制御する方法を調べました。USB連動電源タップとプログラムから制御可能なUSBハブを使うと上手くいきそうです。以下のポストを参考にさせていただきました。

用意するもの

以下の部材を用意しました。

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
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
$ cat /proc/version
Linux version 3.14.31-ti-r49 (root@a6-imx6q-wandboard-2gb) (gcc version 4.8.2 (Ubuntu/Linaro 4.8.2-19ubuntu1) ) #1 SMP PREEMPT Sat Jan 31 14:17:42 UTC 2015

プログラムの実行に必要なパッケージをインストールします。

$ sudo apt-get update
$ sudo apt-get install libusb-dev

Cのソースコードをダウンロードしてコンパイルします。

$ mkdir ~/hub
$ cd !$
$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
$ gcc -O2 hub-ctrl.c -o hub-ctrl -lusb

コンパイルしたバイナリのヘルプを確認します。

$ ./hub-ctrl --help
Usage: ./hub-ctrl [{-h HUBNUM | -b BUSNUM -d DEVNUM}] \
[-P PORT] [{-p [VALUE]|-l [VALUE]}]

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"
$ chmod u+x hub_ctrl.py

Pプログラム実行に必要なライブラリをインストールします。今回の環境ではpyusb--preフラグが必要でした。

$ sudo apt-get install git build-essential python-dev python-smbus
$ sudo pip install --pre pyusb
...
Successfully installed pyusb-1.0.0b2

ヘルプを確認します。

$ sudo ./hub_ctrl.py -h
Usage: ./hub_ctrl.py [{-h HUBNUM | -b BUSNUM -d DEVNUM}]
[-P PORT] [{-p [VALUE]|-l [VALUE]}]

使い方

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
Bus 001 Device 003: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 001 Device 002: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Wireless LAN Adapter [Ralink RT8070]

AC Power Control by USB Hubのページに対応USBハブの記載がありますが、NEC製のBus 001 Device 002がUSB連動電源タップをつないでいるデバイスです。root権限でlsusbコマンドの詳細が表示できます。

$ sudo lsusb -v
...
Bus 001 Device 002: ID 0409:005a NEC Corp. HighSpeed Hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
...
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power
Port 3: 0000.0100 power
Port 4: 0000.0503 highspeed power enable connect

Port 4には無線LANのドングルを挿しています。BeagleBone BlackがクラウドのMQTTブローカーに接続して、LEDライトをコントールするメッセージをsubscribeするために使います。USBハブはPort 1が電源制御可能なポートになっていました。

Cのコマンド

Cのコマンドのフラグの指定方法です。バスとデバイス番号の組み合わせか、ハブ番号を指定します。

# hub-ctrl -b バス番号 -d デバイス番号 -P ポート番号 -p 0 または 1
# hub-ctrl -h ハブ番号 -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
Traceback (most recent call last):
File "./hub_ctrl.py", line 236, in <module>
uh = dev_hub.open()
NameError: name 'dev_hub' is not defined

ハブの番号の指定で動作しました。-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ライトのコントロールに使っています。

avocado_bbb.JPG