ラズパイでスマートリモコンを作ってみた(Blynk使用)

市販のスマートリモコンって7000円とか8000円くらいの値段の商品が多いんですが、案外高いと思ったことはありませんか。

もしくはその値段だともう少し高機能な商品にしてほしいとか。

ものによってはセンサや音声入力できる高機能なスマートリモコンもありますが1万円を超えてくるような高価格なガジェットになります。

簡単に手軽にそして拡張性を後から持たせられるようにできないものか、と悩んでいたところラズパイで操作できる方法を発見しました。

この方法ですとラズパイを持っていれば1000円程度でエアコンなどの赤外線リモコンの操作ができちゃいます!!!

しかもスマホから操作もできます。

今回はその作り方をこれから紹介していきます!

はじめに

概要

目標は「スマホを操作してテレビの電源を入れることです。

本システムの流れ

1. スマホ(Blynk)からラズパイに命令を送る

2. ラズパイはパルス命令を赤外線LEDに送る

3. 赤外線LEDはパルス命令通り赤外線を点滅させる

4. テレビは赤外線を受け取り、電源が入る

結果

スマホ画面の丸いボタンをタップするとテレビの電源が入ります。

もう一度ボタンを押すと、電源が切れます。

用意するもの

ラズベリーパイ

Raspberry Pi 3 Model B+
created by Rinker

ブレッドボード

ブレッドボード
created by Rinker

ジャンパー線

ジャンパーワイヤ130pcs オス-オス forブレッドボード
created by Rinker

抵抗

220Ωくらい × 2個

10Ωくらい × 1個

抵抗
created by Rinker

トランジスタ(2SC2120Y)

トランジスタ(2SC2120Y) 
created by Rinker

赤外線LED

Amazonで調べましたが、どれも評価が微妙だったので秋月で購入することをお勧めします。

参照元:5mm赤外線LED 940nm OSI5LA5113A グレー (10個入)

受信モジュール

こちらもAmazonで調べましたが、どれも評価が微妙だったので秋月で購入することをお勧めします。

参照元:赤外線リモコン受信モジュールOSRB38C9AA(2個入)

あとはテレビとスマホが必要です!

スマホアプリBlynkの設定

Blynkとは?

Blynkのホームページによると、

「Blynkは、インターネット上でArduino、Raspberry Piなどを制御するためのiOSとAndroidアプリを搭載したプラットフォーム」

(Blynk is a Platform with iOS and Android apps to control Arduino,Raspberry Pi and the likes over the Internet.)

つまり、インターネットを介してスマホからマイコンを操作するためのアプリです。

セットアップ

スマホにBlynkをインストール

AndroidまたはiOSからBlynkをインストールしてください

Android

iOS

アカウント作成

●「Create New Account」をクリック

●「メールアドレス」と「パスワード」を入力

●① 「サーバのアイコン」をクリック

●② 「Blynk」に設定されてるかを確認

●③ 「OK」をクリック

新規プロジェクト作成

●「New Project」をクリック

●① 「プロジェクト名」は任意で入力

●② 「Device」は「Raspberry Pi3 B」を選択

●③ 「Connection」は「WiFi」を設定

●「OK」をクリック

ボタン作成

●黒い画面上をクリック

●「Button」をクリック

●黒画面にアイコンが作成されるのでクリック

●① 「Button名」は任意入力

●② 「OUTPUT」は「Vertual > V0」を選択

●③ 「MODE」は「SWITCH」を選択

●④ 「OK」をクリック

●アイコンに「ボタン名」と「OUTPUT > PIN名」が反映される

トークンの確認

●「Settingのアイコン」をクリック

●下部にトークンが記載されている

