Search Code

ESP32 บทช่วยสอน 29/55 - การอ่านการกดปุ่มรีโมทอินฟราเรดด้วย ESP32| ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ESP32 บทช่วยสอน 29/55 - การอ่านการกดปุ่มรีโมทอินฟราเรดด้วย ESP32| ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการตรวจจับสัญญาณอินฟราเรด (IR) โดยใช้โมดูล ESP32 และตัวรับสัญญาณ IR ที่เข้ากันได้ เมื่อเรากดปุ่มบนรีโมท ESP32 จะจดจำสัญญาณและดำเนินการตามที่กำหนด เช่น การส่งเสียงบัซเซอร์สำหรับการกดปุ่มบางปุ่ม โปรเจกต์นี้เหมาะสำหรับผู้ที่ต้องการเพิ่มความสามารถในการควบคุมระยะไกลให้กับแอปพลิเคชัน ESP32 ของตน (ในวิดีโอที่ 02:15)

รีโมท

ESP32 เป็นไมโครคอนโทรลเลอร์ที่ทรงพลังซึ่งรวมความสามารถ Wi-Fi และ Bluetooth เข้าด้วยกัน ทำให้เหมาะสำหรับการใช้งาน IoT ที่หลากหลาย ในโปรเจกต์นี้ เราจะใช้ตัวรับสัญญาณ IR เพื่อตีความสัญญาณจากรีโมทคอนโทรล การกดปุ่มจะถูกประมวลผลในโค้ด ทำให้เราสามารถดำเนินการตามคำสั่งที่ได้รับได้

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักสำหรับโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 โมดูลตัวรับสัญญาณ IR และบัซเซอร์ ESP32 ทำหน้าที่เป็นสมองของการทำงาน ประมวลผลสัญญาณที่ได้รับจากตัวรับสัญญาณ IR ตัวรับสัญญาณ IR จะตรวจจับสัญญาณอินฟราเรดจากรีโมทคอนโทรลและแปลงเป็นสัญญาณไฟฟ้าที่ ESP32 สามารถเข้าใจได้

ir_receiver_sl838

ตัวรับสัญญาณ IR โดยทั่วไปมีสามขา: VCC (ไฟเลี้ยง), GND (กราวด์) และ OUT (สัญญาณ) ขา VCC เชื่อมต่อกับแหล่งจ่ายไฟ (3.3V หรือ 5V) ในขณะที่ GND เชื่อมต่อกับกราวด์ ขา OUT ส่งสัญญาณที่ถอดรหัสแล้วไปยัง ESP32 ซึ่งสามารถใช้เพื่อกระตุ้นการทำงานต่างๆ เช่น การเปิดใช้งานบัซเซอร์เมื่อกดปุ่มเฉพาะ

รายละเอียดจาก Datasheet

ผู้ผลิต Sharp
หมายเลขชิ้นส่วน GP1UXC41
แรงดันไฟฟ้าลอจิก/IO 3.3 - 5.0 V
แรงดันไฟฟ้าจ่าย 3.3 V (ทั่วไป)
กระแสเอาต์พุต (ต่อช่อง) 20 mA (สูงสุด)
กระแสสูงสุด (ต่อช่อง) 50 mA (สูงสุด)
คำแนะนำความถี่ PWM 38 kHz
เกณฑ์แรงดันไฟฟ้าอินพุตลอจิก 0.3 Vcc (สูง), 0.2 Vcc (ต่ำ)
แรงดันตก / RDS(on) / อิ่มตัว 0.5 V (สูงสุด)
ขีดจำกัดความร้อน 85 °C (สูงสุด)
แพ็คเกจ TO-92
หมายเหตุ / รุ่นต่างๆ มีให้เลือกหลายรูปแบบการกำหนดค่า

 

  • ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟถูกต้องเพื่อหลีกเลี่ยงความเสียหาย
  • ใช้สายไฟสั้นเพื่อลดการรบกวนของสัญญาณ
  • ตรวจสอบทิศทางการวางของตัวรับสัญญาณ IR ก่อนเชื่อมต่อ
  • ยืนยันว่าแบตเตอรี่ของรีโมทคอนโทรลทำงานได้
  • ใช้ตัวต้านทาน pull-up หากจำเป็นเพื่อความเสถียร

