本エントリーは、SORACOM Advent Calendar 2015 - Qiitaの12月24日分の投稿記事です。
家族で力を合わせて「IoTクリスマスツリー」に取り組みましたので、作り方をご紹介します!
スマホでかんたん制御!家族で「IoTクリスマスツリー」を作ってみよう
今回、クリスマスツリーのLEDをブラウザで簡単に制御できる仕組みを作りました。
これにより、ブラウザが入っているPC、スマホ、タブレットからクリスマスツリーのLEDを簡単に制御できちゃいます!
SORACOM AirはデバイスにプライベートIPアドレスしか割り振られませんが、今回の仕組みだとその課題を解消できます。
実際のページは以下URLにて公開中です。
SIM Xmas Tree powered by SORACOM Air にて期間限定でページを公開中です。ボタンを押すと、我が家のクリスマスツリーのLEDの遠隔制御が本当にできちゃいます!
(12月26日を過ぎると、クリスマスツリーは片付ける予定です)
構成図
IoTクリスマスツリーの仕組み
- ブラウザ上でWebアプリのボタンを押す【点灯/点滅/消灯】(MQTTパブリッシャー)
- ActiveMQでメッセージを受け取る (MQTTブローカー)
- Raspberry Pi2でメッセージを受け取り(MQTTサブスクライバー)、LEDの制御をする(GPIO)
概要
作業した人
- 父ちゃん (趣味:プログラミング)
- 母ちゃん (趣味:電子工作)
- 長男(4才、電車好き)
家族プロジェクトの工数
- 家族会議 3分
- (父ちゃん、長男) 買い出し 1時間
- (長男) ツリー飾り付け 10分
- (母ちゃん) 回路設計 5分
- (母ちゃん) ハードウエア実装 10分
- (父ちゃん) ソフトウエア実装 2時間
- (母ちゃん) ブログ書く 2時間
用意するもの
製品名 | 価格 |
---|---|
Raspberry Pi 2 Model B | ¥5,580 |
SORACOM Air SIMカード | ¥888 |
USBドングル L-02C(中古) | ¥800 |
マイクロSDカード16GB | ¥850 |
ミニブレッドボード | ¥190 |
ジャンパワイヤ(オス~ワニクリップ) | ¥380 |
ジャンパワイヤ(オス~メス) | ¥432 |
LEDライト(1m/20個) | ¥350 |
抵抗 1本 | 1本あたり¥2 |
クリスマスツリー | - |
ちなみに、我が家は既にラズパイやブレッドボードを所有しているので、追加で購入したのはLED(350円)のみでした。
作業内容
(1)クリスマスツリーの飾り付け
長男がツリーの飾り付けをしてくれました。(ついでに花も生けてくれた)
(2)LEDの下準備
LEDライトについては、「アキバLEDピカリ館」で購入したものを使用。
テープLEDならピカリ館!!LEDテープ・LEDバルブを激安価格で速攻通販
電池ボックス付きですが、電池は使用しないのでニッパーでチョッキンします。
(これもLEDなのでアノードとカソードを間違えないように目印を付けた方が作業しやすいです)
(2)配線
以下の通りに配線します。(実際には並列接続のLED20個です)
LEDをブレッドボードに配線するとき、ジャンパワイヤ(オス~ワニクリップ)を使用しました。
今回は2.5Ωの制限抵抗が必要でしたが、それだと明るすぎたので4.7Ωにしています。
(2)SORACOM Airの設定
既にダイヤルアップツールwvdialが設定が済んでいることを前提とします。
(3)環境構築およびプログラミング
以下、父ちゃんのメモをコピペです。
まず、MQTTブローカーとなるActiveMQのサーバーをConoHa上に構築します。
今回はConoHa標準提供のCentOS 6のイメージを使用しました。
rootユーザーでログインして以下のコマンドを実行します。
# yum update # yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/lkiesow/apache-activemq-dist/repo/epel-6/lkiesow-apache-activemq-dist-epel-6.repo # yum install java-1.7.0-openjdk.x86_64 # yum install activemq-dist-client activemq-dist # service activemq start # chkconfig activemq on # vi /etc/sysconfig/iptables # service iptables reload
iptablesでTCP:8161
とTCP:1883
をオープン、そのままではMQTTのユーザー認証がないので接続元をIP制限かけた方がいいでしょう。
Raspberry Pi2上にはRaspbianがインストールされています。
Raspbian上に追加で必要なパッケージとインストール方法は以下の通りです。
$ sudo apt-get install python-rpi.gpio $ sudo pip install paho-mqtt
Raspberry Pi2上のターミナルでMQTTサブスクライバ―を起動します。
$ python ./tree_subscriber.py
MQTTパブリッシャーとなるWebアプリはPHPで実装されており、OpenShift OnlineのPaaS環境で稼働しています。
PHP用のMQTTライブラリはGitHubで公開されているBlue Rhinos ConsultingのphpMQTTを使いました。
- PHPのMQTTライブラリhttps://github.com/bluerhinos/phpMQTT
WebUIボタンは、Unicorn UIのButtons 2.0のCSSを利用し、最近定番のフラットデザインにしました。
Buttons - A highly customizable CSS button library.
ソースコードは、GitHubで公開しています。
- MQTTサブスクライバー(LED制御) https://github.com/htaira/mqtt-xmas-tree-subscriber
- MQTTパブリッシャー(Xmas Tree コントローラー) https://github.com/htaira/mqtt-xmas-tree-webapp
なお、今週限定で我が家のXmasツリーを一般開放します。
XmasツリーのコントローラーはOpenShift Online上で稼働しています。PaaSに興味があればOpenShift Onlineもよろしくお願いします。
SIM Xmas Tree
(父ちゃんのコメントは以上です)
まとめ
長男(4才)もスマホでLEDの制御をしてみました。ボタン一つでLEDチカチカできるのでとても楽しそうです。
この冬休みは、家族でIoTに挑戦してみましょう!
おまけ
先日から二男(生後9ヶ月)が高熱を出してしまい、私が看病している間、夫が料理を作ってくれました。
ロブスターのテルミドールが美味しくて、ちょっと嬉しかったです。
皆さま、素敵なXmasをお過ごし下さい。