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

วิธีใช้ ESP8266 รับสัญญาณอินฟาเรด ควบคุมเปิดปิด LED


วิธีใช้ ESP8266 รับสัญญาณอินฟาเรด ควบคุมเปิดปิด LED

บทความนี้เล่าวิธีต่อ IR Receiver Module KY-022 กับ ESP8266 แล้วใช้รีโมทควบคุมเปิดปิด LED 4 ดวง ดูว่าแต่ละปุ่มทำงานยังไง และปรับโค้ดให้เข้ากับรีโมทที่มี

วงจรเชื่อมต่อ ESP8266, KY-022, LED 4 ดวง บนบอร์ดทดลอง แสดงสายไฟแต่ละเส้นชัดเจน

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

อุปกรณ์จำนวน
NodeMCU ESP8266 V2 (CP2102)1 บอร์ด
Micro USB Cable1 เส้น
Power Adapter 5V 2A1 ตัว
Breadboard MB-102 830 จุด1 ชิ้น
IR Receiver Module KY-0221 ตัว
รีโมทอินฟาเรด + ถ่าน1 ชุด
LED 5mm สีแดง5 ดวง
ตัวต้านทาน 220 Ohm 1/4W10 ตัว
สาย Jumper ผู้-ผู้ 20cm40 เส้น
สาย Jumper ผู้-เมีย 20cm40 เส้น
สาย Jumper เมีย-เมีย 20cm40 เส้น

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

1. ต่อ KY-022 เข้ากับ ESP8266

KY-022ESP8266
ขา + (VCC)5V
ขา - (GND)GND
ขา S (Signal)D0

2. ต่อ LED แต่ละดวง

สำหรับ LED แต่ละตัว ต่อแบบนี้ (ขายาว = anode, ขาสั้น = cathode)

หน้าที่ESP8266
Signal ของ LED 1D1
Signal ของ LED 2D2
Signal ของ LED 3D5
Signal ของ LED 4D6
GND ร่วมผ่าน R 220 Ohm ไป GND
รายละเอียดการต่อ LED กับ R 220 Ohm บนบอร์ดทดลอง ขา LED ยาวต่อเข้า D1/D2/D5/D6 ขา LED สั้นต่อผ่าน R ไป GND

3. ต่อสายจาก ESP8266 ไปยัง Breadboard

  • เสียบ ESP8266 ลง Breadboard แล้วจ่ายไฟ 5V กับ GND ไปที่ rail ของบอร์ดทดลอง
  • ต่อ KY-022 ให้ถูกขา (+, -, S) แล้วเสียบลงบอร์ด
  • ต่อ LED 4 ดวง พร้อม R 220 Ohm ที่แต่ละขา GND
ภาพรวมวงจรบน Breadboard ถ่ายมุมบน มองเห็นตำแหน่ง ESP8266, KY-022 และ LED 4 ดวง

ติดตั้ง Library สำหรับรับสัญญาณ IR

  1. ดาวน์โหลด library IRRemote_DIYables_IRcontroller จาก MediaFire
  2. แตกไฟล์ RAR ด้วย WinRAR หรือ WinZip
  3. Copy โฟลเดอร์ที่แตกออกมาไปไว้ที่
    This PC > Documents > Arduino > libraries
  4. เปิด Arduino IDE ใหม่

โค้ด ESP8266 รับ IR และควบคุม LED

โค้ดด้านล่างนี้เป็น skeleton ที่พร้อมใช้งานได้ แต่ต้องเปลี่ยนรหัสรีโมทให้ตรงกับตัวที่ใช้อยู่

#include "DIYables_IRcontroller.h"

// === กำหนดขา ===
#define IR_PIN        D0       // ขา Signal ของ KY-022
#define LED1_PIN      D1
#define LED2_PIN      D2
#define LED3_PIN      D5
#define LED4_PIN      D6

// === กำหนดสถานะเริ่มต้น LED ===
bool led1State = LOW;
bool led2State = LOW;
bool led3State = LOW;
bool led4State = LOW;

// === เปลี่ยนรหัสเหล่านี้ให้ตรงกับรีโมทของคุณ ===
// วิธีหา: เปิด Serial Monitor แล้วกดปุ่มบนรีโมท ดูค่าที่แสดง
const uint64_t KEY_1 = 0xFF6897;   // ปุ่ม 1 เปิด LED1
const uint64_t KEY_2 = 0xFF9867;   // ปุ่ม 2 ปิด LED1
const uint64_t KEY_3 = 0xFF30CF;   // ปุ่ม 3 เปิด LED2
const uint64_t KEY_4 = 0xFF18E7;   // ปุ่ม 4 ปิด LED2
const uint64_t KEY_5 = 0xFF7A85;   // ปุ่ม 5 เปิด LED3
const uint64_t KEY_6 = 0xFF10EF;   // ปุ่ม 6 ปิด LED3
const uint64_t KEY_7 = 0xFF42BD;   // ปุ่ม 7 เปิด LED4
const uint64_t KEY_8 = 0xFF4AB5;   // ปุ่ม 8 ปิด LED4
const uint64_t KEY_9 = 0xFF52AD;   // ปุ่ม 9 เปิด LED ทั้งหมด
const uint64_t KEY_0 = 0xFF6897;   // ปุ่ม 0 ปิด LED ทั้งหมด

