กลับหน้าหลัก
views
วิธีใช้ ESP32 รับสัญญาณ IR ควบคุมเปิดปิด LED ด้วย Remote
Last updated on

วิธีใช้ ESP32 รับสัญญาณ IR ควบคุมเปิดปิด LED ด้วย Remote


วิธีใช้ ESP32 รับสัญญาณ IR ควบคุมเปิดปิด LED ด้วย Remote

บทความนี้จะสอนใช้งาน ESP32 ร่วมกับโมดูลรับสัญญาณอินฟาเรด KY-022 ควบคุมหลอด LED 4 ดวงด้วยรีโมท หลักการคือเมื่อกดปุ่มบนรีโมท ESP32 จะรับสัญญาณ IR แล้วสั่งเปิด-ปิด LED ตามปุ่มที่กด

![วงจร ESP32 ต่อกับ KY-022 และ LED 4 ดวง บน breadboard]

อุปกรณ์ที่ต้องเตรียม

อุปกรณ์จำนวน
NodeMCU ESP321 บอร์ด
Infrared Receiver Module KY-0221 ตัว
รีโมทอินฟาเรด + ถ่าน1 ชุด
LED 5mm สีแดง4 ดวง
ตัวต้านทาน 220 Ohm4 ตัว
Breadboard MB-102 830 จุด1 อัน
สาย Jumper ผู้-ผู้, ผู้-เมีย, เมีย-เมียอย่างน้อย 10 เส้น
สาย Micro USB1 เส้น

วิธีต่อวงจร ESP32 กับ KY-022 และ LED

ขา KY-022 ต่อเข้า ESP32

KY-022ESP32
+ (VCC)5V
- (GND)GND
S (Signal)D23

ขา LED แต่ละดวงต่อเข้า ESP32

LEDESP32
LED 1 ขายาว (Anode)D22
LED 2 ขายาว (Anode)D21
LED 3 ขายาว (Anode)D19
LED 4 ขายาว (Anode)D18
LED ทุกดวงขาสั้น (Cathode)ผ่าน R 220 Ohm เข้า GND

![breadboard layout แสดงตำแหน่ง LED 4 ดวง ตัวต้านทาน และสายไฟ]

ติดตั้ง Library สำหรับ KY-022

  1. ดาวน์โหลดไฟล์ IRremote_DIYables_IRcontroller จาก Mediafire ที่ระบุในต้นฉบับ
  2. แตกไฟล์ด้วย WinRAR หรือ WinZip
  3. นำโฟลเดอร์ไปวางใน Documents/Arduino/libraries
  4. เปิด Arduino IDE ใหม่ แล้วเช็คว่า Library ติดตั้งแล้วโดยไปที่ Sketch > Include Library

หมายเหตุ: ถ้าต้องการใช้ Library ตัวอื่น เช่น IRremote ของ Arduino ก็ใช้ได้ แต่โค้ดด้านล่างเขียนสำหรับ DIYables_IRcontroller

โค้ด ESP32 รับค่า IR ควบคุม LED

โค้ดนี้เป็น Skeleton ที่ยังต้องแก้ไขค่า Code ของรีโมทที่คุณมีจริง ขั้นตอนอยู่ด้านล่าง

#include "DIYables_IRcontroller.h"

// ====== กำหนดขาที่ต่อกับ LED ======
#define LED_1 22
#define LED_2 21
#define LED_3 19
#define LED_4 18

// ====== กำหนดขา Signal ของ KY-022 ======
#define IR_RECEIVER_PIN 23

// สร้าง object สำหรับ IR Receiver
DIYables_IRcontroller irController(IR_RECEIVER_PIN, LED_BUILTIN);

// ตัวแปรเก็บสถานะ LED
bool led1State = false;
bool led2State = false;
bool led3State = false;
bool led4State = false;

void setup() {
  Serial.begin(9600);
  
  // ตั้งค่าขา LED เป็น Output
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  pinMode(LED_3, OUTPUT);
  pinMode(LED_4, OUTPUT);
  
  // ปิด LED ทั้งหมดเริ่มต้น
  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  digitalWrite(LED_3, LOW);
  digitalWrite(LED_4, LOW);
  
  // เริ่มต้น IR Controller
  irController.begin();
  
  Serial.println("ESP32 IR LED Control Ready");
  Serial.println("กดปุ่มรีโมทแล้วดูค่าที่นี่");
}

