チュートリアル

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 pi@raspberrypi.local # または 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を使って利用できるようにしていきます。