スマートフォンでRaspberry Pi学習リモコンを操作するには

スマートフォンで学習リモコンを操作して、エアコンやスピーカー等の機器をコントロールしたいと思います。

学習リモコン本体は、Raspberry Piに学習リモコン基板を取り付け、部屋の中央付近(機器に赤外線が届く位置)に設置します。

スマートフォンでリモコンのボタンを表示しますが、ボタンの登録もスマートフォンで行えるように設定画面も作成しました。

シンプルにRaspberry PiがWebサーバとして動作しますので、外部のサーバ契約やアカウント登録などは一切不要です。このような学習リモコンシステムの構築手順を記録しておこうと思います。


Raspberry Pi学習リモコンWebインタフェース構築手順

使用する機材

Raspberry Pi本体

Node.jsを動かす都合上、Raspberry Pi 2以降が良さそうです(無印は動作速度的に非推奨のようです)。スマートフォンの接続は、Raspberry Piに有線LANケーブルを接続し、Wi-Fiルータを経由して行いました。

学習リモコン基板

ビット・トレード・ワンさんのこちらの基板を使用させて頂きました。IR(赤外線)の学習と送信を行います。

microSDカード

余ったclass 4のmicroSDカードを利用しましたが、動作が遅い感じでした。UHS-I対応の高速なmicroSDカードをお勧め致します。


学習リモコンGUI構築手順

全体的な流れは、OSインストール→学習リモコン用コマンドインストール→Node.js環境構築→JavaScript、HTML作成→実行・動作確認になります。

1. Raspbianインストール

こちらの記事を参考に、Raspbianのインストールと初期設定を行います。

構築・動作確認は「2018-06-27-raspbian-stretch.zip」で行いました。

2. I2C有効化

raspi-configでI2Cを有効化、再起動しておきます。

3. 学習リモコン用ソフトウェアのインストール

piユーザでログイン、設定作業を行います。

ビット・トレード・ワンさんのホームページで配布されています「ラズパイ専用学習リモコン対応ソフトウェア」を使用させて頂きました。zipファイルを取得し展開しました。

4. node.jsインストール

画面はnode.jsで作成します。node.jsとnpmをインストールします。

node.jsからpython3を起動し、先程展開したIR-remocon02-commandline.pyを実行するかたちです。

python3とpython3-smbusは既定でインストール済みでした。

5. プロジェクト作成

npmでexpress-generatorをインストール後、expressコマンドでexpressプロジェクトを作成しました。

念の為、npm startでWebサーバを実行、

他のPCからWebブラウザでアクセスできるか確認しました。

6. サーバ側JavaScript作成

app.js

既定のapp.jsを変更して、var api行とapp.use(‘/api’)行を追加しました。

routes/index.js

トップページを/IrSend.htmlに変更します。

routes/api.js

新たにapi.jsファイルを作成します。WebブラウザとRaspberry Piの間で、リモコンデータ(ボタンのリスト)の送受信と、赤外線データ(ボタンを押したときの信号)の送受信を行う内容です。

IR-remocon02-commandline.pyを別の位置に展開した場合、7行目のvar irCmdを変更して下さい。

users.jsとindex.ejsは使用しないので削除しました。

7.HTML,CSS作成

public/IrSend.html

リモコンのメイン画面を作成します。vue.jsを使用させて頂きました。

public/IrEdit.html

ボタンの編集画面を作成します。

public/stylesheets/style.css

スタイルシートでボタンを大きめに表示するようにしました。

8. クライアント側JavaScript作成

public/javascripts/piir.js

リモコンデータ(ボタンのリスト)の送受信と、赤外線データ(ボタンを押したときの信号)の送受信のWebブラウザ側のコードになります。

9. モジュールの追加

jsonfileを使用しましたので、プロジェクトにモジュールを追加します。

10. 空のリモコンデータの作成

リモコンのデータは、単純にファイルに保存しています。空のjsonファイルを作成しておきます。

リモコンの編集画面でボタンを登録すると、ファイルにボタンの名前と赤外線のデータが追加されます。


学習リモコンサーバ起動

以上で準備が完了しました。node.jsでWebサーバを起動します。(デバッグ実行ですが)

しばらく待つと、TCPポート3000番でWebサーバが起動します。ポート番号はbin/wwwファイルで設定されています。Webブラウザでアクセスすると、リモコンの画面が表示されますが・・・最初は空です。

「リモコン設定へ」をクリックします。ボタンの登録手順は以下になります。

  1. 学習リモコン基板のスライドスイッチを「LERN」にセットします。
  2. 任意のスイッチ(ボタン)を押します。
  3. リモコンを操作し、赤外線信号を記憶させます。
  4. スライドスイッチを戻します。
  5. リモコン設定画面の①に、2番で記憶させたボタンの番号を入力します。
  6. ②にボタンの名前を入力します。
  7. 「ボタン追加」をクリックします。

このような感じで、ボタンが追加されます。

同じ要領で、複数のボタンを追加します。

リモコン画面に戻ると、このような感じになります。


以上で構築が完了しました。

まあ、ざっと作った作りたての感じで、ボタンのレイアウトがリモコンぽくありません。

ボタンの大きさや位置、色などは、スタイルシートを使って、個々のボタンのスタイルを設定することで工夫できそうです。(プログラムを変更して、スタイル名の入力欄を付ける必要がありそうです)

デバッグモードではなく、node.jsでRaspberry Pi用の本番環境を構築する場合、どうやるのでしょう?・・・追々調べてみようと思います。

ちなみにWebサーバとして実装しましたので、外出先から自宅へVPNで接続して、エアコンの電源を入れておくような使い方もできそうですが・・・火事などには十分お気をつけ下さい。


PM2の本番環境構築

下記の手順でRaspberry PiにPM2をインストールして、本番環境として動かすことができました。追記しておきます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク