wiki:ESP-IR

Version 15 (modified by soumura, 8 years ago) ( diff )

--

ESP-WROOM-02 赤外線リモコンボードの使い方


ESP-WROOM-02 Wi-Fiモジュールを搭載した赤外線リモコンボードの使い方です。
Wi-Fi経由でエアコンやテレビなどの赤外線リモコン対応機器をコントロールすることができます。

1.電源

主に電源はMicro USBケーブル(DC 5 V)を使用します。その他に下図の赤枠部分に電池などの電源(3.7~6 V)をつなげることもできます。

2.プログラムの書き換え

プログラムを書き換えるためには別売のFTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)が必要です。
下図のように接続してください。FTDI USBシリアル変換アダプターは3.3V動作になるようにジャンパソケットを3.3V側に接続してください。

FTDI USBシリアル変換アダプターからの給電ではESP-WROOM-02赤外線リモコンボードに電源が入らないようになっています。裏面のソルダージャンパ(SJ1)をショートさせることでFTDIからの給電が可能になりますが、FTDI USBシリアル変換アダプターの3.3V出力の最大電流は50mAでESP-WROOM-02の動作には不足しています。また、不適切な電圧が加わる事を防ぐためSJ1は標準で切り離されています。FTDI USBシリアル変換アダプターとESP-WROOM-02 赤外線リモコンボード用に二本のMicro USBケーブルをご用意ください。

プログラムを書き換えるためにはESP-WROOM-02 赤外線リモコンボード上のジャンパソケットをPROGと書かれた側に接続してください。書き込んだプログラムを実行する場合にはRUNと書かれたほうに接続してください。ジャンパソケットをどちらにも繋がなかった場合は実行モードになります。

ここではArduino IDEを使用して開発する際の設定方法を説明します。Arduino IDEにESP8266ボードの開発環境を整える方法はこちらを参照してください。
Arduino IDE 1.6.8 と ESP8266 Core for Arduino Ver 2.2.0を使用しました。(2016.06.01)
ボードの設定を下図のようにしてスケッチを書き込んでください。

3.赤外線LED

赤外線LEDは4つ実装されています。すべてGPIO14に接続されています。赤外線を基板の水平方向に照射するようにLEDは実装されています。LEDの向きを変えたい場合やケースにLEDを取り付けたい場合などは砲弾型の赤外線LEDをLED1に取り付けることも可能です。同時に電流制限用抵抗もR12に取り付けてください。追加する赤外線LEDに流す電流は大きくとも100mA程度にしてください。
例えば当社で販売しているSIR-34ST3F赤外線LEDをつける場合、絶対最大定格の順電流が100 mAなので50 mAくらいで発光させるとすると39 Ω(1/4 W)の抵抗をつける必要があります。また、赤外線LEDは必ず38 kHzでパルス発光させてください。

4.赤外線リモコン受信モジュール

使用する機器のリモコンのコードを調べるために、赤外線リモコン受信モジュールを搭載しました。GPIO5に接続しています。また、使用するライブラリの変化に対応できるよう、赤外線が照射されたときにGPIO5がハイになるのかローになるのかをソルダージャンパ(SJ2)で選択できるようにしました。初期設定では38kHzに変調された赤外線が照射されるとGPIO5がハイになるようになっています。

5.サンプルスケッチ

ブラウザからWi-Fi経由でTVの電源ON/OFFをしてみます。テレビはSHARP AQUOS LC-32H20 リモコンはGB129WJSAを使用しました。
ここではリモコンのコード解析のためにIRremoteESP8266というライブラリを使用しました。


まずはリモコンの電源ボタンのコードを知る必要がありますので、IRremoteESP8266ライブラリのサンプルスケッチIRrecvDumpを使います。
使用しているピンの番号がサンプルスケッチのままだと2番ピンになっていますので5番ピンに変更して書き込みます。

シリアルコンソールを開き、リモコンを赤外線リモコン受信モジュールに向けて電源ボタンを押します。
すると下図の様にリモコンのコードが表示されます。SHARPのリモコンなのですがPANASONICと表示されていますね。ライブラリとサンプルスケッチを確認してみるとSHARPリモコンの判定は未実装の様でした。(2016/06/13現在)ここではライブラリの中身の話は本筋ではありませんので、とりあえずこのまま表示された情報を使用します。

電源ボタンのコードが判明したので、次のようなスケッチを作成します。電源ボタンと音量の上下ボタンを実装しました。サンプルスケッチ(GitHub)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <IRremoteESP8266.h>

const char *ssid = "ssid";
const char *password = "password";

ESP8266WebServer server ( 80 );
IRsend irsend(14);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  irsend.begin();
  Serial.println("");

  //wait for connection
  while( WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.on("/",handleRoot);
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
}

void handleRoot() {
  char temp[800];
  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;

  char message[20];
  String(server.arg(0)).toCharArray(message,20);

  if(server.arg(0).indexOf("Power") != -1){
    Serial.println("Power");
    irsend.sendPanasonic(0x555A,0xF148688B);
    delay(10);
    irsend.sendPanasonic(0x555A,0xF148688B);
  }
  else if(server.arg(0).indexOf("Vol UP") != -1){
    Serial.println("Vol UP");
    irsend.sendPanasonic(0x555A,0xF148288F);
  }
  else if(server.arg(0).indexOf("Vol Down") != -1){
    Serial.println("Vol Down");
    irsend.sendPanasonic(0x555A,0xF148A887);
  }
  
  snprintf ( temp, 800,

"<html>\
  <head>\
    <title>ESPr IR Demo</title>\
    <style>\
      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
    </style>\
  </head>\
  <body>\
    <h1>ESPr IR DEMO</h1>\
    <p>Uptime: %02d:%02d:%02d</p>\
    <p>BUTTON :%s</p>\
    <form action=\"/\" method=\"post\">\
      <input type=\"submit\" name=\"button1\" value=\"Power\" style=\"width:30%; height:100px\">\
      <input type=\"submit\" name=\"button2\" value=\"Vol UP\" style=\"width:30%; height:100px\">\
      <input type=\"submit\" name=\"button3\" value=\"Vol Down\" style=\"width:30%; height:100px\">\
    </form>\
  </body>\
</html>",

    hr, min % 60, sec % 60 ,message
    
  );
  server.send ( 200, "text/html", temp );
}

void handleNotFound() {

  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for ( uint8_t i = 0; i < server.args(); i++ ) {
    message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
  }
  server.send ( 404, "text/plain", message );

}

シリアルコンソールを開くとESPr IRのIPアドレスが表示されますので、同じネットワークにWi-Fi接続しているスマートフォンのブラウザのURLにIPアドレスを入力します。
次のようなボタンが表示されますので、Powerボタンを押すとテレビの電源が入ります。このようにして赤外線リモコンが使える機器をWi-Fi経由でコントロールすることができます。

Attachments (14)

Note: See TracWiki for help on using the wiki.