2026年1月20日 星期二

WOKWI IR_紅外線收發模組

 WOKWI IR_紅外線收發模組

模擬圖中接線如下:

  1. IR 接收器:

    • VCC 必須接到 ESP32 的 3.3V 或 5V。

    • GND 接到 GND。

    • DAT (或 OUT) 必須接到 GPIO 2 (對應程式中的 receiverPin)。

  2. LCD 1602 (I2C):

    • SDA 接到 GPIO 21。

    • SCL 接到 GPIO 22。

    • VCC 接到 5V (ESP32 有些腳位是 3.3V,若 LCD 沒顯示請改接 5V)。

    • GND 接到 GND。




#include <Arduino.h>
#include <IRremote.hpp>        // 注意:新版本建議使用 .hpp
#include <LiquidCrystal_I2C.h>

// 定義接腳 (對應您的接線圖)
#define IR_RECEIVE_PIN 2       // 紅外線訊號接到 GPIO 2
#define I2C_ADDR    0x27
#define LCD_COLUMNS 16
#define LCD_LINES   2

// 建立 LCD 物件 (SDA 預設為 21, SCL 預設為 22)
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

void setup() {
  Serial.begin(115200);
 
  // 初始化 LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("ESP32 IR System");

  // 初始化紅外線接收
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  Serial.println("IR Receiver Initialized");
}

void lcdPrint(const char* text, uint16_t cmd) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Button: ");
  lcd.print(text);
  lcd.setCursor(0, 1);
  lcd.print("Code: ");
  lcd.print(cmd);
}

void translateIR() {
  // 取得收到的 Command (NEC 格式)
  uint16_t cmd = IrReceiver.decodedIRData.command;
  Serial.print("Received command: ");
  Serial.println(cmd);

  switch (cmd) {
    case 162: lcdPrint("POWER", cmd); break;
    case 226: lcdPrint("MENU",  cmd); break;
    case 34:  lcdPrint("TEST",  cmd); break;
    case 2:   lcdPrint("PLUS",  cmd); break;
    case 194: lcdPrint("BACK",  cmd); break;
    case 224: lcdPrint("PREV.", cmd); break;
    case 168: lcdPrint("PLAY",  cmd); break;
    case 144: lcdPrint("NEXT",  cmd); break;
    case 104: lcdPrint("num: 0", cmd); break;
    case 152: lcdPrint("MINUS", cmd); break;
    case 176: lcdPrint("key: C", cmd); break;
    case 48:  lcdPrint("num: 1", cmd); break;
    case 24:  lcdPrint("num: 2", cmd); break;
    case 122: lcdPrint("num: 3", cmd); break;
    case 16:  lcdPrint("num: 4", cmd); break;
    case 56:  lcdPrint("num: 5", cmd); break;
    case 90:  lcdPrint("num: 6", cmd); break;
    case 66:  lcdPrint("num: 7", cmd); break;
    case 74:  lcdPrint("num: 8", cmd); break;
    case 82:  lcdPrint("num: 9", cmd); break;
    default:
      lcd.clear();
      lcd.print("Other: ");
      lcd.print(cmd);
  }
}

void loop() {
  if (IrReceiver.decode()) {
    translateIR();
    IrReceiver.resume(); // 準備接收下一組訊號
  }
}

沒有留言:

張貼留言

零成本學 ESP32!在 Wokwi 打造你的第一個微型氣象站 (ESP32 + DHT22 + 1602 LCD)

零成本學 ESP32!在 Wokwi 打造你的第一個微型氣象站(溫度 濕度) (ESP32 + DHT22 + 1602 LCD) 想學物聯網(IoT)與 ESP32 電子實作,卻擔心接線與電壓規範搞砸嗎?透過強大的線上模擬器 Wokwi ,我們不需要花費任何硬體費用,打開瀏覽器...