คำแนะนำการเดินสายไฟ

ESP32-29-IR-remote-wiring

ในการเดินสายไฟตัวรับสัญญาณ IR เข้ากับ ESP32 ให้เริ่มต้นโดยระบุสามขาบนตัวรับสัญญาณ IR: VCC, GND และ OUT เชื่อมต่อขา VCC เข้ากับแหล่งจ่ายไฟ 3.3V บน ESP32 จากนั้นเชื่อมต่อขา GND เข้ากับขากราวด์ (GND) ขาใดขาหนึ่งบน ESP32 สุดท้าย เชื่อมต่อขา OUT เข้ากับขา GPIO 14 บน ESP32 ซึ่งถูกกำหนดไว้สำหรับตัวรับสัญญาณ IR ในโค้ด

ESP32-29-IR-remote-schematic

เมื่อเชื่อมต่อเสร็จแล้ว ตรวจสอบให้แน่ใจว่าการเดินสายไฟแน่นหนา หากคุณใช้เบรดบอร์ด ให้เสียบตัวรับสัญญาณ IR โดยให้ด้านแบนหันเข้าหาคุณและส่วนนูนอยู่ฝั่งตรงข้าม การวางแนวนี้จะช่วยให้คุณระบุขาได้อย่างถูกต้อง ตรวจสอบการเชื่อมต่ออีกครั้งก่อนจ่ายไฟให้ ESP32

ตัวอย่างโค้ดและคำอธิบาย

IR_receiver_lib

ติดตั้งไลบรารี IRremoteESP8266 โดย David Conran, Sebastien

ในโค้ด เรากำหนดขารับสัญญาณ IR โดยใช้ค่าคงที่ IR_RECEIVE_PIN ซึ่งตั้งค่าเป็น 14 เรายังสร้างอินสแตนซ์ของ IRrecv เพื่อจัดการสัญญาณ IR

const uint16_t IR_RECEIVE_PIN = 14;
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;

การตั้งค่านี้ช่วยให้เรารับสัญญาณจากรีโมท IR ได้ ในฟังก์ชัน setup() เราจะเริ่มต้นการสื่อสารซีเรียลและเปิดใช้งานตัวรับสัญญาณ IR

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();
}

ภายในฟังก์ชัน loop() เราจะตรวจสอบว่ามีการรับสัญญาณ IR หรือไม่ หากมีการรับ เราจะถอดรหัสค่าปุ่มและพิมพ์ไปยังซีเรียลมอนิเตอร์

if (irrecv.decode(&results)) {
    String key = decodeKeyValue(results.value);
    Serial.println(key);
    irrecv.resume(); 
}

โค้ดส่วนนี้แสดงวิธีการถอดรหัสสัญญาณที่ได้รับและพิมพ์ค่าปุ่มที่สอดคล้องกันไปยังซีเรียลมอนิเตอร์ ฟังก์ชัน decodeKeyValue() จะจับคู่สัญญาณที่ได้รับกับค่าปุ่มเฉพาะ เช่น "0", "1", "EQ" และอื่นๆ คุณสามารถหาโค้ดที่สมบูรณ์ได้ที่ด้านล่างของบทความนี้

การสาธิต / สิ่งที่คาดหวัง

เมื่อการเดินสายเสร็จสมบูรณ์และอัปโหลดโค้ดแล้ว การกดปุ่มบนรีโมทควรแสดงค่าคีย์ที่สอดคล้องกันบนซีเรียลมอนิเตอร์ ตัวอย่างเช่น การกดปุ่ม "2" จะพิมพ์ "2" ลงบนมอนิเตอร์ หากไม่รู้จักคีย์ จะคืนค่า "ERROR" ออดจะส่งเสียงเมื่อกดคีย์ที่กำหนด (เช่น "EQ") เพื่อให้ข้อเสนอแนะทันที

