This shows you the differences between two versions of the page.
pm:prj2025:vradulescu:razvan.galeseanu [2025/05/25 15:32] razvan.galeseanu |
pm:prj2025:vradulescu:razvan.galeseanu [2025/05/27 14:42] (current) razvan.galeseanu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Sniffer și Transmitator de Coduri IR folosind ESP32 ====== | + | ====== Sniffer și Transmitator de Coduri IR ====== |
===== Introducere ===== | ===== Introducere ===== | ||
Line 14: | Line 14: | ||
<note tip> | <note tip> | ||
🔹 Componente utilizate: | 🔹 Componente utilizate: | ||
- | * ESP32 DevKit | + | * ESP32 DevKit |
- | * LCD 1602 cu interfață I2C (0x27) | + | * LCD 1602 cu interfață I2C (0x27) |
- | * Receptor IR CHQ1838 | + | * Receptor IR CHQ1838 |
- | * LED IR 5mm, 940nm | + | * LED IR 5mm, 940nm |
- | * Rezistor 220Ω (pentru LED) | + | * Rezistor 220Ω (pentru LED) |
- | * 3 butoane tactile 6x6mm (pentru SAVE, SCROLL, SEND) | + | * 3 butoane tactile 6x6mm (pentru DELETE, SCROLL, SEND) |
- | * Rezistori 4.7kΩ pentru pull-down | + | * Rezistori 4.7kΩ pentru pull-down |
- | * Breadboard HQ (400 puncte) | + | * Breadboard HQ (400 puncte) |
- | * Fire jumper Mamă-Mamă și Mamă-Tată | + | * Fire jumper Mamă-Mamă și Mamă-Tată |
* Suport 4xR6 (AA) | * Suport 4xR6 (AA) | ||
🔹 Conexiuni: | 🔹 Conexiuni: | ||
- | * GPIO 35 → Receptor IR | + | * GPIO 35 → Receptor IR |
- | * GPIO 32 → LED IR prin rezistor | + | * GPIO 32 → LED IR prin rezistor |
- | * GPIO 34 → Buton SEND | + | * GPIO 34 → Buton SEND |
- | * GPIO 33 → Buton SCROLL | + | * GPIO 33 → Buton SCROLL |
- | * GPIO 25 → Buton DELETE | + | * GPIO 25 → Buton DELETE |
* GPIO 21, 22 → LCD I2C (SDA, SCL) | * GPIO 21, 22 → LCD I2C (SDA, SCL) | ||
</note> | </note> | ||
Line 42: | Line 42: | ||
🔹 Biblioteci utilizate: | 🔹 Biblioteci utilizate: | ||
- | * IRremoteESP8266 – pentru recepție și transmitere coduri IR | + | * IRremoteESP8266 – pentru recepție și transmitere coduri IR |
- | * LiquidCrystal_I2C – pentru afișajul LCD | + | * LiquidCrystal_I2C – pentru afișajul LCD |
* Preferences – pentru stocare coduri (opțional) | * Preferences – pentru stocare coduri (opțional) | ||
🔹 Funcționalități implementate: | 🔹 Funcționalități implementate: | ||
- | * Recepție cod IR și afișare protocol + cod HEX pe LCD | + | * Recepție cod IR și afișare protocol + cod HEX pe LCD |
- | * Verificare cod duplicat înainte de salvare | + | * Verificare cod duplicat înainte de salvare |
- | * Navigare între coduri prin scroll | + | * Navigare între coduri prin scroll |
- | * Retransmitere coduri salvate | + | * Retransmitere coduri salvate |
- | * Ștergere totală coduri | + | * Ștergere totală coduri |
* Afișare stare și index curent pe LCD | * Afișare stare și index curent pe LCD | ||
Exemplu logică afișare cod: | Exemplu logică afișare cod: | ||
- | - Protocol: NEC | + | - Protocol: NEC |
- | - Cod HEX: e01fbf40 | + | - Cod HEX: e01fbf40 |
- Pe LCD: `NEC e01fbf40` (rând 1), `Cod 5/5` (rând 2) | - Pe LCD: `NEC e01fbf40` (rând 1), `Cod 5/5` (rând 2) | ||
+ | </note> | ||
+ | |||
+ | ===== Fragment de cod ===== | ||
+ | <note tip> | ||
+ | Următorul exemplu de cod evidențiază funcțiile principale ale dispozitivului: captarea codului IR, afișarea pe LCD, salvarea în memorie, navigarea între coduri și retransmiterea acestora. Butoanele conectate la GPIO permit interacțiunea directă cu utilizatorul. | ||
+ | </note> | ||
+ | |||
+ | <code cpp> | ||
+ | #include <Arduino.h> | ||
+ | #include <IRremote.hpp> | ||
+ | #include <LiquidCrystal_I2C.h> | ||
+ | |||
+ | #define IR_RECEIVE_PIN 35 | ||
+ | #define IR_SEND_PIN 32 | ||
+ | #define BUTTON_SEND_PIN 34 | ||
+ | #define BUTTON_SCROLL_PIN 33 | ||
+ | #define BUTTON_DELETE_PIN 25 | ||
+ | |||
+ | LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
+ | |||
+ | struct CodIR { | ||
+ | uint32_t cod; | ||
+ | String protocol; | ||
+ | }; | ||
+ | |||
+ | CodIR coduri[20]; | ||
+ | int nrCoduri = 0; | ||
+ | int indexAfisat = -1; | ||
+ | unsigned long ultimaInregistrare = 0; | ||
+ | bool tocmaiAmSalvat = false; | ||
+ | |||
+ | void afiseazaPeLCD(String protocol, String codHex, String stare) { | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print(protocol + " " + codHex); | ||
+ | lcd.setCursor(0, 1); | ||
+ | if (nrCoduri > 0) | ||
+ | lcd.print("Cod " + String(indexAfisat + 1) + "/" + String(nrCoduri)); | ||
+ | else | ||
+ | lcd.print(stare); | ||
+ | } | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); | ||
+ | IrSender.begin(IR_SEND_PIN); | ||
+ | IrSender.enableIROut(38); | ||
+ | pinMode(BUTTON_SEND_PIN, INPUT); | ||
+ | pinMode(BUTTON_SCROLL_PIN, INPUT); | ||
+ | pinMode(BUTTON_DELETE_PIN, INPUT); | ||
+ | lcd.init(); | ||
+ | lcd.backlight(); | ||
+ | lcd.print("IR sistem gata"); | ||
+ | delay(1000); | ||
+ | lcd.clear(); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <note important> | ||
+ | 📌 Codul complet este disponibil în fișierul `ir_sniffer.ino` inclus în arhiva proiectului. | ||
</note> | </note> | ||
Line 70: | Line 130: | ||
<note warning> | <note warning> | ||
Fişierele proiectului includ: | Fişierele proiectului includ: | ||
- | * Cod sursă (`ir_sniffer.ino`) | + | * Cod sursă (`ir_sniffer.ino`) |
- | * Schema conexiuni (PNG și Fritzing) | + | * Schema conexiuni (PNG și Fritzing) |
- | * README explicativ | + | * README explicativ |
* Set coduri test IR (dacă este cazul) | * Set coduri test IR (dacă este cazul) | ||
Line 88: | Line 148: | ||
===== Bibliografie / Resurse ===== | ===== Bibliografie / Resurse ===== | ||
<note> | <note> | ||
- | 🔹 **Resurse Software**: | + | 🔹 **Resurse Software**: |
* https://github.com/crankyoldgit/IRremoteESP8266 | * https://github.com/crankyoldgit/IRremoteESP8266 | ||
* https://github.com/johnrickman/LiquidCrystal_I2C | * https://github.com/johnrickman/LiquidCrystal_I2C | ||
- | 🔹 **Resurse Hardware**: | + | 🔹 **Resurse Hardware**: |
* Datasheet ESP32 DevKit | * Datasheet ESP32 DevKit | ||
* Datasheet CHQ1838 IR Receiver | * Datasheet CHQ1838 IR Receiver |