チュートリアル
Raspberry PiとECHOPFを組み合わせて家電を操作してみよう(その1:開発環境のセットアップ)
IoTというキーワードが良く聞かれるようになっています。Internet of Thingsの略で、直訳するとモノのインターネットです。これまでのようにデスクトップやノートPC、スマートフォンなどの高機能コンピュータだけでなく、マイコンやセンサーなどの小さなデバイスがインターネットにつながることで、これまでは難しかった相互の情報やり取りが可能になります。
今回は小型コンピュータの代表とも言えるRaspberry PiとECHOPFを組み合わせて自宅の家電を操作してみます。今回は照明をターゲットにしますが、他の家電でも応用できますので、ぜひ自宅をスマートホーム化する参考にしてください。
まず今回はシステム構成とセットアップについて紹介します。
必要なもの
今回は以下のデバイスを使います。
- Raspberry Pi 3
- RM mini3またはeRemote mini(以下RM mini3)
- iPhone
スマートフォンはiPhoneになります。iOSのホームアプリと連携することでiPhoneからも連携できます。ECHOPFを使うことでAndroidからでも操作できますが、アプリでの連携ではないので注意してください。
多くの家電は赤外線で操作できます。例えばテレビ、エアコン、照明、扇風機など、ほとんどの家電に赤外線リモコンが付いているでしょう。これらの赤外線を出力できるのがRM mini3です。RM mini3の日本ブランドがeRemote miniになります。価格は2倍くらい違いますのでお好みに合わせて選んでください。RM mini3をiPhoneでセットアップすると、正規品ではありませんというエラーが出ることが知られています。ただし今回の利用法であれば特に問題ありません。
Raspberry Piのセットアップ
Raspberry Piは最初はOSが入っていません。そこでマイクロSDカードを用意してOSイメージを書き込みます。その際にはEtcherというソフトウェアを使うのが便利です。最新版のOSイメージをダウンロードし、Etcherを使ってマイクロSDに書き込めます。
イメージを書き込んだらRaspberry Piに差し込んで起動します。最初はディスプレイとUSBキーボードやマウスを差し込んでおくと良いでしょう。
起動したらターミナルを開いてコマンドを打ちます。
$ sudo raspi-config
そしてネットワーク設定にあるSSHを有効にします。これで外部のコンピュータからログインできるようになります。
ネットワーク設定
さらにLANケーブルを差し込むか、無線LANに接続します。Raspberry Pi 3ではデフォルトで無線LANがありますが、それより古いRaspberry Piの場合は有線LANを使うか、無線LANアダプターを使うのが良いでしょう。
無線LANにつなぐ場合には、下記のコマンドを打ちます。SSIDの名前とパスワードはそれぞれ自分のものを入力してください。無線LANは5GHzではなく、2GHzのものを指定してください。
$ wpa_passphrase SSIDの名前 SSIDのパスワード
そして出てきた内容を /etc/wpa_supplicant/wpa_supplicant.conf
に追記してください。終わったらネットワークインタフェースを再起動します。
$ sudo ifdown wlan0
$ sudo ifup wlan0
これで無線LANにつながれば完了です。確認は ifconfig
コマンドを使います。
$ ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.25 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::461e:abe8:a45b:f33 prefixlen 64 scopeid 0x20<link>
inet6 2407:c800:7103:300::a prefixlen 128 scopeid 0x0<global>
inet6 2407:c800:7103:300:7bcd:522:4257:bc0a prefixlen 64 scopeid 0x0<global>
ether b8:27:eb:1e:28:9f txqueuelen 1000 (Ethernet)
RX packets 40 bytes 5119 (4.9 KiB)
RX errors 0 dropped 3 overruns 0 frame 0
TX packets 86 bytes 15181 (14.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
外部からの接続
ネットワークにつながり、SSHが有効になっていればRaspberry PiからHDMIディスプレイやUSBキーボードを外して構いません。そして外部のコンピュータからSSH経由で接続します。
$ ssh [email protected] # または pi@(Raspberry PiのIPアドレス)
デフォルトのパスワードはraspberryとなっています。後の操作はデスクトップのターミナルから行えます。
ライブラリのインストール
Raspberry PiのデフォルトOSであるRaspbianはDebianベースなのでaptでパッケージ管理を行います。まずはアップデートします。
$ sudo apt-get update
Node.jsのインストール
ECHOPFのJavaScript SDKを使いますので、実行環境であるNode.jsをインストールします。ただしaptでインストールされるものは古いので、NodeBrewを使ってインストールします。
$ curl -L git.io/nodebrew | perl - setup
$ echo "export PATH=$HOME/.nodebrew/current/bin:$PATH" >> .bashrc
$ source .bashrc
執筆時点での最新版である 8.6.0 をインストールします。
$ nodebrew ls-remote # バージョンの確認
$ nodebrew install-binary v8.6.0
$ nodebrew use v8.6.0
これでNode.jsが使えるようになりました。
RM mini3のセットアップ
RM mini3は安価な赤外線デバイスになります。購入して、マイクロUSBを接続するとセットアップモードになります(またはリセットスイッチを長押ししてセットアップモードに入ります)。セットアップ方法はiPhoneなどでe-Controlアプリを使って行います。いくつかのセットアップ方法がありますが、AP modeが一番確実なようです(筆者環境ですが)。
RM mini3も5GHzの無線LANにはつなげられないので注意してください。2.5GHz帯の無線アクセスポイントでセットアップしてください。
デバイスのIPアドレス、MACアドレスを調べる
セットアップが終わったら、無線LANにクライアントが追加されているはずです。そのIPアドレスとMACアドレスを調べます。
まず適当なディレクトリを作ります。
$ mkdir discover
$ cd discover
そしてライブラリをインストールします。
$ npm i broadlinkjs -S
後は以下のようなコードを書きます。ファイル名は index.js とします。これはデバイスを取得するためのコマンドです。
let broadlink = require('broadlinkjs');
var b = new broadlink();
b.on("deviceReady", (dev) => {
console.log(dev)
});
b.discover();
これを実行すると、RM mini3がLANにつながっていれば、その情報が表示されます。この時のIPアドレスやMACアドレスが重要になりますのでメモしておきます。
HomeBridgeのセットアップ
次に HomeBridge をセットアップします。これはiOSのホームアプリに対応していないIoTデバイスを利用可能にするソフトウェアです。RM mini3を使うだけであれば不要ですが、赤外線情報を調べたりする際に便利です。
インストールはnpmで行います。
$ npm install -g --unsafe-perm homebridge
また、RM mini3を操作するプラグインをインストールします。
$ npm install -g homebridge-broadlink-rm
まず一回 HomeBridge を起動します。起動したら、すぐに終了してください。
$ homebridge
これで ~/.homebridge
というディレクトリが作られます。そして ~/.homebridge/config.json
という名前で設定ファイルを作成します。内容は以下の通りです。
{
"bridge":{
"name":"Homebridge",
"username": "調べたRM mini3のMACアドレス",
"port":51826,
"pin":"031-45-154"
},
"description":"Homebridge",
"platforms": [
{
"platform": "BroadlinkRM",
"name": "Broadlink RM",
"accessories": [
{
"name": "Light",
"type": "switch",
"data": {
"on": "",
"off": ""
}
}
]
}
]
}
このファイルでRM mini3のMACアドレスを指定します。その結果、ホームアプリからの命令がHomeBridgeを経由し、RM mini3に送られるようになります。
ホームアプリとつなぐ
では HomeBridgeを再実行します。
$ homebridge
次にiPhoneのホームアプリを起動し、アクセサリを追加します。HomeBridgeがQRコードを表示しているはずなので、それを読み込めば設定が完了します。
ライトの設定に加えて、学習のためのアイコンなどが追加されるはずです。
リモコンの赤外線を覚える
ではホームアプリで学習ボタンを押します。そうするとRM mini3が赤外線待機状態になりますので、リモコンのボタンを押します。そうすると16進数がターミナル上に表示されるはずです。
$ [2018-5-9 05:39:09] [Broadlink RM] Learn Code (ready)
[2018-5-9 05:39:14] [Broadlink RM] [RESULT] Learn Code (learned hex code: 260.(省略)..000)
[2018-5-9 05:39:14] [Broadlink RM] [INFO] Learn Code (complete)
[2018-5-9 05:39:14] [Broadlink RM] [INFO] Learn Code (stopped)
このhex codeと書かれている右にある数字の羅列が赤外線のコードになります。これを先ほど作成したconfig.jsonに書き込みます。ライトのオンまたはオフ両方に設定します。設定したらHomeBridgeを再起動します。
まとめ
ここまでできるとiOSのホームアプリでライトのオンオフが可能になるはずです。これはこれで十分に面白いのですが、これではLANの中だけ(家の中だけ)に留まっています。IoTというからには、インターネット上とのデータ送受信があってこそ面白いものになるでしょう。
次回以降、今回の仕組みをECHOPFを使って利用できるようにしていきます。