ESP32 - IR 리모컨 제어 | ESP32 - IR Remote Control

당신은 아마도 집에서 TV나 에어컨과 같은 기기를 사용할 때 적외선 리모컨, 또는 IR 리모컨이라고도 불리는 것을 마주친 적이 있을 것입니다... 이 가이드에서는 적외선(IR) 리모컨과 적외선 수신기를 사용하여 ESP32를 제어하는 방법을 배울 것입니다. 자세히 말하자면, 다음을 배울 것입니다:

IR controller - IR receiver - ESP32

준비물

1×ESP-WROOM-32 Dev Module 쿠팡 | Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×IR Remote Controller and Receiver Kit Amazon
1×CR2025 Battery Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) ESP32 Screw Terminal Adapter 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

IR 리모컨에 관하여

IR 컨트롤 시스템에는 두 가지 구성 요소가 있습니다: IR 리모컨과 IR 수신기입니다.

  • IR 리모컨은 적외선 신호를 사용하여 명령을 보냅니다.
  • IR 수신기는 이러한 신호를 포착하여 해석함으로써 장치를 제어합니다.

IR 키트는 일반적으로 위에서 언급한 두 가지 구성 요소로 구성됩니다: IR 리모컨과 IR 수신기.

IR 리모컨

IR 리모컨은 적외선 신호를 발산하는 휴대용 장치입니다. 여러 버튼이 있는 키패드로 설계되었습니다:

  • 원격 제어기의 각 버튼은 특정 기능이나 명령에 할당됩니다.
  • 버튼을 누르면, 원격 제어기는 눌린 버튼과 연결된 고유한 코드나 패턴을 포함하는 적외선 신호를 방출합니다.
  • 이러한 적외선 신호는 적외선 스펙트럼 내에 있으며 인간의 눈에는 보이지 않습니다.
IR controller
image source: diyables.io

IR 수신기

IR 리시버 모듈은 리모컨이 발신하는 적외선 신호를 감지하고 수신하는 센서입니다.

적외선 수신기는 들어오는 적외선 신호를 감지하고 그것을 리모컨에 눌린 버튼을 나타내는 코드(명령)로 변환합니다.

IR 리시버는 센서 또는 모듈일 수 있습니다. 다음 선택지를 사용할 수 있습니다:

  • IR 리시버 모듈만
  • IR 리시버 센서만
  • IR 리시버 센서 + 어댑터
IR Receiver sensor module
image source: diyables.io
IR Receiver sensor adapter
image source: diyables.io

IR 수신기 핀배열

IR 수신기 모듈 또는 센서는 세 개의 핀이 있습니다:

  • VCC 핀: 이 핀을 ESP32의 3.3V 또는 5V 핀 또는 외부 전원원에 연결하세요.
  • GND 핀: 이 핀을 ESP32의 GND 핀 또는 외부 전원원에 연결하세요.
  • OUT(출력) 핀: 이 핀은 IR 수신 모듈의 출력 핀입니다. ESP32의 디지털 입력 핀에 연결됩니다.

작동 원리

사용자가 IR 리모컨의 버튼을 누를 때

  • IR 리모컨은 특정 프로토콜을 통해 버튼에 해당하는 명령을 적외선 신호로 인코딩합니다
  • IR 리모컨은 인코딩된 적외선 신호를 방출합니다
  • IR 수신기는 인코딩된 적외선 신호를 수신합니다
  • IR 수신기는 인코딩된 적외선 신호를 명령으로 디코드합니다
  • ESP32는 IR 수신기로부터 명령을 읽습니다
  • ESP32는 명령을 눌린 키에 매핑합니다

IR 리모컨의 버튼이 눌리면 다음 일련의 사건이 발생합니다:

  • IR 리모컨은 특정 프로토콜을 사용하여 버튼의 명령을 적외선 신호로 인코딩합니다.
  • 인코딩된 적외선 신호는 IR 리모컨에 의해 방출됩니다.
  • IR 수신기는 인코딩된 적외선 신호를 캡쳐하고 수신합니다.
  • IR 수신기는 적외선 신호를 디코딩하여 원래의 명령으로 다시 변환합니다.
  • ESP32는 IR 수신기에서 명령을 읽고 검색합니다.
  • 그런 다음 ESP32는 수신된 명령을 IR 리모컨에서 눌린 해당 버튼과 매핑합니다.

본질적으로, 이 단계들은 IR 리모컨의 버튼 누름이 ESP32가 이해하고 처리할 수 있는 인식 가능한 명령으로 변환되는 방법을 개요로 설명합니다.

응답 재생성

복잡해 보일 수 있지만 걱정하지 마세요. 사용자 친화적인 DIYables_IRcontroller 라이브러리 덕분에 이를 달성하는 것이 놀랍도록 쉬워집니다.

선연결

ESP32와 IR 수신 모듈 간의 연결도

ESP32 IR Remote Control Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

ESP32와 IR 리시버 센서 간의 배선도

ESP32 IR Remote Control Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32와 IR 수신 센서 및 어댑터 간의 배선도

