接收红外信号VS1838B - Arduino开发ESP8266(NodeMcu)学习记录

 2021-1-17      esp8266 

所需硬件

VS1838B 红外接收头

ESP8266 开发板 (NodeMcu)

红外信号遥控器

杜邦线 x3

第三方库

IRremoteESP8266

下载地址:https://github.com/crankyoldgit/IRremoteESP8266

红外接收头图片

线路图

实物图

代码

/**
  作者: Raikay (raikay.com)
  时间: 2021/01/17
  说明: NodeMcu使用红外接收头接收红外信号
  NodeMcu -   VS1838B
  3v3     -    VCC
  GND     -    GND
  D5      -    OUT
**/

#include <Arduino.h>
#include <IRrecv.h>
#include <IRremoteESP8266.h>
#include <IRac.h>
//#include <IRtext.h>
#include <IRutils.h>

// 定义接收信号的引脚GPIO14,即NodeMcu的D5
const uint16_t kRecvPin = 14;

// (接收引脚,接收信号大小,超时时间)
IRrecv irrecv(kRecvPin, 1024, 50, true);

// 存储结果
decode_results results;

void setup() {

  Serial.begin(115200);

#if DECODE_HASH
  // 过滤未知信号值
  irrecv.setUnknownThreshold(12);
#endif
  irrecv.setTolerance(kTolerance);
  // 启动接收器
  irrecv.enableIRIn();
}

void loop() {
  // 是否收到消息
  if (irrecv.decode(&results)) {
    
    // 接收到的编码
    Serial.print("输出编码:");
    serialPrintUint64(results.value, HEX);
    Serial.println();
    
    // 协议和编码
    Serial.println("输出协议和编码:");
    Serial.println(resultToHumanReadableBasic(&results));
    yield();

    // 说明
    String description = IRAcUtils::resultAcToString(&results);
    Serial.println("输出说明:");
    if (description.length())
    {
      Serial.println("Mesg Desc.: " + description);
    } else
    {
      Serial.println("Mesg Desc.: 无");
    }

    // 原数据
    Serial.println("输出原数据:");
    Serial.println(resultToSourceCode(&results));
    Serial.println("------------------------分割线------------------------");
    yield();
  }
}

使用的红外遥控器

对应的编码:

关闭:FFA25D MENU:FFE21D
TEST:FF22DD +:FF02FD 返回:FFC23D
|«:FFE01F >:FFA857 »|:FF906F
0:FF6897 -:FF9867 c:FFB04F
1:FF30CF 2:FF18E7 3:FF7A85
4:FF10EF 5:FF38C7 6:FF5AA5
7:FF42BD 8:FF4AB5 9:FF52AD

接收结果

上传程序之后直接打开串口监视器查看即可。

可以看出来,Code是FF02FDFF906F,协议是NEC,现在市面上NEC是使用比较多的一种协议。

rawData是原数据,在无法解码的情况,可以使用原数据直接发出,同样可以控制。

通过红外线信号控制板载LED灯代码

/**
  作者: Raikay (raikay.com)
  时间: 2021/01/17
  说明: NodeMcu使用红外接收头接收红外信号
  NodeMcu -   VS1838B
  3v3     -    VCC
  GND     -    GND
  D5      -    OUT
**/

#include <Arduino.h>
#include <IRrecv.h>
#include <IRremoteESP8266.h>
//#include <IRac.h>
//#include <IRtext.h>

#include <IRutils.h>

// 定义接收信号的引脚GPIO14,即NodeMcu的D5
const uint16_t kRecvPin = 14;

// (接收引脚,接收信号大小,超时时间)
IRrecv irrecv(kRecvPin, 1024, 50, true);

// 存储结果
decode_results results;


void setup() {

  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);

#if DECODE_HASH
  // 过滤未知信号值
  irrecv.setUnknownThreshold(12);
#endif
  irrecv.setTolerance(kTolerance);
  // 启动接收器
  irrecv.enableIRIn();
}



void loop() {
  // 是否收到消息
  if (irrecv.decode(&results)) {
    String codeStr = uint64ToString(results.value, HEX);

    //信号Code等于FFA857 打开Led
    if (codeStr ==  "FFA857")
    {
      Serial.println("打开Led");
      digitalWrite(LED_BUILTIN, LOW);
    }
    ///信号Code等于FFA25D 关闭Led
    if (codeStr == "FFA25D")
    {
      Serial.println("关闭Led");
      digitalWrite(LED_BUILTIN, HIGH);
    }
    yield();
  }
}

效果视频

其他红外信号接收结果

格力空调 红外遥控器 接收结果

协议:GREE

编码:0x3C0E2050102000700x3C0E2050102000700x3C0D205010200060

美的空调 省电星 红外接收结果

长虹电视 红外遥控器接收结果

参数图片