วิธีใช้ ESP32 รับสัญญาณ IR ควบคุมเปิดปิด LED ด้วย Remote
วิธีใช้ ESP32 รับสัญญาณ IR ควบคุมเปิดปิด LED ด้วย Remote
บทความนี้จะสอนใช้งาน ESP32 ร่วมกับโมดูลรับสัญญาณอินฟาเรด KY-022 ควบคุมหลอด LED 4 ดวงด้วยรีโมท หลักการคือเมื่อกดปุ่มบนรีโมท ESP32 จะรับสัญญาณ IR แล้วสั่งเปิด-ปิด LED ตามปุ่มที่กด
![วงจร ESP32 ต่อกับ KY-022 และ LED 4 ดวง บน breadboard]
อุปกรณ์ที่ต้องเตรียม
| อุปกรณ์ | จำนวน |
|---|---|
| NodeMCU ESP32 | 1 บอร์ด |
| Infrared Receiver Module KY-022 | 1 ตัว |
| รีโมทอินฟาเรด + ถ่าน | 1 ชุด |
| LED 5mm สีแดง | 4 ดวง |
| ตัวต้านทาน 220 Ohm | 4 ตัว |
| Breadboard MB-102 830 จุด | 1 อัน |
| สาย Jumper ผู้-ผู้, ผู้-เมีย, เมีย-เมีย | อย่างน้อย 10 เส้น |
| สาย Micro USB | 1 เส้น |
วิธีต่อวงจร ESP32 กับ KY-022 และ LED
ขา KY-022 ต่อเข้า ESP32
| KY-022 | ESP32 |
|---|---|
| + (VCC) | 5V |
| - (GND) | GND |
| S (Signal) | D23 |
ขา LED แต่ละดวงต่อเข้า ESP32
| LED | ESP32 |
|---|---|
| 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
- ดาวน์โหลดไฟล์ IRremote_DIYables_IRcontroller จาก Mediafire ที่ระบุในต้นฉบับ
- แตกไฟล์ด้วย WinRAR หรือ WinZip
- นำโฟลเดอร์ไปวางใน
Documents/Arduino/libraries - เปิด 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 จากรีโมทจริงของคุณ
สำคัญ: ค่าปุ่มรีโมทแต่ละตัวไม่เหมือนกัน ต้องทำตามขั้นตอนนี้
- อัพโหลดโค้ดลงบอร์ด เปิด Serial Monitor ที่ 9600 baud
- กดปุ่มรีโมททีละปุ่ม สังเกตค่าที่แสดงใน Serial Monitor
- นำค่าที่ได้มาใส่ในโค้ดแทน
KEY_XXX - อัพโหลดโค้ดใหม่อีกครั้ง
![Serial Monitor แสดงค่า Hex ของปุ่มรีโมทเมื่อกดแต่ละปุ่ม]
�ขั้นตอนอัพโหลดโค้ด
- เลือก Port ที่ ESP32 เชื่อมต่อ (Tools > Port)
- เลือก Board เป็น ESP32 Dev Module (Tools > Board > ESP32 Arduino)
- กดปุ่ม Upload (Ctrl+U)
- รอจนขึ้น Done uploading
- เปิด 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 แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย