This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:george.simion2005 [2026/05/24 16:17] george.simion2005 |
pm:prj2026:atoader:george.simion2005 [2026/05/25 17:59] (current) george.simion2005 |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | Proiectul **Flipper One** reprezintă o mini-replică educațională, realizată pe Arduino UNO, inspirată conceptual de dispozitivele de tip multi-tool folosite pentru testarea comunicațiilor simple RF, RFID/NFC și WiFi. Scopul proiectului nu este realizarea unui dispozitiv comercial, ci înțelegerea practică a modului în care mai multe periferice embedded pot comunica între ele într-un sistem cu resurse foarte limitate. | + | Proiectul **Flipper One** reprezinta o mini-replica educationala, realizata pe Arduino UNO, inspirata conceptual de dispozitivul de tip multi-tool folosit pentru pen-testing-ul comunicatiilor simple RF, RFID/NFC si WiFi. |
| - | Dispozitivul este construit în jurul unei plăci **Arduino UNO R3 / ATmega328P** și integrează un ecran OLED, butoane prin expander I2C, LED RGB, module RF 433 MHz, modul PN532 pentru RFID/NFC, modul ESP-01 pentru scanare WiFi și modul MicroSD pentru stocare persistentă. | + | Proiectul este construit in jurul unei placi **Arduino UNO R3 / ATmega328P** si integreaza un ecran OLED, butoane prin expander I2C, LED RGB, module RF 433 MHz, modul PN532 pentru RFID/NFC, modul ESP-01 pentru scanare WiFi si modul MicroSD pentru stocare. |
| - | În forma finală, proiectul a fost împărțit în două firmware-uri separate: | + | Produsul final a fost impartit in doua firmware-uri separate: |
| - | * **Flipper One Main** – firmware-ul principal, care include RFID, WiFi, MicroSD și captură/replay RF în mod raw; | + | * **Flipper One Main** - firmware-ul principal, care include RFID, WiFi, MicroSD si captura/replay RF intr-un mod raw; |
| - | * **Flipper One RF** – firmware specializat pentru RF, bazat pe decodare cu RCSwitch, retransmitere și salvare pe card MicroSD în fișiere separate. | + | * **Flipper One RF** - firmware pentru RF, bazat pe decodare cu RCSwitch, retransmitere si salvare pe card MicroSD. |
| - | Această împărțire a fost necesară din cauza limitărilor severe de memorie ale microcontrollerului ATmega328P. Încercarea de a include simultan RFID, WiFi, SD, OLED, raw RF și RCSwitch într-un singur firmware depășea limita de Flash sau producea un sistem instabil. Prin urmare, proiectul a fost modularizat în două coduri care folosesc aceeași platformă hardware, dar sunt încărcate separat în funcție de demonstrația dorită. | + | Aceasta impartire a fost necesara din cauza limitarilor severe de memorie ale microcontrollerului ATmega328P. Incercarea de a include simultan RFID, WiFi, SD, OLED, RF cu RCSwitch intr-un singur firmware depasea limita de Flash. Prin urmare, am modularizat proiectul in doua coduri care folosesc aceeasi platforma hardware, dar sunt incarcate separat in functie de functia dorita. |
| - | Funcționalități principale implementate: | + | Functionalitati principale implementate: |
| - | * citirea UID-urilor RFID/NFC folosind modulul PN532; | + | * citirea UID-urilor RFID folosind modulul PN532; |
| * salvarea UID-urilor RFID pe card MicroSD; | * salvarea UID-urilor RFID pe card MicroSD; | ||
| - | * scanarea rețelelor WiFi din apropiere folosind ESP-01 / ESP8266; | + | * scanarea retelelor WiFi din apropiere folosind ESP-01 / ESP8266; |
| - | * salvarea scanărilor WiFi pe card MicroSD; | + | * salvarea scanarilor WiFi pe card MicroSD; |
| - | * analiza rețelelor WiFi detectate: RSSI, securitate, canal, WPS, MAC/BSSID și observații simple; | + | * analiza retelelor WiFi detectate: RSSI, securitate, canal, WPS, MAC/BSSID si observatii simple; |
| - | * capturarea raw a semnalelor RF 433 MHz și retransmiterea lor în firmware-ul principal; | + | * capturarea raw a semnalelor RF 433 MHz si retransmiterea lor in firmware-ul principal; |
| - | * capturarea/decodarea RF cu RCSwitch în firmware-ul RF dedicat; | + | * capturarea/decodarea RF cu RCSwitch in firmware-ul RF dedicat; |
| - | * salvarea codurilor RF decodate în fișiere separate pe cardul MicroSD; | + | * salvarea codurilor RF decodate in fisiere separate pe cardul MicroSD; |
| - | * interfață utilizator pe OLED 128x64; | + | * interfata utilizator pe OLED 128x64; |
| * control prin 4 butoane conectate prin PCF8574; | * control prin 4 butoane conectate prin PCF8574; | ||
| * feedback vizual prin LED RGB. | * feedback vizual prin LED RGB. | ||
| - | Din punct de vedere al rezultatului final, partea de RFID și partea de WiFi funcționează foarte bine. Modulul RFID detectează cardurile și salvează UID-urile pe SD, iar modulul WiFi realizează scanări, salvează rezultatele și afișează analiza rețelelor într-un mod stabil. Partea RF a fost cea mai dificilă: captura raw este foarte sensibilă la zgomotul receptorului, iar varianta cu RCSwitch este mai curată din punct de vedere software, dar depinde puternic de protocolul telecomenzii și de calitatea semnalului primit. | + | Din punct de vedere al rezultatului final, modulul RFID detecteaza cardurile si salveaza UID-urile pe SD, modulul WiFi realizeaza scanari, salveaza rezultatele si afiseaza o mini-analiza a retelelor. Partea RF are cateva imperfectiuni: captura raw este foarte sensibila la zgomotul receptorului, iar varianta cu RCSwitch este mai curata din punct de vedere software, dar depinde puternic de protocolul telecomenzii si de calitatea semnalului primit. |
| - | Proiectul este realizat strict în scop educațional și de laborator. Testele RF/RFID/WiFi au fost gândite pentru module proprii, carduri proprii și telecomenzi simple de tip fixed-code. Telecomenzile moderne cu rolling-code, precum cele auto sau multe telecomenzi moderne de garaj, nu pot fi clonate prin această implementare. | + | ===== Descriere generala ===== |
| - | ===== Descriere generală ===== | + | Sistemul este organizat in jurul placii **Arduino UNO R3**, bazata pe microcontrollerul **ATmega328P**. Arduino coordoneaza toate modulele externe, citeste butoanele, actualizeaza afisajul OLED si executa functiile alese din meniu. |
| - | Sistemul este organizat în jurul plăcii **Arduino UNO R3**, bazată pe microcontrollerul **ATmega328P**. Arduino coordonează toate modulele externe, citește butoanele, actualizează afișajul OLED și execută funcțiile alese din meniu. | + | Interactiunea cu utilizatorul se face prin: |
| - | + | * un ecran **OLED SH1106 128x64 SPI**, folosit in mod text prin biblioteca U8x8; | |
| - | Interacțiunea cu utilizatorul se face prin: | + | |
| - | * un ecran **OLED SH1106 128x64 SPI**, folosit în mod text prin biblioteca U8x8; | + | |
| * 4 butoane conectate la un **PCF8574** pe I2C; | * 4 butoane conectate la un **PCF8574** pe I2C; | ||
| * un **LED RGB** conectat la pini PWM pentru feedback vizual. | * un **LED RGB** conectat la pini PWM pentru feedback vizual. | ||
| - | Pentru economia de pini, butoanele nu sunt conectate direct la Arduino, ci prin expanderul I2C PCF8574. Astfel, cele 4 butoane folosesc aceeași magistrală I2C ca modulul PN532. | + | Din cauza numarului de pini necesarui pentru conectarea tuturor modulelor am optat spre a fololsi un expander I2C PCF8574 la care am legat cele 4 butoane. Astfel, cele 4 butoane folosesc aceeasi magistrala I2C ca modulul PN532. |
| - | Partea de RF este realizată cu două module de 433 MHz: | + | Partea de RF este realizata cu doua module de 433 MHz: |
| - | * **SRX887** – receptor, conectat pe D2, pin care suportă întrerupere externă INT0; | + | * **SRX887** - receptor, conectat pe D2, pin care suporta intrerupere externa INT0; |
| - | * **STX882** – emițător, conectat pe D8. | + | * **STX882** - emitator, conectat pe D8. |
| - | În firmware-ul principal, semnalul RF este tratat raw: programul memorează duratele dintre tranzițiile de nivel logic detectate pe D2 și încearcă să le retransmită pe D8. Această abordare este apropiată conceptual de un sistem de captură raw, dar pe Arduino UNO este limitată de memorie și este foarte sensibilă la zgomot. | + | In firmware-ul principal, semnalul RF este tratat raw: programul memoreaza duratele dintre tranzitiile de nivel logic detectate pe D2 si incearca sa le retransmita pe D8. Aceasta abordare, pe Arduino UNO, este limitata de memorie si este foarte sensibila la zgomot, dar apropiata conceptual de un sistem de captura raw,. |
| + | In firmware-ul RF separat, semnalul este tratat cu biblioteca **RCSwitch**, care incearca sa decodeze protocoale RF simple de tip fixed-code. In loc sa salveze sute de tranzitii, firmware-ul salveaza doar valoarea decodata, numarul de biti, protocolul si lungimea pulsului. Aceasta metoda este mult mai eficienta ca memorie, dar functioneaza doar pentru protocoalele suportate de RCSwitch si pentru telecomenzi compatibile. | ||
| - | În firmware-ul RF separat, semnalul este tratat cu biblioteca **RCSwitch**, care încearcă să decodeze protocoale RF simple de tip fixed-code. În loc să salveze sute de tranziții, firmware-ul salvează doar valoarea decodată, numărul de biți, protocolul și lungimea pulsului. Această metodă este mult mai eficientă ca memorie, dar funcționează doar pentru protocoalele suportate de RCSwitch și pentru telecomenzi compatibile. | + | Modulul **PN532 RFID/NFC** este conectat pe I2C si este folosit pentru citirea UID-urilor cardurilor. Pentru a reduce consumul de memorie, in firmware-ul principal am folosit o implementare minimala pentru comenzile PN532 necesare: initializare, configurare SAM si citire UID. |
| - | Modulul **PN532 RFID/NFC** este conectat pe I2C și este folosit pentru citirea UID-urilor cardurilor ISO14443A. Pentru a reduce consumul de memorie, în firmware-ul principal am folosit o implementare minimală pentru comenzile PN532 necesare: inițializare, configurare SAM și citire UID. | + | Modulul **ESP-01 / ESP8266** este conectat prin SoftwareSerial. Arduino ii trimite comenzi AT, iar ESP-ul raspunde cu lista retelelor WiFi detectate. Datele sunt salvate pe cardul MicroSD in fisierul `WIFIDB.TXT`, apoi sunt citite si analizate din fisier, nu pastrate integral in RAM din cauza constraint-urilor de memorie. |
| - | Modulul **ESP-01 / ESP8266** este conectat prin SoftwareSerial. Arduino îi trimite comenzi AT, iar ESP-ul răspunde cu lista rețelelor WiFi detectate. Datele sunt salvate pe cardul MicroSD în fișierul `WIFIDB.TXT`, apoi sunt citite și analizate din fișier, nu păstrate integral în RAM. | + | Modulul **MicroSD** este conectat pe SPI si este folosit pentru stocarea persistenta a datelor: |
| + | * UID-uri RFID in fisiere `.UID`, indexate in `UIDIDX.TXT`; | ||
| + | * scanari WiFi in `WIFIDB.TXT`; | ||
| + | * coduri RF decodate in firmware-ul RF, in fisiere `.RFC`, indexate in `RFIDX.TXT`. | ||
| - | Modulul **MicroSD** este conectat pe SPI și este folosit pentru stocarea persistentă a datelor: | + | Logica generala a dispozitivului este bazata pe o masina de stari: |
| - | * UID-uri RFID în fișiere `.UID`, indexate în `UIDIDX.TXT`; | + | * **Main Menu** - utilizatorul alege modul de lucru; |
| - | * scanări WiFi în `WIFIDB.TXT`; | + | * **RF Capture / RF Emit** - captura si retransmitere RF; |
| - | * coduri RF decodate în firmware-ul RF, în fișiere `.RFC`, indexate în `RFIDX.TXT`. | + | * **RFID Scan / Save UID** - citire si salvare UID; |
| - | + | * **WiFi Scan / View Networks** - scanare si afisare retele WiFi; | |
| - | Logica generală a dispozitivului este bazată pe o mașină de stări: | + | * **SD Browser** - vizualizarea fisierelor salvate; |
| - | * **Main Menu** – utilizatorul alege modul de lucru; | + | * **Status** - afisarea starii sistemului. |
| - | * **RF Capture / RF Emit** – captură și retransmitere RF; | + | |
| - | * **RFID Scan / Save UID** – citire și salvare UID; | + | |
| - | * **WiFi Scan / View Networks** – scanare și afișare rețele WiFi; | + | |
| - | * **SD Browser** – vizualizarea fișierelor salvate; | + | |
| - | * **Status** – afișarea stării sistemului. | + | |
| - | + | ||
| - | {{:pm:prj2026:atoader:flipperone_blockdiagram_george.simion2005.png?700|Schema bloc Flipper One}} | + | |
| + | {{:pm:prj2026:atoader:flipperone_blockdiagram_george.simion2005.png?600|}} | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | ==== Stadiul actual al implementării hardware ==== | + | Ambele variante de firmware folosesc aceeasi placa Arduino UNO si aceleasi conexiuni fizice. Diferenta este la nivel software: firmware-ul incarcat pe Arduino decide ce module sunt folosite efectiv. |
| - | + | ||
| - | Hardware-ul proiectului a rămas în mare parte același între cele două firmware-uri. Ambele variante folosesc aceeași placă Arduino UNO și aceleași conexiuni fizice. Diferența este la nivel software: firmware-ul încărcat pe Arduino decide ce module sunt folosite efectiv. | + | |
| - | Montajul este realizat pe breadboard și include următoarele module: | + | Montajul este realizat pe breadboard si include urmatoarele module: |
| * Arduino UNO R3 / ATmega328P; | * Arduino UNO R3 / ATmega328P; | ||
| * OLED SH1106 128x64 pe SPI; | * OLED SH1106 128x64 pe SPI; | ||
| * receptor RF SRX887 433 MHz; | * receptor RF SRX887 433 MHz; | ||
| - | * emițător RF STX882 433 MHz; | + | * emitator RF STX882 433 MHz; |
| * modul PN532 RFID/NFC pe I2C; | * modul PN532 RFID/NFC pe I2C; | ||
| * expander PCF8574 pentru butoane pe I2C; | * expander PCF8574 pentru butoane pe I2C; | ||
| Line 87: | Line 81: | ||
| * modul MicroSD pe SPI. | * modul MicroSD pe SPI. | ||
| - | Alimentarea este împărțită astfel: | + | Alimentarea este impartita astfel: |
| - | * **5V** pentru Arduino, OLED, PN532, PCF8574, module RF și MicroSD; | + | * **5V** pentru Arduino, OLED, PN532, PCF8574, module RF si MicroSD; |
| * **3.3V** pentru ESP-01, generat prin AMS1117; | * **3.3V** pentru ESP-01, generat prin AMS1117; | ||
| * **GND comun** pentru toate modulele. | * **GND comun** pentru toate modulele. | ||
| - | PN532 și PCF8574 sunt pe aceeași magistrală I2C, iar OLED-ul și MicroSD-ul împart magistrala SPI. Pentru a evita conflictele pe SPI, fiecare dispozitiv are pinul său de chip select: OLED pe D10 și SD pe A3. | + | PN532 si PCF8574 sunt pe aceeasi magistrala I2C, iar OLED-ul si MicroSD-ul impart magistrala SPI. Pentru a evita conflictele pe SPI, fiecare dispozitiv are pinul sau de chip select: OLED pe D10 si SD pe A3. |
| - | {{:pm:prj2026:atoader:fliiper1_real.jpeg?900|Montajul fizic Flipper One}} | + | {{:pm:prj2026:atoader:flipper1_real.png?650}} |
| - | {{:pm:prj2026:atoader:schema_flipper1.png?900|Schema hardware detaliată a montajului}} | + | {{:pm:prj2026:atoader:schema_flipper1.png?650}} |
| ==== Componente folosite ==== | ==== Componente folosite ==== | ||
| - | ^ Componentă ^ Rol în proiect ^ Interfață / observații ^ | + | ^ Componenta ^ Rol in proiect ^ Interfata / observatii ^ |
| - | | **Arduino UNO R3 / ATmega328P** | Unitatea centrală a sistemului | GPIO, PWM, SPI, I2C, SoftwareSerial | | + | | **Arduino UNO R3 / ATmega328P** | Unitatea centrala a sistemului | GPIO, PWM, SPI, I2C, SoftwareSerial | |
| - | | **Breadboard SYB-120** | Suport pentru prototipare și distribuție alimentare | 5V, 3.3V, GND | | + | | **Breadboard SYB-120** | Suport pentru prototipare si distributie alimentare | 5V, 3.3V, GND | |
| - | | **OLED 1.3'' SH1106 128x64** | Afișarea meniurilor și a rezultatelor | SPI hardware, U8x8 fără framebuffer | | + | | **OLED 1.3'' SH1106 128x64** | Afisarea meniurilor si a rezultatelor | SPI hardware, U8x8 fara framebuffer | |
| - | | **SRX887 433 MHz** | Recepție RF | DATA pe D2 / INT0, CS la GND în modul activ | | + | | **SRX887 433 MHz** | Receptie RF | DATA pe D2 / INT0, CS la GND in modul activ | |
| | **STX882 433 MHz** | Transmisie RF | DATA pe D8 | | | **STX882 433 MHz** | Transmisie RF | DATA pe D8 | | ||
| | **LED RGB KY-016** | Feedback vizual | PWM pe D3, D5, D6 | | | **LED RGB KY-016** | Feedback vizual | PWM pe D3, D5, D6 | | ||
| | **PCF8574** | Extinderea pinilor pentru butoane | I2C pe A4/A5 | | | **PCF8574** | Extinderea pinilor pentru butoane | I2C pe A4/A5 | | ||
| - | | **4 butoane tactile** | Navigare în meniu | P0-P3 pe PCF8574 | | + | | **4 butoane tactile** | Navigare in meniu | P0-P3 pe PCF8574 | |
| | **PN532 RFID/NFC** | Citire UID carduri/tag-uri | I2C, reset pe A1 | | | **PN532 RFID/NFC** | Citire UID carduri/tag-uri | I2C, reset pe A1 | | ||
| - | | **ESP-01 / ESP8266** | Scanare rețele WiFi | SoftwareSerial D4/D7, alimentare 3.3V | | + | | **ESP-01 / ESP8266** | Scanare retele WiFi | SoftwareSerial D4/D7, alimentare 3.3V | |
| | **AMS1117 3.3V** | Regulator pentru ESP-01 | VIN 5V, VOUT 3.3V | | | **AMS1117 3.3V** | Regulator pentru ESP-01 | VIN 5V, VOUT 3.3V | | ||
| - | | **Modul MicroSD** | Stocare persistentă | SPI, CS pe A3 | | + | | **Modul MicroSD** | Stocare persistenta | SPI, CS pe A3 | |
| ==== Maparea pinilor Arduino ==== | ==== Maparea pinilor Arduino ==== | ||
| Line 118: | Line 112: | ||
| ^ Pin Arduino ^ Conectat la ^ Justificare ^ | ^ Pin Arduino ^ Conectat la ^ Justificare ^ | ||
| | **5V** | OLED, PN532, PCF8574, RF, MicroSD, AMS1117 VIN | Alimentare module compatibile 5V | | | **5V** | OLED, PN532, PCF8574, RF, MicroSD, AMS1117 VIN | Alimentare module compatibile 5V | | ||
| - | | **GND** | Toate modulele | Referință comună | | + | | **GND** | Toate modulele | Referinta comuna | |
| - | | **D2** | DATA receptor SRX887 | Pin cu întrerupere externă INT0 | | + | | **D2** | DATA receptor SRX887 | Pin cu intrerupere externa INT0 | |
| | **D3** | LED RGB - R | PWM | | | **D3** | LED RGB - R | PWM | | ||
| - | | **D4** | ESP-01 TX către Arduino | SoftwareSerial RX | | + | | **D4** | ESP-01 TX catre Arduino | SoftwareSerial RX | |
| | **D5** | LED RGB - G | PWM | | | **D5** | LED RGB - G | PWM | | ||
| | **D6** | LED RGB - B | PWM | | | **D6** | LED RGB - B | PWM | | ||
| | **D7** | ESP-01 RX de la Arduino | SoftwareSerial TX | | | **D7** | ESP-01 RX de la Arduino | SoftwareSerial TX | | ||
| - | | **D8** | DATA emițător STX882 | Ieșire digitală pentru transmisie RF | | + | | **D8** | DATA emitator STX882 | Iesire digitala pentru transmisie RF | |
| | **D9** | RST OLED | Reset display | | | **D9** | RST OLED | Reset display | | ||
| | **D10** | CS OLED | Chip select SPI OLED | | | **D10** | CS OLED | Chip select SPI OLED | | ||
| - | | **D11** | MOSI SPI | Date către OLED și MicroSD | | + | | **D11** | MOSI SPI | Date catre OLED si MicroSD | |
| | **D12** | MISO SPI | Date de la MicroSD | | | **D12** | MISO SPI | Date de la MicroSD | | ||
| | **D13** | SCK SPI | Clock SPI | | | **D13** | SCK SPI | Clock SPI | | ||
| - | | **A0** | DC OLED | Selectare comandă/date OLED | | + | | **A0** | DC OLED | Selectare comanda/date OLED | |
| | **A1** | RESET PN532 | Reset hardware PN532 | | | **A1** | RESET PN532 | Reset hardware PN532 | | ||
| | **A2** | IRQ PN532 | Pin rezervat pentru IRQ PN532 | | | **A2** | IRQ PN532 | Pin rezervat pentru IRQ PN532 | | ||
| | **A3** | CS MicroSD | Chip select SD | | | **A3** | CS MicroSD | Chip select SD | | ||
| - | | **A4** | SDA PCF8574 + PN532 | Magistrală I2C | | + | | **A4** | SDA PCF8574 + PN532 | Magistrala I2C | |
| - | | **A5** | SCL PCF8574 + PN532 | Magistrală I2C | | + | | **A5** | SCL PCF8574 + PN532 | Magistrala I2C | |
| - | ==== Conexiuni importante ==== | + | ==== Conexiuni ==== |
| === OLED SPI === | === OLED SPI === | ||
| Line 171: | Line 165: | ||
| | IRQ | A2 | | | IRQ | A2 | | ||
| - | === PCF8574 și butoane === | + | === PCF8574 si butoane === |
| ^ Pin PCF8574 ^ Conexiune ^ | ^ Pin PCF8574 ^ Conexiune ^ | ||
| Line 190: | Line 184: | ||
| | SRX887 | CS | GND pentru activare | | | SRX887 | CS | GND pentru activare | | ||
| | SRX887 | DATA | D2 / INT0 | | | SRX887 | DATA | D2 / INT0 | | ||
| - | | SRX887 | ANT | Antenă 433 MHz | | + | | SRX887 | ANT | Antena 433 MHz | |
| | STX882 | VCC | 5V | | | STX882 | VCC | 5V | | ||
| | STX882 | GND | GND | | | STX882 | GND | GND | | ||
| | STX882 | DATA | D8 | | | STX882 | DATA | D8 | | ||
| - | | STX882 | ANT | Antenă 433 MHz | | + | | STX882 | ANT | Antena 433 MHz | |
| === ESP-01 === | === ESP-01 === | ||
| - | ^ Pin ESP-01 ^ Conectat la ^ Observații ^ | + | ^ Pin ESP-01 ^ Conectat la ^ Observatii ^ |
| - | | VCC | 3.3V AMS1117 | ESP-ul nu se alimentează direct din 5V | | + | | VCC | 3.3V AMS1117 | ESP-ul nu se alimenteaza direct din 5V | |
| - | | GND | GND comun | Masă comună | | + | | GND | GND comun | Masa comuna | |
| - | | TX | D4 Arduino | Arduino primește prin SoftwareSerial | | + | | TX | D4 Arduino | Arduino primeste prin SoftwareSerial | |
| | RX | D7 Arduino | Arduino trimite comenzi AT | | | RX | D7 Arduino | Arduino trimite comenzi AT | | ||
| | CH_PD / EN | 3.3V | Activare modul | | | CH_PD / EN | 3.3V | Activare modul | | ||
| Line 209: | Line 203: | ||
| ==== Mediu de dezvoltare ==== | ==== Mediu de dezvoltare ==== | ||
| - | Proiectul a fost dezvoltat în **Visual Studio Code** folosind **PlatformIO** și toolchain-ul AVR-GCC pentru Arduino UNO. Framework-ul folosit este Arduino, deoarece proiectul integrează mai multe biblioteci și periferice externe. | + | Proiectul a fost dezvoltat in **Visual Studio Code** folosind **PlatformIO** si toolchain-ul AVR-GCC pentru Arduino UNO. Framework-ul folosit este Arduino, deoarece proiectul integreaza mai multe biblioteci si periferice externe. |
| Biblioteci folosite: | Biblioteci folosite: | ||
| - | * `U8g2 / U8x8` – afișare text pe OLED SH1106 fără framebuffer, pentru economie de RAM; | + | * `U8g2 / U8x8` - afisare text pe OLED SH1106 fara framebuffer, pentru economie de RAM; |
| - | * `SD` – acces la cardul MicroSD; | + | * `SD` - acces la cardul MicroSD; |
| - | * `Wire` – comunicație I2C cu PCF8574 și PN532; | + | * `Wire` - comunicatie I2C cu PCF8574 si PN532; |
| - | * `SPI` – comunicație cu OLED și MicroSD; | + | * `SPI` - comunicatie cu OLED si MicroSD; |
| - | * `SoftwareSerial` – comunicație serială cu ESP-01; | + | * `SoftwareSerial` - comunicatie seriala cu ESP-01; |
| - | * `RCSwitch` – folosit doar în firmware-ul RF dedicat. | + | * `RCSwitch` - folosit doar in firmware-ul RF dedicat. |
| - | Pentru a evita depășirea memoriei Flash, proiectul este împărțit în două environment-uri PlatformIO: | + | Pentru a evita depasirea memoriei Flash, proiectul este impartit in doua environment-uri PlatformIO: |
| <code ini> | <code ini> | ||
| Line 229: | Line 223: | ||
| </code> | </code> | ||
| - | Comenzi de upload: | + | ==== Motivul modularizarii in doua firmware-uri ==== |
| - | <code bash> | + | Microcontrollerul ATmega328P are doar 32 KB Flash si 2 KB SRAM. In timpul dezvoltarii, incercarea de a include toate functiile intr-un singur firmware a dus la depasirea limitei de Flash sau la instabilitate runtime, mai ales cand erau folosite simultan: |
| - | pio run -e main_demo -t upload | + | |
| - | </code> | + | |
| - | + | ||
| - | <code bash> | + | |
| - | pio run -e rf_demo -t upload | + | |
| - | </code> | + | |
| - | + | ||
| - | ==== Motivul modularizării în două firmware-uri ==== | + | |
| - | + | ||
| - | Microcontrollerul ATmega328P are doar 32 KB Flash și 2 KB SRAM. În timpul dezvoltării, încercarea de a include toate funcțiile într-un singur firmware a dus la depășirea limitei de Flash sau la instabilitate runtime, mai ales când erau folosite simultan: | + | |
| * biblioteca SD; | * biblioteca SD; | ||
| * biblioteca RCSwitch; | * biblioteca RCSwitch; | ||
| Line 248: | Line 232: | ||
| * meniurile OLED; | * meniurile OLED; | ||
| * analiza WiFi; | * analiza WiFi; | ||
| - | * captură RF raw. | ||
| - | |||
| - | Soluția finală a fost separarea proiectului în două coduri: | ||
| - | * firmware-ul **main_demo**, pentru demonstrația completă RFID/WiFi/SD și raw RF; | ||
| - | * firmware-ul **rf_demo**, pentru demonstrația specializată RF cu RCSwitch și salvare pe SD. | ||
| - | Această abordare este mai robustă decât un meniu de alegere la pornire, deoarece un meniu runtime nu reduce dimensiunea binarului. Dacă toate modulele sunt compilate în același firmware, ele ocupă memorie chiar dacă nu sunt selectate de utilizator. | + | Solutia finala a fost separarea proiectului in doua coduri: |
| + | * firmware-ul **main_demo**, pentru functionalitate RFID/WiFi/SD si raw RF; | ||
| + | * firmware-ul **rf_demo**, pentru functionalitate specializata RF cu RCSwitch si salvare pe SD. | ||
| ==== Firmware 1: Flipper One Main ==== | ==== Firmware 1: Flipper One Main ==== | ||
| - | Firmware-ul principal păstrează majoritatea funcționalităților inițiale ale proiectului: | + | Firmware-ul principal si cel mai "product ready" din cele 2: |
| - | * captură RF raw; | + | * captura RF raw; |
| * retransmitere RF raw; | * retransmitere RF raw; | ||
| * scanare RFID; | * scanare RFID; | ||
| * salvare UID RFID pe card MicroSD; | * salvare UID RFID pe card MicroSD; | ||
| - | * scanare WiFi cu ESP-01; | + | * scanare WiFi cu ESP-01 si salvare autoamta in `WIFIDB.TXT` a retelelor; |
| - | * salvare scanare WiFi în `WIFIDB.TXT`; | + | * analiza WiFi pe OLED; |
| - | * analiză WiFi pe OLED; | + | * browser SD pentru fisierele salvate; |
| - | * browser SD pentru fișierele salvate; | + | |
| * status general. | * status general. | ||
| - | === Captură RF raw === | + | === Captura RF raw === |
| - | În modul raw, receptorul RF este conectat la D2, iar codul folosește întreruperea externă INT0 pentru a măsura timpul dintre tranzițiile semnalului. Fiecare durată este salvată într-un buffer de tip `uint16_t`. | + | In modul raw, receptorul RF este conectat la D2, iar codul foloseste intreruperea externa INT0 pentru a masura timpul dintre tranzitiile semnalului. Fiecare durata este salvata intr-un buffer de tip `uint16_t`. |
| - | Avantajul acestei abordări este că nu presupune cunoașterea protocolului. În teorie, poate captura orice secvență de impulsuri OOK/ASK suficient de simplă. | + | Avantajul acestei abordari este ca nu presupune cunoasterea protocolului. In teorie, poate captura orice secventa de impulsuri OOK/ASK suficient de simpla. |
| - | Dezavantajul major este sensibilitatea la zgomot. Receptorul SRX887 poate genera tranziții chiar și în lipsa unui semnal real, din cauza AGC-ului și a zgomotului RF din mediu. Astfel, bufferul se poate umple cu zgomot înainte ca utilizatorul să apese telecomanda. Din acest motiv, captura RF raw este implementată, dar nu este partea cea mai stabilă a proiectului. | + | Dezavantajul major este sensibilitatea la zgomot. Receptorul SRX887 poate genera tranzitii chiar si in lipsa unui semnal real, din cauza AGC-ului si a zgomotului RF din mediu. Astfel, bufferul se poate umple cu zgomot inainte ca utilizatorul sa apese telecomanda. Din acest motiv, captura RF este cea mai instabila parte a proiectului. |
| === RFID === | === RFID === | ||
| - | Modulul PN532 este controlat prin I2C. Pentru economie de memorie, nu este folosită biblioteca completă Adafruit PN532, ci un driver minimal care implementează doar comenzile necesare: | + | Modulul PN532 este controlat prin I2C. Pentru economie de memorie, nu este folosita biblioteca completa Adafruit PN532, ci un driver minimal care implementeaza doar comenzile necesare: |
| - | * `GetFirmwareVersion` pentru verificarea prezenței modulului; | + | * `GetFirmwareVersion` pentru verificarea prezentei modulului; |
| * `SAMConfiguration` pentru configurarea modului normal; | * `SAMConfiguration` pentru configurarea modului normal; | ||
| * `InListPassiveTarget` pentru citirea cardurilor ISO14443A. | * `InListPassiveTarget` pentru citirea cardurilor ISO14443A. | ||
| - | După detectarea unui card, UID-ul este afișat pe OLED și poate fi salvat pe SD într-un fișier `.UID`. Numele fișierului este generat automat, iar indexul fișierelor salvate este păstrat în `UIDIDX.TXT`. | + | Dupa detectarea unui card, UID-ul este afisat pe OLED si poate fi salvat pe SD intr-un fisier `.UID`. Numele fisierului este generat automat, iar indexul fisierelor salvate este pastrat in `UIDIDX.TXT`. |
| - | Exemplu format fișier RFID: | + | Exemplu format fisier RFID: |
| <code text> | <code text> | ||
| Line 292: | Line 272: | ||
| UID=04A1B2C3 | UID=04A1B2C3 | ||
| </code> | </code> | ||
| - | |||
| - | Această parte a proiectului funcționează foarte bine și a fost una dintre cele mai stabile funcționalități obținute. | ||
| === WiFi === | === WiFi === | ||
| - | Pentru scanarea WiFi este folosit un modul ESP-01 / ESP8266 cu firmware AT. Arduino comunică prin SoftwareSerial și trimite comanda: | + | Pentru scanarea WiFi este folosit un modul ESP-01 / ESP8266 cu firmware AT. Arduino comunica prin SoftwareSerial si trimite comanda: |
| <code text> | <code text> | ||
| Line 303: | Line 281: | ||
| </code> | </code> | ||
| - | Răspunsurile de forma `+CWLAP:(...)` sunt salvate pe cardul MicroSD în fișierul `WIFIDB.TXT`. Pentru a economisi RAM, rețelele nu sunt păstrate într-un vector mare, ci sunt scrise direct pe SD și apoi citite la nevoie. | + | Raspunsurile de forma `+CWLAP:(...)` sunt salvate automat pe cardul MicroSD in fisierul `WIFIDB.TXT`. Am luat aceasta decizie de implementare pentru a economisi RAM, retelele nefiind pastrate intr-un vector mare, ci scrise direct pe SD si apoi citite la nevoie. |
| - | Date analizate pentru fiecare rețea: | + | Date analizate pentru fiecare retea: |
| * SSID; | * SSID; | ||
| * RSSI; | * RSSI; | ||
| Line 314: | Line 292: | ||
| * cipher pairwise/group; | * cipher pairwise/group; | ||
| * protocol b/g/n; | * protocol b/g/n; | ||
| - | * observații simple despre calitatea semnalului și congestie. | + | * observatii simple despre calitatea semnalului si congestie. |
| - | + | ||
| - | Scanarea WiFi și analiza rezultatelor funcționează foarte bine. Aceasta a devenit una dintre cele mai reușite părți ale proiectului. | + | |
| === SD Browser === | === SD Browser === | ||
| - | Firmware-ul principal include un browser simplu de fișiere salvate. Pentru a evita directoarele și operații costisitoare pe SD, sunt folosite fișiere index: | + | Firmware-ul principal include un browser simplu de fisiere salvate. Acesta citeste indexul linie cu linie si afiseaza fisierele pe OLED. Pentru a evita directoarele si operatii costisitoare pe SD, sunt folosite fisiere index: |
| * `UIDIDX.TXT` pentru UID-uri RFID; | * `UIDIDX.TXT` pentru UID-uri RFID; | ||
| - | * `RFIDX.TXT` pentru capturi RF raw, în varianta inițială; | + | * `RFIDX.TXT` pentru capturi RF raw, in varianta initiala; |
| - | * `WIFIDB.TXT` pentru scanarea WiFi curentă. | + | * `WIFIDB.TXT` pentru scanarea WiFi curenta. |
| - | + | ||
| - | Browserul citește indexul linie cu linie și afișează fișierele pe OLED. | + | |
| ==== Firmware 2: Flipper One RF ==== | ==== Firmware 2: Flipper One RF ==== | ||
| - | Firmware-ul RF este o variantă specializată pentru testarea RF 433 MHz. Acesta include: | + | Firmware-ul RF este o varianta specializata pentru testarea RF 433 MHz. Acesta include: |
| * OLED; | * OLED; | ||
| * PCF8574 + butoane; | * PCF8574 + butoane; | ||
| Line 337: | Line 311: | ||
| * MicroSD pentru salvarea codurilor RF decodate. | * MicroSD pentru salvarea codurilor RF decodate. | ||
| - | Nu include PN532, ESP-01 sau analiza WiFi, tocmai pentru a păstra suficient spațiu pentru RCSwitch și pentru logica de salvare RF. | + | Nu include PN532, ESP-01 sau analiza WiFi, tocmai pentru a pastra suficient spatiu pentru RCSwitch, pentru logica de salvare RF si ca devena redundant. |
| Meniul firmware-ului RF: | Meniul firmware-ului RF: | ||
| - | * **Capture RF** – așteaptă un cod RF compatibil RCSwitch; | + | * **Capture RF** - asteapta un cod RF compatibil RCSwitch; |
| - | * **Emit Last** – retransmite ultimul cod capturat sau încărcat; | + | * **Emit Last** - retransmite ultimul cod capturat sau incarcat; |
| - | * **Save Last** – salvează codul RF curent pe SD; | + | * **Save Last** - salveaza codul RF curent pe SD; |
| - | * **Saved RF** – listează fișierele RF salvate și permite încărcarea lor; | + | * **Saved RF** - listeaza fisierele RF salvate si permite incarcarea lor; |
| - | * **Status** – afișează valoarea, bit length, protocolul, delay-ul și starea SD. | + | * **Status** - afiseaza valoarea, bit length, protocolul, delay-ul si starea SD. |
| - | === Captură RF cu RCSwitch === | + | === Captura RF cu RCSwitch === |
| - | În acest firmware, în loc să se salveze tranzițiile brute, biblioteca RCSwitch încearcă să decodeze semnalul. Dacă reușește, firmware-ul reține: | + | In acest firmware, in loc sa se salveze tranzitiile brute, biblioteca RCSwitch incearca sa decodeze semnalul. Daca reuseste, firmware-ul retine: |
| - | * `value` – valoarea numerică decodată; | + | * `value` - valoarea numerica decodata; |
| - | * `bits` – numărul de biți; | + | * `bits` - numarul de biti; |
| - | * `protocol` – protocolul detectat de RCSwitch; | + | * `protocol` - protocolul detectat de RCSwitch; |
| - | * `delayUs` – lungimea pulsului. | + | * `delayUs` - lungimea pulsului. |
| - | Această reprezentare este mult mai compactă decât raw pulse capture. Un cod RF poate fi salvat în câțiva bytes, în timp ce varianta raw are nevoie de un buffer de durate. | + | Aceasta reprezentare este mult mai compacta decat raw pulse capture. Un cod RF poate fi salvat in cativa bytes, in timp ce varianta raw are nevoie de un buffer de durate. |
| === Salvarea RF pe SD === | === Salvarea RF pe SD === | ||
| - | În firmware-ul RF, codurile decodate pot fi salvate pe card MicroSD în fișiere separate, similar cu salvarea UID-urilor RFID. Există un fișier index `RFIDX.TXT`, iar fiecare cod RF este salvat într-un fișier `.RFC`. | + | In firmware-ul RF, codurile decodate pot fi salvate pe card MicroSD in fisiere separate, similar cu salvarea UID-urilor RFID. Exista un fisier index `RFIDX.TXT`, iar fiecare cod RF este salvat intr-un fisier `.RFC`. |
| - | Exemplu: | + | La selectarea unui fisier din meniul **Saved RF**, codul este incarcat in RAM si poate fi retransmis prin **Emit Last**. |
| - | <code text> | + | === Limitari RF === |
| - | RFIDX.TXT | + | |
| - | R123456.RFC | + | |
| - | R234567.RFC | + | |
| - | </code> | + | |
| - | Format fișier `.RFC`: | + | Desi firmware-ul RF este mai eficient si mai bine structurat decat captura raw, rezultatele practice nu au fost perfecte. Uneori receptorul produce zgomot si RCSwitch nu decodeaza nimic valid. Alteori semnalul telecomenzii nu este compatibil cu protocoalele suportate. Astfel, partea RF ramane cea mai instabila parte a proiectului. |
| - | <code text> | + | ==== Folosirea conceptelor din laboratoare ==== |
| - | VAL=1234567 | + | |
| - | BITS=24 | + | |
| - | PROTO=1 | + | |
| - | DELAY=350 | + | |
| - | </code> | + | |
| - | La selectarea unui fișier din meniul **Saved RF**, codul este încărcat în RAM și poate fi retransmis prin **Emit Last**. | + | Proiectul foloseste mai multe concepte din laboratoarele de Proiectarea cu Microprocesoare. Am incercat sa le aplic practic, nu doar separat, ci intr-un sistem in care toate modulele trebuie sa functioneze impreuna: |
| - | === Limitări RF === | + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab0-2024|Laboratorul 0 - GPIO]] - configurarea pinilor digitali pentru LED RGB, RF TX, chip select-uri SPI si semnale de control. |
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab1-2023|Laboratorul 1 - UART]] - comunicatia cu ESP-01 prin SoftwareSerial si comenzi AT. | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023|Laboratorul 2 - Intreruperi]] - folosirea pinului D2 / INT0 pentru receptia RF raw si pentru receptia RCSwitch. | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023-2024|Laboratorul 3 - Timere si PWM]] - controlul LED-ului RGB cu `analogWrite()` pe pinii D3, D5 si D6. | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab5-2023-2024|Laboratorul 5 - SPI]] - comunicatia cu OLED-ul si cardul MicroSD pe aceeasi magistrala SPI, cu CS-uri separate. | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab6-2023-2024|Laboratorul 6 - I2C]] - comunicatia cu PCF8574 si PN532 pe A4/A5. | ||
| - | Deși firmware-ul RF este mai eficient și mai bine structurat decât captura raw, rezultatele practice nu au fost perfecte. Uneori receptorul produce zgomot și RCSwitch nu decodează nimic valid. Alteori semnalul telecomenzii nu este compatibil cu protocoalele suportate. Astfel, partea RF rămâne cea mai instabilă parte a proiectului. | + | Pe langa laboratoarele propriu-zise, am folosit si concepte de organizare software: masina de stari pentru meniuri, fisiere index pe SD, separarea proiectului in doua firmware-uri si optimizarea memoriei pentru ATmega328P. |
| - | Totuși, salvarea pe SD din firmware-ul RF funcționează, iar structura software este corectă: atunci când un cod este capturat valid, acesta poate fi salvat, încărcat și retransmis. | + | ==== Optimizari importante ==== |
| - | ==== Folosirea conceptelor din laboratoare ==== | + | Pentru a rula pe Arduino UNO, au fost necesare mai multe optimizari: |
| - | + | * folosirea U8x8 in loc de un framebuffer complet pentru OLED; | |
| - | Proiectul folosește mai multe concepte studiate în laboratoarele de Proiectarea cu Microprocesoare: | + | * salvarea scanarilor WiFi direct pe SD, nu in RAM; |
| - | + | * folosirea de stringuri in PROGMEM; | |
| - | * **GPIO** – configurarea și folosirea pinilor digitali pentru LED RGB, RF TX, chip select-uri SPI și semnale de control. | + | * implementare minimala PN532; |
| - | * **Întreruperi** – folosirea pinului D2 / INT0 pentru recepția RF raw și pentru recepția RCSwitch. | + | |
| - | * **PWM / Timere** – controlul LED-ului RGB cu `analogWrite()` pe pinii D3, D5 și D6. | + | |
| - | * **SPI** – comunicația cu OLED-ul și cardul MicroSD. | + | |
| - | * **I2C / TWI** – comunicația cu PCF8574 și PN532 pe A4/A5. | + | |
| - | * **UART / SoftwareSerial** – comunicația cu ESP-01 prin comenzi AT. | + | |
| - | * **Sisteme de fișiere pe SD** – salvarea și citirea persistentă a UID-urilor RFID, scanărilor WiFi și codurilor RF. | + | |
| - | * **Mașină de stări** – meniul principal și submeniurile sunt gestionate prin stări software. | + | |
| - | * **Optimizare de memorie** – folosirea PROGMEM, U8x8 fără framebuffer, fișiere index și separarea proiectului în două firmware-uri. | + | |
| - | + | ||
| - | ==== Optimizări importante ==== | + | |
| - | + | ||
| - | Pentru a rula pe Arduino UNO, au fost necesare mai multe optimizări: | + | |
| - | * folosirea U8x8 în loc de un framebuffer complet pentru OLED; | + | |
| - | * salvarea scanărilor WiFi direct pe SD, nu în RAM; | + | |
| - | * folosirea de stringuri în PROGMEM; | + | |
| - | * implementare minimală PN532; | + | |
| * limitarea bufferelor locale; | * limitarea bufferelor locale; | ||
| - | * dezactivarea Serial debug în build-ul final; | + | * dezactivarea Serial debug in build-ul final; |
| - | * modularizarea în două firmware-uri separate. | + | * modularizarea in doua firmware-uri separate. |
| - | Această modularizare a fost probabil cea mai importantă decizie software. Fără ea, proiectul era prea mare pentru ATmega328P. | + | Fara aceste modularizari proiectul ar fi fost prea mare pentru ATmega328P. In momentul de fata, firmware-ul main atinge 99.5% din memoria flash. |
| - | ===== Rezultate obținute ===== | + | ===== Rezultate obtinute ===== |
| - | În urma implementării și testării, rezultatele au fost mixte, dar în general peste așteptări pentru un proiect realizat pe Arduino UNO cu atât de multe periferice conectate simultan. | + | In urma implementarii, asamblarii si testarii FlipperOne, s-au obtinut urmatoarele rezultate ce confirma atingerea si depasirea obiectivelor initial propuse: |
| + | - RFID: | ||
| + | * PN532 este initializat corect pe I2C; | ||
| + | * cardurile/tag-urile ISO14443A sunt detectate; | ||
| + | * UID-ul este afisat corect pe OLED; | ||
| + | * UID-ul poate fi salvat pe MicroSD; | ||
| + | * fisierele salvate pot fi regasite prin index. | ||
| + | - Wi-Fi, a depasit asteptarile: | ||
| + | * ESP-01 raspunde la comenzile AT, scaneaza retelele din jur si le salveaza automat in `WIFIDB.TXT`; | ||
| + | * lista retelelor poate fi afisata pe OLED; | ||
| + | * detaliile fiecarei retele pot fi analizate; | ||
| + | * analiza include RSSI, securitate, canal, MAC/BSSID, WPS si observatii simple. | ||
| + | - RF raw, foarte sensibil la zgomot: | ||
| + | * Captura RF raw este instabila in practica. Uneori receptorul capteaza foarte mult zgomot, alteori semnalul util nu poate fi separat clar de zgomot. Aceasta problema vine atat din natura receptorului RF, cat si din limitarile Arduino UNO. | ||
| + | * Raw RF ramane insa interesant ca experiment, deoarece arata cum pot fi masurate tranzitiile folosind intreruperi, dar nu este suficient de stabil pentru o demonstratie sigura de tip "captureaza telecomanda si retransmite". | ||
| + | - RF cu RCSwitch: | ||
| + | * Firmware-ul RF cu RCSwitch este mai curat si mai eficient, dar nu rezolva complet problema. Daca telecomanda foloseste un protocol suportat si semnalul este curat, codul poate fi decodat si salvat. Daca semnalul este zgomotos sau protocolul nu este compatibil, nu apare nicio captura valida. | ||
| + | * Totusi, modulul RF dedicat ar trebui sa aiba urmatoarele functionalitati functionale: captura RCSwitch atunci cand semnalul este compatibil, afisarea codului decodat, retransmiterea codului decodat, salvarea codului pe SD in fisiere `.RFC`, listarea si incarcarea codurilor RF salvate. | ||
| - | ==== Funcționalități care merg foarte bine ==== | + | ==== Probleme intalnite ==== |
| - | === RFID === | + | Cele mai mari probleme au fost: |
| + | * zgomotul RF produs de receptor in lipsa unui semnal util; | ||
| + | * memoria Flash foarte limitata; | ||
| + | * memoria RAM limitata, mai ales cand SD, SoftwareSerial si OLED sunt folosite simultan; | ||
| + | * conflictele intalnite pe parcursul motanrii pe SPI intre OLED si MicroSD; | ||
| - | Partea de RFID funcționează foarte bine: | + | ===== Concluzii ===== |
| - | * PN532 este inițializat corect pe I2C; | + | |
| - | * cardurile/tag-urile ISO14443A sunt detectate; | + | |
| - | * UID-ul este afișat corect pe OLED; | + | |
| - | * UID-ul poate fi salvat pe MicroSD; | + | |
| - | * fișierele salvate pot fi regăsite prin index. | + | |
| - | Această funcționalitate este stabilă și poate fi demonstrată live fără probleme majore. | + | Proiectul a iesit mai bine decat ma asteptam, mai ales avand in vedere numarul mare de module conectate la un Arduino UNO. Cele mai stabile si reusite parti sunt RFID-ul si WiFi-ul: UID-urile sunt citite si salvate corect, iar scanarea WiFi impreuna cu analiza retelelor functioneaza foarte bine. |
| - | === WiFi === | + | Partea RF a fost cea mai dificila. Captura raw este foarte expusa la noise, iar varianta cu RCSwitch, desi mult mai eficienta, depinde de protocoalele suportate si de calitatea semnalului. Din acest motiv, RF-ul ramane o functionalitate partiala si experimentala in proiect. |
| + | Pe langa RF, resursele foarte limitate ale lui ATmega328P au adus mai multe **constrangerile de memorie** greu de rezolvat, combinatia dintre OLED, SD, ESP, PN532, RF Raw/RCSwitch a fortat optimizari serioase. In final, modularizarea in doua firmware-uri separate a fost solutia corecta: firmware-ul principal pentru RFID/WiFi/SD/RFraw si firmware-ul RF pentru captura/decodare/salvare RF. | ||
| - | Partea de WiFi este una dintre cele mai reușite părți ale proiectului: | + | ===== Link-uri si Resurse ===== |
| - | * ESP-01 răspunde la comenzile AT; | + | |
| - | * scanarea rețelelor din jur funcționează; | + | |
| - | * rezultatele sunt salvate în `WIFIDB.TXT`; | + | |
| - | * lista rețelelor poate fi afișată pe OLED; | + | |
| - | * detaliile fiecărei rețele pot fi analizate; | + | |
| - | * analiza include RSSI, securitate, canal, MAC/BSSID, WPS și observații simple. | + | |
| - | Pentru un Arduino UNO, faptul că analiza WiFi se face fără a păstra toate rețelele în RAM este un rezultat important. | + | Pentru documentarea si realizarea acestui proiect, am consultat urmatoarele resurse tehnice si bibliografii: |
| - | ==== Funcționalități parțial funcționale ==== | + | ==== Cod ==== |
| - | === RF raw în firmware-ul principal === | + | * **GitHub:** [[https://github.com/George0Simion/FlipperOne|FlipperOne]] |
| - | Captura RF raw este implementată, dar este instabilă în practică. Uneori receptorul captează foarte mult zgomot, alteori semnalul util nu poate fi separat clar de zgomot. Această problemă vine atât din natura receptorului RF, cât și din limitările Arduino UNO. | + | ==== Laboratoare PM ==== |
| - | + | ||
| - | Raw RF rămâne interesant ca experiment, deoarece arată cum pot fi măsurate tranzițiile folosind întreruperi, dar nu este suficient de stabil pentru o demonstrație sigură de tip „capturează telecomanda și retransmite”. | + | |
| - | + | ||
| - | === RF cu RCSwitch în firmware-ul RF === | + | |
| - | + | ||
| - | Firmware-ul RF cu RCSwitch este mai curat și mai eficient, dar nu rezolvă complet problema. Dacă telecomanda folosește un protocol suportat și semnalul este curat, codul poate fi decodat și salvat. Dacă semnalul este zgomotos sau protocolul nu este compatibil, nu apare nicio captură validă. | + | |
| - | + | ||
| - | Totuși, modulul RF dedicat are următoarele funcționalități funcționale: | + | |
| - | * captură RCSwitch atunci când semnalul este compatibil; | + | |
| - | * afișarea codului decodat; | + | |
| - | * retransmiterea codului decodat; | + | |
| - | * salvarea codului pe SD în fișiere `.RFC`; | + | |
| - | * listarea și încărcarea codurilor RF salvate. | + | |
| - | + | ||
| - | Partea de salvare pe SD din firmware-ul RF funcționează, iar structura fișierelor este clară și ușor de verificat manual pe calculator. | + | |
| - | + | ||
| - | ==== Probleme întâlnite ==== | + | |
| - | + | ||
| - | Cele mai mari probleme au fost: | + | |
| - | * zgomotul RF produs de receptor în lipsa unui semnal util; | + | |
| - | * bufferul mic disponibil pentru raw RF; | + | |
| - | * incompatibilitatea unor telecomenzi cu RCSwitch; | + | |
| - | * memoria Flash foarte limitată; | + | |
| - | * memoria RAM limitată, mai ales când SD, SoftwareSerial și OLED sunt folosite simultan; | + | |
| - | * conflictele potențiale pe SPI între OLED și MicroSD, rezolvate prin control atent al pinilor CS. | + | |
| - | + | ||
| - | ===== Concluzii ===== | + | |
| - | Proiectul a ieșit mai bine decât mă așteptam, mai ales având în vedere numărul mare de module conectate la un Arduino UNO. Cele mai stabile și reușite părți sunt RFID-ul și WiFi-ul: UID-urile sunt citite și salvate corect, iar scanarea WiFi împreună cu analiza rețelelor funcționează foarte bine. | + | Resurse utilizate pentru implementarea interfetelor, perifericelor si comunicatiilor cu modulele externe: |
| - | Partea RF a fost cea mai dificilă. Captura raw este foarte expusă la noise, iar varianta cu RCSwitch, deși mult mai eficientă, depinde de protocoalele suportate și de calitatea semnalului. Din acest motiv, RF-ul rămâne o funcționalitate parțială și experimentală în proiect. | + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab0-2024|Lab 0 - GPIO]] |
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab1-2023|Lab 1 - UART]] | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023|Lab 2 - Intreruperi]] | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023-2024|Lab 3 - Timere / PWM]] | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab5-2023-2024|Lab 5 - SPI]] | ||
| + | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab6-2023-2024|Lab 6 - I2C / TWI]] | ||
| - | Cea mai importantă lecție a fost legată de **constrângerile de memorie**. ATmega328P are resurse foarte limitate, iar combinația dintre OLED, SD, ESP, PN532, RF și RCSwitch a forțat optimizări serioase. În final, modularizarea în două firmware-uri separate a fost soluția corectă: firmware-ul principal pentru RFID/WiFi/SD și firmware-ul RF pentru captură/decodare/salvare RF. | + | ==== Datasheet-uri si Documentatii Componente ==== |
| - | Chiar dacă RF-ul nu este perfect, proiectul demonstrează integrarea unui număr mare de periferice și concepte embedded într-un singur montaj. Din punct de vedere educațional, proiectul și-a atins scopul: am lucrat cu GPIO, întreruperi, PWM, SPI, I2C, UART software, card SD, management de memorie și proiectare software modulară. | + | Documentatia tehnica oficiala a componentelor si bibliotecilor utilizate: |
| - | ===== Bibliografie / Resurse ===== | + | * **Microcontroler:** [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]] |
| + | * **Arduino UNO:** [[https://docs.arduino.cc/hardware/uno-rev3/|Arduino UNO Rev3 Documentation]] | ||
| + | * **PlatformIO:** [[https://docs.platformio.org/|PlatformIO Documentation]] | ||
| + | * **OLED SH1106 / U8g2-U8x8:** [[https://github.com/olikraus/u8g2|U8g2 / U8x8 Library]] | ||
| + | * **RCSwitch:** [[https://github.com/sui77/rc-switch|RCSwitch Library]] | ||
| + | * **ESP8266 / ESP-01 AT Commands:** [[https://www.espressif.com/sites/default/files/4a-esp8266_at_instruction_set_en_v1.5.4_0.pdf|ESP8266 AT Instruction Set]] | ||
| + | * **PN532 RFID/NFC:** [[https://www.nxp.com/docs/en/user-guide/141520.pdf|PN532 NXP User Manual]] | ||
| + | * **Arduino SD Library:** [[https://docs.arduino.cc/libraries/sd/|SD Library Documentation]] | ||
| - | * Documentație Arduino UNO / ATmega328P | + | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |
| - | * Documentație PlatformIO | + | |
| - | * Documentație U8g2 / U8x8 | + | |
| - | * Documentație RCSwitch | + | |
| - | * Documentație ESP8266 AT Commands | + | |
| - | * Documentație PN532 | + | |
| - | * Documentație SD library Arduino | + | |
| - | * Laboratoarele de Proiectarea cu Microprocesoare: GPIO, întreruperi, PWM/timere, SPI, I2C, UART | + | |