wiki:ESP-IR

Version 23 (modified by kishida, 6 years ago) ( diff )

--

ESPr IR赤外線リモコンの使い方


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

1.電源

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

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

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

FTDI USBシリアル変換アダプターからはESPr IR 赤外線リモコンに給電しないようになっています。プログラムの書き換え時は基板本体の電源用Micro USBケーブルと、FTDI USBシリアル変換アダプター用のMicro USBケーブルをご用意ください。
プログラムを書き換えるためにはESPr IR 赤外線リモコン上のジャンパソケットをPROGと書かれた側に接続してください。書き込んだプログラムを実行する場合にはRUNと書かれたほうに接続してください。ジャンパソケットをどちらにも繋がなかった場合は実行モードになります。

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

注意 2017年9月頃より、メーカー側でモジュールの仕様変更がありました。変更後のモジュールでは、FLASHメモリの容量の選択を以下のように変更して書き込んでください。

  • 変更前: 4M(3M SPIFFS)
  • 変更後: 2M(1M SPIFFS)

変更に関するスイッチサイエンスブログの記事はこちら

3.赤外線LED

赤外線LEDは4つ実装されています。すべてGPIO14に接続されています。赤外線を基板の水平方向に照射するようにLEDは実装されています。LEDの向きを変えたい場合やケースにLEDを取り付けたい場合などは砲弾型の赤外線LEDをLED1に取り付けることも可能です。同時に電流制限用抵抗もR12に取り付けてください。追加する赤外線LEDに流す電流は大きくとも100mA程度にしてください。
例えば当社で販売しているSIR-34ST3F赤外線LEDをつける場合、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>
#include <IRsend.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.