Mana Blog Next

自宅IoT、仕事と家庭、カメラ、筋トレ生活

SIM Xmas Tree ~スマホでかんたん制御!家族で「IoTクリスマスツリー」を作ってみよう~ #SORACOM #MQTT

本エントリーは、SORACOM Advent Calendar 2015 - Qiitaの12月24日分の投稿記事です。
f:id:mana-cat:20151223162428j:plain:w300
家族で力を合わせて「IoTクリスマスツリー」に取り組みましたので、作り方をご紹介します!
目次

スマホでかんたん制御!家族で「IoTクリスマスツリー」を作ってみよう

今回、クリスマスツリーのLEDをブラウザで簡単に制御できる仕組みを作りました。
これにより、ブラウザが入っているPC、スマホ、タブレットからクリスマスツリーのLEDを簡単に制御できちゃいます!
SORACOM AirはデバイスにプライベートIPアドレスしか割り振られませんが、今回の仕組みだとその課題を解消できます。
実際のページは以下URLにて公開中です。

http://xmas-monkey.rhcloud.com/ にて期間限定でページを公開中です。ボタンを押すと、我が家のクリスマスツリーのLEDの遠隔制御が本当にできちゃいます!
(12月26日を過ぎると、クリスマスツリーは片付ける予定です)

構成図

f:id:mana-cat:20151223202618p:plain

IoTクリスマスツリーの仕組み

  1. ブラウザ上でWebアプリのボタンを押す【点灯/点滅/消灯】(MQTTパブリッシャー)
  2. ActiveMQでメッセージを受け取る (MQTTブローカー)
  3. 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)クリスマスツリーの飾り付け

f:id:mana-cat:20151222215210j:plain:w200
長男がツリーの飾り付けをしてくれました。(ついでに花も生けてくれた)

(2)LEDの下準備

f:id:mana-cat:20151222212554j:plain:w300
LEDライトについては、「アキバLEDピカリ館」で購入したものを使用。
テープLEDならピカリ館!!LEDテープ・LEDバルブを激安価格で速攻通販
f:id:mana-cat:20151222212832j:plain:w300
電池ボックス付きですが、電池は使用しないのでニッパーでチョッキンします。
(これもLEDなのでアノードとカソードを間違えないように目印を付けた方が作業しやすいです)

(3)配線

以下の通りに配線します。(実際には並列接続のLED20個です)
LEDをブレッドボードに配線するとき、ジャンパワイヤ(オス~ワニクリップ)を使用しました。
今回は2.5Ωの制限抵抗が必要でしたが、それだと明るすぎたので4.7Ωにしています。
f:id:mana-cat:20151222221644p:plain:w300

(4)SORACOM Airの設定

既にダイヤルアップツールwvdialが設定が済んでいることを前提とします。

(5)環境構築およびプログラミング

以下、父ちゃんのメモをコピペです。
まず、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:8161TCP: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を使いました。

WebUIボタンは、Unicorn UIのButtons 2.0のCSSを利用し、最近定番のフラットデザインにしました。
Buttons - A highly customizable CSS button library.

ソースコードは、GitHubで公開しています

なお、今週限定で我が家のXmasツリーを一般開放します。
XmasツリーのコントローラーはOpenShift Online上で稼働しています。PaaSに興味があればOpenShift Onlineもよろしくお願いします。

SIM Xmas Tree


(父ちゃんのコメントは以上です)

まとめ

f:id:mana-cat:20151223162811j:plain:w300
長男(4才)もスマホでLEDの制御をしてみました。ボタン一つでLEDチカチカできるのでとても楽しそうです。
この冬休みは、家族でIoTに挑戦してみましょう!

おまけ

先日から二男(生後9ヶ月)が高熱を出してしまい、私が看病している間、夫が料理を作ってくれました。
ロブスターのテルミドールが美味しくて、ちょっと嬉しかったです。
f:id:mana-cat:20151223193419j:plain
皆さま、素敵なXmasをお過ごし下さい。

関連ページ