このエントリーSORACOM Advent Calendar 2016 12/21分です。
ソラコムインターンエンジニアの岩瀬です。
今回は、SORACOM Air および SORACOM Beamを使ってリモート操作可能な赤外線リモコンを作成していきます。
アーキテクチャ
準備するもの
- SORACOM Air
- USB ドングル
- Raspberry Pi
- PC(Mac、Windowsなど)
- SDカードリーダー/ライター (PC本体にSDスロットがある場合には不要)
- Micro SD カード (8GB以上が望ましい)
※もし初代Raspberry Piを利用する場合には、通常サイズのSDカードを用意して下さい - 赤外線受信モジュール(秋月電子通商で販売 OSRB38C9AA)
- 赤外線LED(秋月電子通商で販売 OSI5FU5111)
- ブレッドボード(秋月電子通商などで販売)
- 抵抗(100Ω程度)
- Githubアカウント
- RubyがインストールされたホストPC
SORACOM Airの接続方法に関しては、
を参考にしてください。
赤外線リモコンの信号を解析する
LIRCとは?
Linux Infrared Remote Controlの略で、Linux上での赤外線信号の送受信のコントロールを簡単にできるようにするためのライブラリです。今回はこのライブラリを使うことによって、送信したい赤外線信号の解析および送信を行っていきます。
LIRCのインストール
-
LIRCをインストールする
pi@raspberrypi:~ $ sudo apt-get install lirc
-
LIRCを有効にする
pi@raspberrypi:~ $ sudo vim /etc/lirc/hardware.conf
-
hardware.confを以下のコマンドを用いて修正する
pi@raspberrypi:~ $ wget https://s3-ap-northeast-1.amazonaws.com/soracom-demo/edit_hardware_conf.sh // スクリプトをダウンロード
pi@raspberrypi:~ $ cp /etc/lirc/hardware.conf ~/hardware.conf // バックアップを取る
pi@raspberrypi:~ $ chmod +x edit_hardware_conf.sh // 実行権限を付与
pi@raspberrypi:~ $ sudo ./edit_hardware_conf.sh // hardware.confを編集
- 起動時にLIRCを有効にする。
pi@raspberrypi:~ $ wget https://s3-ap-northeast-1.amazonaws.com/soracom-demo/edit_hardware_conf.sh // スクリプトをダウンロード
pi@raspberrypi:~ $ chmod +x edit_boot_conf.sh // 実行権限を付与
pi@raspberrypi:~ $ sudo ./edit_boot_conf.sh // boot/config.txt の末尾にdtoverlay=lirc-rpi,gpio_in_pin=22,gpio_out_pin=23を追加
-
Raspberry Piを再起動する
pi@raspberrypi:~ $ sudo reboot
-
有効になっているか確認
下記コマンドを実行してlirc_rpi
が表示されていることを確認する。
pi@raspberrypi:~ $ lsmod | grep lirc
lirc_rpi 6638 0
lirc_dev 8169 1 lirc_rpi
rc_core 16956 1 lirc_dev
- LIRCを停止する
pi@raspberrypi:~ $ sudo /etc/init.d/lirc stop
配線
センサーの動作確認
上記コマンドを実行した後、センサーに向かってリモコンのボタンを押す。
このとき、下記のような数字列が出力されることを確認する。
pi@raspberrypi:~ $ mode2 -md /dev/lirc0
490 571 583 595 505 576
556 595 538 592 511 621
511 593 1615 647 1625 576
1654 525 1710 634 1648 589
1645 553 1682 621 1640 592
1645 589 520 612 484 649
510 554 1681 619 501 565
553 617 487 643 484 533
1729 614 1647 593 1617 576
583 585 1649 664 1546 644
1641 590
赤外線信号のデータを取得する
-
信号の解析データを保存する。
待機状態になるので、赤外線受信モジュールにリモコンを向けて、一度だけ電源オンボタンを押してください。
下記コマンドで赤外線信号を解析したデータがpower_on.datに保存されます。
pi@raspberrypi:~ $ mode2 -md /dev/lirc0 | tee power_on.dat
-
信号の解析データを設定ファイルに書き込む
下記コマンドを実行して、登録名を表示してくださいとでてきたらpower_onと入力。
pi@raspberrypi:~ $ sudo ruby ir_tools/irrecord.rb power_on.dat
登録名を入力してください (Ex: switch_on)
power_on
赤外線LEDから信号を送信する
下記コマンドを入力して、正しく機器が操作できるか確認する。
赤外線LEDは指向性が強いので、うまく反応しない場合は近づけたり方向を変えたりしてみてください。
pi@raspberrypi:~ $ irsend SEND_ONCE controller power_on
Sango(MQTTブローカ)に登録する
Sangoとは
パブリッシュ/サブスクライブ型の軽量なプロトコルであるMQTTを簡単に利用できるサービスです。今回はSangoを用いて、SORACOM Airを通した通信を行っていきます。
Sangoに登録する
- Sangoのホームページ(https://sango.shiguredo.jp/) から新規登録(Githubアカウントが必要になります。)
- ログイン後、MQTTの接続情報を確認する
鍵のアイコンをクリックするとパスワードが表示されます。
SORACOM Beamの設定
SORACOM Beamとは
SORACOM Beam とは、IoTデバイスにかかる暗号化等の高負荷処理や接続先の設定を、クラウドにオフロードできるサービスです。Beam を利用することによって、暗号化処理が難しいデバイスに代わって、デバイスからサーバー間の通信を暗号化することが可能になります。
プロトコル変換を行うこともできます。例えば、デバイスからはシンプルなTCP、UDPで送信し、BeamでHTTP/HTTPSに変換してクラウドや任意のサーバーに転送することができます。
また、上記のプロトコル変換に加え、Webサイト全体を Beam で転送することもできます。(Webサイトエントリポイント) 全てのパスに対して HTTP で受けた通信を、HTTP または HTTPS で転送を行う設定です。
SORACOM Beamの設定
今回は以下のBeamを使用します。
- MQTTにおけるユーザ名、パスワードの設定をSORACOM Beamにオフロード(MQTTエンドポイント)
ここでは、Sangoへのデータ転送設定 (MQTTエンドポイント)を設定します。
BeamはAir SIMのグループに対して設定するので、まず、グループを作成します。
グループの作成
SIMのグループ割り当て
表示された画面で以下のように設定
- 設定名: SangoMQTT(別の名前でも構いません)
- 転送先のプロトコル: MQTT
- ホスト名: lite.mqtt.shiguredo.jp
- ユーザ名: <Githubのユーザ名>@github
- パスワード: <Sangoで取得したパスワード>
以上でSORACOM Beamの設定は完了です。
## SORACOM Beam経由で赤外線信号を送信する
Raspberry Piにプログラムをダウンロード
-
MQTTクライアントをインストール
pi@raspberrypi:~ $ sudo gem install mqtt
-
環境変数を設定する
pi@raspberrypi:~ $ export MQTT_USERNAME=<Sangoで取得したユーザ名>
-
スクリプトをダウンロードしてMQTTを受信する
pi@raspberrypi:~ $ wget https://s3-ap-northeast-1.amazonaws.com/soracom-demo/ir_tools/subscriber.rb
pi@raspberrypi:~ $ ruby subscriber.rb
上記のプログラムを起動したまま別のタブでホストPCにログイン
ホストPCでMQTTをsubscribe
-
MQTTクライアントをインストール
$ gem install mqtt
-
環境変数を設定する
$ export MQTT_PASSWORD=<Sangoで取得したパスワードを入力>
$ export MQTT_USERNAME=<Sangoで取得したユーザ名>
- スクリプトをダウンロード・実行してMQTTを送信し、赤外線信号が送信されることを確認
$ wget https://s3-ap-northeast-1.amazonaws.com/soracom-demo/ir_tools/publisher.rb
$ ruby publisher.rb power_on
power_onを他の命令に変えることで他の信号も送信できます。
詳しくは下記の「応用編」を参照してください。
応用編
-
追加で信号の解析データを保存する。
待機状態になるので、赤外線受信モジュールにリモコンを向けて、登録したいボタンを一度だけ押してください。
pi@raspberrypi:~ $ mode2 -md /dev/lirc0 | tee <ボタンの名称(任意のファイル名も可)>.dat
-
信号の解析データを設定ファイルに書き込む
下記コマンドを実行して、登録名を表示してくださいとでてきたら「ボタンの名称」を入力。
pi@raspberrypi:~ $ sudo ruby ir_tools/irrecord.rb power_on.dat
ボタンの名称を入力してください (Ex: switch_on)
<power_off等の任意のボタンの名称を入力>
これで追加のボタンの信号データが登録されました。
-
登録されたボタンの一覧を確認する
pi@raspberrypi:~ $ irsend LIST controller ""
-
登録したボタンの信号を送信する
「SORACOM Beam経由で赤外線信号を送信する」でのコマンドを上記で登録したものに変更すると、新しく登録した赤外線信号が送信できます。
まとめ
Facebook CEOであるMark Zuckerberg氏が家庭内にJarvisと呼ばれる家庭内アシスタントを構築したというニュースが話題になりましたが、今回作成したリモート操作可能な赤外線リモコンも、そういった世界を実現するための一歩としてみなさまのお役に立てればなと思っています。比較的簡単に作成できるの、お時間のある方は是非トライしてみてください!!
質問コメントお待ちしております。