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 โดยทั่วไปมีสามขา: 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 หากจำเป็นเพื่อความเสถียร
คำแนะนำการเดินสายไฟ

ในการเดินสายไฟตัวรับสัญญาณ IR เข้ากับ ESP32 ให้เริ่มต้นโดยระบุสามขาบนตัวรับสัญญาณ IR: VCC, GND และ OUT เชื่อมต่อขา VCC เข้ากับแหล่งจ่ายไฟ 3.3V บน ESP32 จากนั้นเชื่อมต่อขา GND เข้ากับขากราวด์ (GND) ขาใดขาหนึ่งบน ESP32 สุดท้าย เชื่อมต่อขา OUT เข้ากับขา GPIO 14 บน ESP32 ซึ่งถูกกำหนดไว้สำหรับตัวรับสัญญาณ IR ในโค้ด
เมื่อเชื่อมต่อเสร็จแล้ว ตรวจสอบให้แน่ใจว่าการเดินสายไฟแน่นหนา หากคุณใช้เบรดบอร์ด ให้เสียบตัวรับสัญญาณ IR โดยให้ด้านแบนหันเข้าหาคุณและส่วนนูนอยู่ฝั่งตรงข้าม การวางแนวนี้จะช่วยให้คุณระบุขาได้อย่างถูกต้อง ตรวจสอบการเชื่อมต่ออีกครั้งก่อนจ่ายไฟให้ ESP32
ตัวอย่างโค้ดและคำอธิบาย
ติดตั้งไลบรารี 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 การสาธิตการกดคีย์และออด
#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";
}
}
Common Course Links
Common Course Files
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อีเบย์
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารESP32 Tutorial 23/55- SunFounder doc page for IR receiverdocs.sunfounder.com
ไฟล์📁
แผ่นข้อมูล (pdf)
-
IR-remote_TL1838-Infrared-Receiver-datasheet
robojax-IR-remote_TL1838-Infrared-Receiver-datasheet.pdf0.46 MB