IR 수신기 센서를 ESP32에 연결하기 전에, 어댑터에 연결할 수 있는 옵션이 있습니다. 이를 통해 IR 수신기 센서를 ESP32와 더 쉽게 통합하고 설정할 수 있습니다.

ESP32 IR remote control receiver adapter
image source: diyables.io

IR 리모컨 프로그래밍 방법

라이브러리를 포함하세요:

#include <DIYables_IRcontroller.h> // IR 수신기용 라이브러리
  • 17키 또는 21키 IR 리모컨에 해당하는 DIYables_IRcontroller_17 또는 DIYables_IRcontroller_21 객체를 선언합니다:
DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // 디바운스 시간은 200ms입니다. // OR DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // 디바운스 시간은 200ms입니다.

IR 컨트롤러를 초기화하세요.

irController.begin(); // 시작

루프에서 키가 눌렸는지 아닌지를 확인하세요. 만약 그렇다면, 키를 가져오세요.

Key17 key = irController.getKey(); // 17키 IR 컨트롤러 사용 시 // 또는 Key21 key = irController.getKey(); // 21키 IR 컨트롤러 사용 시

키 입력을 감지한 후, 각 키에 따라 동작을 수행할 수 있습니다.

ESP32 코드

DIYables 17키 IR 리모콘 컨트롤러를 위한 ESP32 코드

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller 라이브러리 #define IR_RECEIVER_PIN 19 // ESP32 핀 GPIO19가 IR 컨트롤러에 연결됨 DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // 디바운스 시간은 200ms임 void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key17 key = irController.getKey(); if (key != Key17::NONE) { switch (key) { case Key17::KEY_1: Serial.println("1"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_2: Serial.println("2"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_3: Serial.println("3"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_4: Serial.println("4"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_5: Serial.println("5"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_6: Serial.println("6"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_7: Serial.println("7"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_8: Serial.println("8"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_9: Serial.println("9"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_STAR: Serial.println("*"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_0: Serial.println("0"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_SHARP: Serial.println("#"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_UP: Serial.println("UP"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_DOWN: Serial.println("DOWN"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_LEFT: Serial.println("LEFT"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_RIGHT: Serial.println("RIGHT"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; case Key17::KEY_OK : Serial.println("OK"); // TODO: 여기에 컨트롤 코드를 작성하세요. break; default: Serial.println("WARNING: undefined key:"); break; } } }

DIYables 21키 IR 리모컨용 ESP32 코드

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller 라이브러리 #define IR_RECEIVER_PIN 19 // IR 컨트롤러에 연결된 ESP32 핀 GPIO19 DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // 디바운스 시간은 200ms입니다 void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key21 key = irController.getKey(); if (key != Key21::NONE) { switch (key) { case Key21::KEY_CH_MINUS: Serial.println("CH-"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_CH: Serial.println("CH"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_CH_PLUS: Serial.println("CH+"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_PREV: Serial.println("<<"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_NEXT: Serial.println(">>"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_PLAY_PAUSE: Serial.println(">||"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_VOL_MINUS: Serial.println("–"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_VOL_PLUS: Serial.println("+"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_EQ: Serial.println("EQ"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_100_PLUS: Serial.println("100+"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_200_PLUS: Serial.println("200+"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_0: Serial.println("0"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_1: Serial.println("1"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_2: Serial.println("2"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_3: Serial.println("3"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_4: Serial.println("4"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_5: Serial.println("5"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_6: Serial.println("6"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_7: Serial.println("7"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_8: Serial.println("8"); // 할 일: 당신의 컨트롤 break; case Key21::KEY_9: Serial.println("9"); // 할 일: 당신의 컨트롤 break; default: Serial.println("WARNING: undefined key:"); break; } } }

사용 방법

  • ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정하는 방법을 확인하세요.
  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
  • "DIYables_IRcontroller"를 검색한 다음, DIYables의 DIYables_IRcontroller 라이브러리를 찾으세요.
  • DIYables_IRcontroller 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
ESP32 DIYables_IRcontroller library

아래 이미지와 같이 라이브러리 종속성 설치가 요청됩니다:

ESP32 IRremote library
  • 종속성을 설치하려면 Install All 버튼을 클릭하세요.
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 코드를 ESP32에 업로드하려면 Upload 버튼을 클릭하세요.
  • 리모컨의 키를 하나씩 누르십시오.
  • 시리얼 모니터에서 결과를 확인하세요.
  • 21키 IR 컨트롤러의 키를 하나씩 누를 때 다음과 같은 결과가 나타납니다:
COM6
Send
9 8 7 6 5 4 3 2 1 0 200+ 100+ EQ + – || >> << CH+ CH CH-
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

이제 IR 리모컨을 사용하여 LED, 팬, 펌프, 구동기 등과 같은 다양한 장치를 제어하고 코드를 맞춤 설정할 수 있는 능력을 갖게 되었습니다. 이는 리모컨을 통해 보낸 명령에 이러한 장치들이 반응하도록 코드를 변경할 수 있다는 것을 의미합니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!