Caută cod

ESP32 Tutorial 29/55 - Citirea apăsării tastelor de pe telecomanda IR cu ESP32 | Kitul de învățare IoT ESP32 de la SunFounder

ESP32 Tutorial 29/55 - Citirea apăsării tastelor de pe telecomanda IR cu ESP32 | Kitul de învățare IoT ESP32 de la SunFounder

În acest tutorial, vom învăța cum să detectăm semnale infraroșii (IR) folosind modulul ESP32 și un receptor IR compatibil. Când apăsăm un buton pe telecomandă, ESP32 va recunoaște semnalul și va executa acțiuni specifice, cum ar fi activarea unui buzzer pentru anumite apăsări de taste. Acest proiect este ideal pentru cei care doresc să integreze capacități de control de la distanță în aplicațiile lor ESP32 (în video la 02:15).

telecomandă

ESP32 este un microcontroler puternic care combină capacități Wi-Fi și Bluetooth, fiind potrivit pentru o gamă largă de aplicații IoT. În acest proiect, vom folosi un receptor IR pentru a interpreta semnalele de la o telecomandă. Apăsările de taste vor fi procesate în cod, permițându-ne să luăm măsuri pe baza comenzilor primite.

Hardware Explicat

Componentele principale pentru acest proiect includ microcontrolerul ESP32, un modul receptor IR și un buzzer. ESP32 servește ca creier al operațiunii, procesând semnalele primite de la receptorul IR. Receptorul IR detectează semnalele infraroșii de la telecomandă și le convertește în semnale electrice pe care ESP32 le poate înțelege.

receptor_ir_sl838

Receptorul IR are de obicei trei pini: VCC (alimentare), GND (masă) și OUT (semnal). Pinul VCC este conectat la o sursă de alimentare (3.3V sau 5V), în timp ce GND se conectează la masă. Pinul OUT trimite semnalul decodat către ESP32, care poate fi apoi folosit pentru a declanșa diverse acțiuni, cum ar fi activarea unui buzzer atunci când este apăsată o anumită tastă.

Detalii din Fișa Tehnică

Producător Sharp
Număr de piesă GP1UXC41
Tensiune logică/IO 3.3 - 5.0 V
Tensiune de alimentare 3.3 V (tip.)
Curent de ieșire (pe canal) 20 mA (max)
Curent de vârf (pe canal) 50 mA (max)
Ghidare frecvență PWM 38 kHz
Praguri logice de intrare 0.3 Vcc (ridicat), 0.2 Vcc (scăzut)
Cădere de tensiune / RDS(on) / saturație 0.5 V (max)
Limite termice 85 °C (max)
Pachet TO-92
Note / variante Disponibil în mai multe configurații

 

  • Asigurați o alimentare corectă pentru a evita deteriorarea.
  • Folosiți fire scurte pentru a minimiza interferențele de semnal.
  • Verificați orientarea receptorului IR înainte de conectare.
  • Confirmați că bateria telecomenzii este funcțională.
  • Folosiți rezistențe pull-up dacă este necesar pentru stabilitate.

Instrucțiuni de Cablare

ESP32-29-IR-remote-wiring

Pentru a cabla receptorul IR la ESP32, începeți prin identificarea celor trei pini de pe receptorul IR: VCC, GND și OUT. Conectați pinul VCC la o sursă de alimentare de 3.3V de pe ESP32. Apoi, conectați pinul GND la unul dintre pinii de masă (GND) de pe ESP32. În final, conectați pinul OUT la pinul GPIO 14 de pe ESP32, care este desemnat pentru receptorul IR în cod.

ESP32-29-IR-remote-schematic

Odată ce conexiunile sunt făcute, asigurați-vă că cablarea este sigură. Dacă folosiți o placă de testare, introduceți receptorul IR astfel încât partea plată să fie îndreptată spre dvs. și umflătura să fie pe partea opusă. Această orientare vă va ajuta să identificați corect pinii. Asigurați-vă că verificați conexiunile înainte de a alimenta ESP32.

Exemple de Cod & Ghid Pas cu Pas

IR_receiver_lib

instalați biblioteca IRremoteESP8266 de David Conran, Sebastien.

În cod, definim pinul receptorului IR folosind constanta IR_RECEIVE_PIN, care este setată la 14. De asemenea, creăm o instanță a IRrecv pentru a gestiona semnalele IR.

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

Această configurare ne permite să primim semnale de la telecomanda IR. În funcția setup(), inițializăm comunicarea serială și activăm receptorul IR.

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

În cadrul funcției loop(), verificăm dacă a fost primit un semnal IR. Dacă da, decodăm valoarea tastei și o imprimăm pe monitorul serial.

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

Acest fragment de cod arată cum decodăm semnalul primit și imprimăm valoarea corespunzătoare a tastei pe monitorul serial. Funcția decodeKeyValue() mapează semnalul primit la valori specifice ale butoanelor, cum ar fi "0", "1", "EQ" și altele. Puteți găsi codul complet încărcat mai jos în articol.

Demonstrație / Ce să Vă Așteptați

Odată ce cablarea este finalizată și codul este încărcat, apăsarea unui buton de pe telecomandă ar trebui să afișeze valoarea corespunzătoare a tastei pe monitorul serial. De exemplu, apăsarea butonului "2" va afișa "2" pe monitor. Dacă tasta nu este recunoscută, va returna "ERROR". Buzzerul va suna atunci când tasta desemnată (de exemplu, "EQ") este apăsată, oferind feedback imediat.

Fiți atenți la capcanele frecvente, cum ar fi polaritatea inversată în conexiuni sau utilizarea unor niveluri de tensiune incorecte. Asigurați-vă că telecomanda funcționează corect și are o baterie funcțională înainte de a testa configurația (în video la 15:30).

Marcaje temporale video

  • 00:00 Start
  • 2:05 Introducere în receptorul IR
  • 4:24 Cablarea explicată
  • 6:08 Codul Arduino pentru receptorul IR explicat
  • 10:06 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
  • 11:48 Demonstrația proiectului
  • 13:09 Buzzer activ conectat direct la ESP32
  • 14:40 acțiune întreprinsă când o tastă este apăsată
  • 15:30 Codul Arduino pentru acțiune
  • 16:54 Demonstrație apăsare tastă și buzzer

Imagini

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
Limba: 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";
  }
}

Lucruri de care ai putea avea nevoie

Resurse și referințe

Fișiere📁

Fișă tehnică (pdf)