void loop() {
  // อ่านค่าจากรีโมท
  Key_t key = irController.readKey();
  
  if (key != Key_t::NONE) {
    // TODO: แก้ไขค่า KEY_XXX ให้ตรงกับรีโมทจริงของคุณ
    // ดูค่าจาก Serial Monitor เมื่อกดแต่ละปุ่ม
    
    if (key == Key_t::KEY_1) {  // ต้องแก้ให้ตรงกับรีโมทจริง
      led1State = !led1State;
      digitalWrite(LED_1, led1State ? HIGH : LOW);
      Serial.println(led1State ? "LED 1 ON" : "LED 1 OFF");
    }
    
    else if (key == Key_t::KEY_2) {  // ต้องแก้ให้ตรงกับรีโมทจริง
      led1State = false;
      digitalWrite(LED_1, LOW);
      Serial.println("LED 1 OFF");
    }
    
    else if (key == Key_t::KEY_9) {  // ต้องแก้ให้ตรงกับรีโมทจริง
      // เปิด LED ทั้ง 4 ดวง
      digitalWrite(LED_1, HIGH);
      digitalWrite(LED_2, HIGH);
      digitalWrite(LED_3, HIGH);
      digitalWrite(LED_4, HIGH);
      led1State = led2State = led3State = led4State = true;
      Serial.println("ALL LED ON");
    }
    
    else if (key == Key_t::KEY_0) {  // ต้องแก้ให้ตรงกับรีโมทจริง
      // ปิด LED ทั้ง 4 ดวง
      digitalWrite(LED_1, LOW);
      digitalWrite(LED_2, LOW);
      digitalWrite(LED_3, LOW);
      digitalWrite(LED_4, LOW);
      led1State = led2State = led3State = led4State = false;
      Serial.println("ALL LED OFF");
    }
    
    // สามารถเพิ่มปุ่ม 3-8 ควบคุม LED 2-4 ได้ตามต้องการ
  }
}

วิธีหาค่า Code จากรีโมทจริงของคุณ

สำคัญ: ค่าปุ่มรีโมทแต่ละตัวไม่เหมือนกัน ต้องทำตามขั้นตอนนี้

  1. อัพโหลดโค้ดลงบอร์ด เปิด Serial Monitor ที่ 9600 baud
  2. กดปุ่มรีโมททีละปุ่ม สังเกตค่าที่แสดงใน Serial Monitor
  3. นำค่าที่ได้มาใส่ในโค้ดแทน KEY_XXX
  4. อัพโหลดโค้ดใหม่อีกครั้ง

![Serial Monitor แสดงค่า Hex ของปุ่มรีโมทเมื่อกดแต่ละปุ่ม]

�ขั้นตอนอัพโหลดโค้ด

  1. เลือก Port ที่ ESP32 เชื่อมต่อ (Tools > Port)
  2. เลือก Board เป็น ESP32 Dev Module (Tools > Board > ESP32 Arduino)
  3. กดปุ่ม Upload (Ctrl+U)
  4. รอจนขึ้น Done uploading
  5. เปิด Serial Monitor แล้วกดรีโมททดสอบ

สรุปฟังก์ชันปุ่มรีโมท

ปุ่มฟังก์ชัน
1สลับเปิด/ปิด LED 1
2ปิด LED 1
3(เพิ่มได้เอง) ควบคุม LED 2
4(เพิ่มได้เอง) ควบคุม LED 2
5-8(เพิ่มได้เอง) ควบคุม LED 3-4
9เปิด LED ทั้ง 4 ดวง
0ปิด LED ทั้ง 4 ดวง

ปัญหาที่พบบ่อย

รีโมทไม่ทำงาน

  • ตรวจสอบว่าถ่านใส่ถูกขั้ว (+/-)
  • ลองเปลี่ยนถ่านใหม่
  • เช็คสายต่อ KY-022 ว่าต่อถูกขา

Serial Monitor ไม่แสดงค่า

  • เช็คว่าเลือก Baud Rate ถูกต้อง (9600)
  • เช็คว่าเลือก Port ถูกต้อง

LED ไม่ติด

  • ตรวจสอบขายาว-สั้นของ LED ถูกต้อง
  • เช็คว่าต่อตัวต้านทานแล้ว

อยากทำโปรเจคแบบนี้?

รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน

หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก

จ้างทำโปรเจคเลย

ความคิดเห็น