※トークンは後工程でラズベリーパイのコードに記載します

    赤外線送受信回路の設計

    受信回路

    赤外線学習リモコン―赤外線信号送信・受信(改)」を参考にさせていただきました。

    送信回路

    ラズパイ制御環境の構築

    リモコンデータの学習

    Wiring Pi のインストール ・ プログラムファイルの作成 ・ 実行ファイル作成 ・ 実行

    赤外線リモコン信号受信・送信」を参考にさせていただきました。

    私の場合、GPIO4(wiringPiでは7PINとなる)を使用しました。

    実行すると、以下のような待ち状態になります。

    テレビの電源ボタンを押すと、「Scanning has been done.」というテキストが出力され、

    ファイルが保存されます。

    これでリモコンデータ(tv_on.data)の準備は完了です。

    赤外線送信システム

    プログラムファイルの作成 ・ 実行ファイル作成

    同じく、「赤外線リモコン信号受信・送信」を参考にさせていただきました。

    スクリプトをコンパイルするところまでできたら、赤外線送信システムの準備は完了です。

    スマホと連携(Blynk)

    Blynkのインストール

    Blynkのライブラリをインストールします

    git clone https://github.com/blynkkk/blynk-library.git

    カレントディレクトリをインストールしたblynk-libraryのlinuxに変更します

    cd blynk-library/linux

    makeします

    make clean all target=raspberry
    プログラムファイルの作成

    「blynk-library/linux/main.cpp」を修正します。

    /** 
    * @file main.cpp * @author Volodymyr Shymanskyy 
    * @license This project is released under the MIT License (MIT) 
    * @copyright Copyright (c) 2015 Volodymyr Shymanskyy 
    * @date Mar 2015 * @brief 
    */ 
    
    //#define BLYNK_DEBUG 
    #define BLYNK_PRINT stdout 
    #ifdef RASPBERRY 
    #include <BlynkApiWiringPi.h>
    #else 
    #include <lt;BlynkApiLinux.h> 
    #endif 
    #include <BlynkSocket.h>
    #include <BlynkOptionsParser.h> 
    #include <blynkoptionsparser.h> 
    #include <blynkapiwiringpi.h> 
    static BlynkTransportSocket _blynkTransport; 
    BlynkSocket Blynk(_blynkTransport); 
    static const char *auth, *serv; 
    static uint16_t port; 
    #include <blynkwidgets.h>
    BlynkTimer tmr; 
    char command[256] = ""; //シェルコマンド用変数 
    char srcpath[256] = "/home/pi/wiringPi/sendir"; //赤外線送信プログラムのパス 
    char fullpath[256] =""; 
    
    int gpio = 22; //赤外線LEDのGPIOのPIN番号(WiringPiのPIN) 
    int repeat_num = 1; 
    //信号の繰り返し回数 
    
    //シェルコマンドを実行するモジュール 
    void runsh(char* filename) {
     char datapath[256] = "/home/pi/wiringPi/";  //受信データ.dataファイルの配置パス 
    
     strcat(datapath,filename); 
     sprintf(command,"sudo %s %s %i %i",srcpath,datapath,repeat_num,gpio);
     system(command); } 
    
    //スマホで操作したVOのデータが変化すると以下のプログラムが実行される 
    BLYNK_WRITE(V0) {
     runsh("tv_on.data"); } 
    
    //リモコンデータを追加する場合は以下のように、 //Vnと.dataファイルを変更する 
    BLYNK_WRITE(V1) { runsh("vol_up.data"); } 
    BLYNK_WRITE(V2) { runsh("vol_down.data"); } 
    BLYNK_WRITE(V4) { runsh("air_on.data"); } 
    BLYNK_WRITE(V5) { runsh("air_off.data"); } 
    BLYNK_WRITE(V9) { runsh("light_on.data"); } 
    BLYNK_WRITE(V10) { runsh("light_off.data"); } 
    
    void setup() { } 
    
    void loop() { Blynk.run(); } 
    int main(int argc, char* argv[]) { 
     const char *auth, *serv; uint16_t port;
     parse_options(argc, argv, auth, serv, port);
     Blynk.begin(auth, serv, port); 
     setup(); 
     while(true) { loop(); } 
     return 0; }
    

    「main.cpp」を修正した後は、もう一度 makeします。(ディレクトリ:blynk-library/linux)

    make clean all target=raspberry

    最後にblynkを実行します。(ディレクトリ:blynk-library/linux)

    ./blynk --token=トークン名

    ※トークン名はスマホ上で表示されていた値

    実行すると、下記の状態になります。

    この状態の時にスマホのボタンをタップすると、テレビの電源がつきます。

    注意事項

    ● 赤外線LEDの照射角度が狭い(30度くらい)

    ⇒キャップをつけたり、LEDを追加する方法があるようです。

    ● 赤外線が見た目で動作しているか不明

    ⇒まずは、赤等のLEDで送信プログラムが動いているかを確認することをお勧めします。

    ●  赤外線送受信するためにlircというソフトを使用できない(?)

    ⇒受信まではできましたが、送信する際に進めなくなりました。

    ⇒代わりにwiringPiをベースに作成しました。

    まとめ

    赤外線の参考になるサイトは数多くあり、非常にスムーズに進めることができました。

    また、blynkではボタンだけでなく、グラフやストリーミング、Tiwtterもあるようなので

    かなり楽しめそうなアプリです。

    思ったより、スマートリモコン(疑似)が簡単に作れて感動しました。

    いつかbluetoothを使いたい。

    [変更履歴]

    2018/01/27 動画を追加しました

    0 thoughts on “ラズパイでスマートリモコンを作ってみた(Blynk使用)”

    コメントを残す

    メールアドレスが公開されることはありません。

    CAPTCHA