2026年1月20日 星期二

WOKWI IR_紅外線收發模組

 WOKWI IR_紅外線收發模組

模擬圖中接線如下:

  1. IR 接收器

    • VCC 必須接到 ESP32 的 3.3V5V

    • 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(); // 準備接收下一組訊號
  }
}

沒有留言:

張貼留言

經由MQTT協定的2個WOKWI ESP32 雙向通訊 (ESP32 to ESP32 MQTT Communication )

 經由MQTT協定的2個WOKWI ESP32 雙向通訊  (ESP32  to ESP32 MQTT Communication ) 使用兩個 ESP32 建立一個遠端控制系統。 MQTT Broker: mqtt-dashboard.com Topic (主題): ale...