IRrecv irrecv(IR_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  
  // ตั้งค่าขา LED เป็น output
  pinMode(LED1_PIN, OUTPUT);
  pinMode(LED2_PIN, OUTPUT);
  pinMode(LED3_PIN, OUTPUT);
  pinMode(LED4_PIN, OUTPUT);
  
  // ปิด LED ทั้งหมดตอนเริ่ม
  digitalWrite(LED1_PIN, LOW);
  digitalWrite(LED2_PIN, LOW);
  digitalWrite(LED3_PIN, LOW);
  digitalWrite(LED4_PIN, LOW);
  
  irrecv.enableIRIn();
  Serial.println("พร้อมรับสัญญาณ IR");
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.print("รหัสที่ได้รับ: 0x");
    Serial.println(results.value, HEX);
    
    switch (results.value) {
      case KEY_1:
        led1State = HIGH;
        digitalWrite(LED1_PIN, led1State);
        Serial.println("LED 1 ON");
        break;
      case KEY_2:
        led1State = LOW;
        digitalWrite(LED1_PIN, led1State);
        Serial.println("LED 1 OFF");
        break;
      case KEY_3:
        led2State = HIGH;
        digitalWrite(LED2_PIN, led2State);
        Serial.println("LED 2 ON");
        break;
      case KEY_4:
        led2State = LOW;
        digitalWrite(LED2_PIN, led2State);
        Serial.println("LED 2 OFF");
        break;
      case KEY_5:
        led3State = HIGH;
        digitalWrite(LED3_PIN, led3State);
        Serial.println("LED 3 ON");
        break;
      case KEY_6:
        led3State = LOW;
        digitalWrite(LED3_PIN, led3State);
        Serial.println("LED 3 OFF");
        break;
      case KEY_7:
        led4State = HIGH;
        digitalWrite(LED4_PIN, led4State);
        Serial.println("LED 4 ON");
        break;
      case KEY_8:
        led4State = LOW;
        digitalWrite(LED4_PIN, led4State);
        Serial.println("LED 4 OFF");
        break;
      case KEY_9:
        led1State = led2State = led3State = led4State = HIGH;
        digitalWrite(LED1_PIN, HIGH);
        digitalWrite(LED2_PIN, HIGH);
        digitalWrite(LED3_PIN, HIGH);
        digitalWrite(LED4_PIN, HIGH);
        Serial.println("LED ALL ON");
        break;
      case KEY_0:
        led1State = led2State = led3State = led4State = LOW;
        digitalWrite(LED1_PIN, LOW);
        digitalWrite(LED2_PIN, LOW);
        digitalWrite(LED3_PIN, LOW);
        digitalWrite(LED4_PIN, LOW);
        Serial.println("LED ALL OFF");
        break;
    }
    irrecv.resume();
  }
}

จุดที่ต้องแก้ในโค้ด:

  1. เปลี่ยนค่า KEY_1 ถึง KEY_0 ให้ตรงกับรหัสจริงของรีโมทที่ใช้
  2. ถ้าจอดวงจอย่าเปลี่ยนขา LED ให้ไปแก้ LED1_PIN ถึง LED4_PIN
  3. ถ้าใช้ R ค่าอื่น (เช่น 330 Ohm) ก็เปลี่ยนได้ LED ยังติดได้แต่จะสว่างน้อยกว่า

ขั้นตอนอัพโหลดและทดสอบ

  1. เลือก Port ที่ตรงกับบอร์ด (ดูใน Device Manager)
  2. เลือก Board เป็น NodeMCU 1.0 (ESP-12E Module)
  3. อัพโหลดโค้ดไปยังบอร์ด (Sketch > Upload)
  4. เปิด Serial Monitor ตั้งค่า 9600 baud
  5. กดปุ่มรีโมทแต่ละปุ่ม ดูว่า Serial Monitor แสดงรหัสอะไร
  6. เอารหัสที่ได้ไปใส่ในโค้ดแทนที่ค่าตัวอย่าง
  7. อัพโหลดใหม่อีกครั้ง

ผลลัพธ์ที่คาดหวัง

ปุ่มผลลัพธ์
1LED 1 ติด
2LED 1 ดับ
3LED 2 ติด
4LED 2 ดับ
5LED 3 ติด
6LED 3 ดับ
7LED 4 ติด
8LED 4 ดับ
9LED ทั้ง 4 ดวงติด
0LED ทั้ง 4 ดวงดับ

สรุป

เมื่อต่อ KY-022 เข้ากับ ESP8266 แล้วใช้ library ที่ถูกต้อง ก็รับสัญญาณ IR จากรีโมทได้ไม่ยาก ข้อสำคัญคือต้องหารหัสของรีโมทที่ใช้อยู่จริงมาใส่ในโค้ด การใช้ตัวต้านทาน 220 Ohm กับ LED เป็นสิ่งจำเป็นเพื่อป้องกัน LED เสียหาย

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

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

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

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

ความคิดเห็น