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 | ||