ควรระวังข้อผิดพลาดทั่วไป เช่น การกลับขั้วของการเชื่อมต่อ หรือการใช้ระดับแรงดันไฟฟ้าที่ไม่ถูกต้อง ตรวจสอบให้แน่ใจว่ารีโมทคอนโทรลทำงานอย่างถูกต้องและมีแบตเตอรี่ที่ใช้งานได้ก่อนทดสอบการตั้งค่าของคุณ (ในวิดีโอที่ 15:30)

ไทม์สแตมป์ของวิดีโอ

  • 00:00 เริ่มต้น
  • 2:05 แนะนำตัวรับสัญญาณอินฟราเรด
  • 4:24 อธิบายการเดินสาย
  • 6:08 อธิบายโค้ด Arduino สำหรับตัวรับสัญญาณอินฟราเรด
  • 10:06 เลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
  • 11:48 การสาธิตโปรเจกต์
  • 13:09 ออดแบบแอคทีฟเชื่อมต่อโดยตรงกับ ESP32
  • 14:40 การดำเนินการเมื่อกดคีย์
  • 15:30 โค้ด Arduino สำหรับการดำเนินการ
  • 16:54 การสาธิตการกดคีย์และออด

ภาพ

IR_receiver_lib
IR_receiver_lib
ir_receiver_sl838
ir_receiver_sl838
remote
remote
ESP32-29-IR-remote-schematic
ESP32-29-IR-remote-schematic
ESP32-29-IR-remote-wiring
ESP32-29-IR-remote-wiring
830-ESP32 Tutorial 29/55- Arduino code for fading Infrared remote
ภาษา: C++
#include <IRremoteESP8266.h>
#include <IRrecv.h>

// Define the IR receiver pin
const uint16_t IR_RECEIVE_PIN = 14;

// Create an IRrecv object
IRrecv irrecv(IR_RECEIVE_PIN);

// Create a decode_results object
decode_results results;

void setup() {
  // Start serial communication
  Serial.begin(115200);

  // Start the IR receiver
  irrecv.enableIRIn();
}

void loop() {
  // If an IR signal is received
  if (irrecv.decode(&results)) {
    String key = decodeKeyValue(results.value);
    if (key != "ERROR") {
      // Print the value of the signal to the serial monitor
      Serial.println(key);
    }
    irrecv.resume(); // Continue to receive the next signal
  }
}

// Function to decode the value of the IR signal
String decodeKeyValue(long result)
{
  switch(result){
    case 0xFF6897:
      return "0";
    case 0xFF30CF:
      return "1"; 
    case 0xFF18E7:
      return "2"; 
    case 0xFF7A85:
      return "3"; 
    case 0xFF10EF:
      return "4"; 
    case 0xFF38C7:
      return "5"; 
    case 0xFF5AA5:
      return "6"; 
    case 0xFF42BD:
      return "7"; 
    case 0xFF4AB5:
      return "8"; 
    case 0xFF52AD:
      return "9"; 
    case 0xFF906F:
      return "+"; 
    case 0xFFA857:
      return "-"; 
    case 0xFFE01F:
      return "EQ"; 
    case 0xFFB04F:
      return "U/SD";
    case 0xFF9867:
      return "CYCLE";         
    case 0xFF22DD:
      return "PLAY/PAUSE";   
    case 0xFF02FD:
      return "BACKWARD";   
    case 0xFFC23D:
      return "FORWARD";   
    case 0xFFA25D:
      return "POWER";   
    case 0xFFE21D:
      return "MUTE";   
    case 0xFF629D:
      return "MODE";       
    case 0xFFFFFFFF:
      return "ERROR";   
    default :
      return "ERROR";
  }
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

แผ่นข้อมูล (pdf)