WeMosを使ってみる

赤外線リモコン送受信


比較的使う機会が多い赤外線リモコンの送受信を試してみました。
赤外線の送受信には、こちらの ライブラリ を使いました。
なお、このライブラリ、ものすごい勢いで更新されています。

まず、受信の確認ですが、結線は以下の通りで、使用した赤外線受信機は3.3V駆動が可能なTL1838です。


WeMosのスケッチはライブラリのサンプルスケッチ(IRrecvDump)のままです。
なお、注意点としてリモコン入力に使えるのはGPIO_2 GPIO_4 GPIO_5 GPIO12 GPIO_13 GPIO_14だけです。
GPIO_15 GPIO_16はなぜか使えません。

以下はテレビリモコンの電源ボタンを押した結果です。
それらしい値(210704FB)が読めています。
FFFFFFFFはNECフォーマットのリピートコードです。




注意点としてNECフォーマットの場合、メーカコード(先頭の1バイト)が0x00の場合
NECフォーマット(32Bit)にもかかわらず、6文字(24Bit)しか表示されません。

正解は「0x00FFxxxx」ですが、ArduinoのSerial.print()で16進表示したとき、先頭の00は表示することができま せん。
Serial.printf()を使えば"%08x"の書式で先頭の00を表示することができます。

  serialPrintUint64(results->value, 16); // 先頭の0は表示されない

  Serial.printf(" %08X\n",results->value); // 先頭の0が表示される

NECフォーマットには以下の規則があるので、正解のコードは簡単に求めることができます。
2文字目は1文字目の反転コード
4文字目は3文字目の反転コード
安価なリモコンはメーカコード(先頭の1バイト)が0x00の物が多いです。





受信したリモコンコードが正しいかどうか確認するために、リモコン送信をしてみました。
結線は以下の通りで、1.35V 100mAの赤外線LEDを使いましたが、抵抗は不用かもしれません。

WeMosのスケッチは以下の通りです。
私の持っているテレビのリモコンは1つのボタンでON/OFFのトグル動作をする仕様です。
/*
 * IRremoteESP8266: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to ESP8266 pin 0.
 * Version 0.1 June, 2015
 * Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009, Copyright 2009 Ken Shirriff, http://arcfn.com
 */

#include <IRremoteESP8266.h>
#include <IRsend.h>

int SEND_PIN = 16;

IRsend irsend(SEND_PIN); //an IR led is connected to GPIO pin 0

void setup()
{
  irsend.begin();
  Serial.begin(9600);
}

void loop() {
  Serial.println("ON");
  irsend.sendNEC(0x210704FB, 36);
  delay(5000);
  Serial.println("OFF");
  irsend.sendNEC(0x210704FB, 36);
  delay(5000);
}

このスケッチでテレビがON/OFFすることを確認しました。

続く...