Základní popis RFID terminálu a popis hardware
Právě se nacházíte: Home / vyvoj /
Podrobný popis změn a vylepšení mezi verzemi
hlavní změny a vylepšení od verze 1.44, které přináší verze 1.50 oproti starším verzím.
Analýza vychází z interní dokumentace a struktury kódu verze 1.50, která ukazuje na zásadní posun ve funkčnosti a spolehlivosti.
1. Zásadní vylepšení spolehlivosti a stability systému
- Optimalizace paměti: Jednou z nejdůležitějších změn je kompletní přechod od dynamických
Stringobjektů k polím znaků s pevnou velikostí. Tato změna zabraňuje tzv. fragmentaci paměti, která u starších verzí mohla po delší době nepřetržitého provozu vést k pádům systému, i když se zdálo, že je volné paměti dostatek. - Automatická kontrola stavu: Byla zavedena nová funkce, která se spouští každou minutu a aktivně monitoruje "zdraví" systému. Kontroluje stav WiFi připojení a množství volné paměti. Pokud se spojení nepodaří po několika pokusech obnovit nebo pokud volná paměť klesne pod kritickou mez, systém se sám bezpečně restartuje. Tím se aktivně předchází "zamrznutí" zařízení v nefunkčním stavu.
- Plánovaný denní restart: Ve webovém rozhraní je nyní možné nastavit přesný čas pro automatický denní restart. Tato funkce pomáhá udržovat systém dlouhodobě stabilní a "čistý".
2. Nový systém pro ukládání a odesílání dat ("Ping-Pong" režim)
Toto je klíčová novinka pro zajištění, že se žádná data neztratí.
- Ochrana proti ztrátě dat: Data z přiložené karty se nyní okamžitě a paralelně ukládají na tři místa: do rychlé fronty v operační paměti (RAM), do souboru v interní paměti zařízení (SPIFFS) a jako třetí záloha na SD kartu.
- Mechanismus "Ping-Pong": Systém inteligentně střídá zápis do dvou různých souborů v interní paměti. Zatímco se data odesílají z jednoho souboru, nové záznamy se bezpečně ukládají do druhého. Neodeslaná data se nikdy nemažou přímo; místo toho se řádky, které se nepodařilo odeslat, zkopírují do dočasného souboru. Původní soubor se smaže až po úspěšném přejmenování dočasného souboru. Tím je zaručeno, že ani při náhlém výpadku napájení během odesílání nedojde ke ztrátě dat.
- Okamžité odeslání: Po přiložení karty se data nejen bezpečně uloží, ale systém se také okamžitě pokusí odeslat všechny dříve neodeslané záznamy na server.
3. Vzdálená aktualizace firmwaru (OTA) přes SD kartu
- Jednoduchá aktualizace přes web: Do webového rozhraní byla přidána nová sekce "Aktualizace Firmware (OTA)". Uživatel nyní může jednoduše nahrát nový firmware (soubor
.bin) přímo přes prohlížeč. - Robustní a bezpečný proces: Nahrávaný soubor se nejprve bezpečně uloží na SD kartu. Tím se předejde problémům s nedostatkem paměti samotného ESP32 během aktualizace. Teprve po kompletním a ověřeném nahrání na kartu se spustí samotný proces aktualizace, po kterém se zařízení automaticky restartuje již s novým firmwarem.
4. Rozšířená podpora hardwaru a interakce s uživatelem
- Plná integrace SD karty: SD karta již neslouží jen jako pasivní úložiště, ale je klíčovou součástí pro OTA aktualizace a pro zálohování denních logů. Její stav (přítomnost, volné místo) je navíc viditelný ve webovém rozhraní.
- Vylepšené ovládání displeje:
- Automatické ztlumení OLED: Pokud je připojen OLED displej, po 30 sekundách nečinnosti se automaticky ztlumí, aby se šetřila jeho životnost. Při jakékoliv aktivitě (stisk tlačítka, přiložení karty) se opět okamžitě rozsvítí na plný jas.
- Ochrana proti přepisování: Zobrazení je nyní chráněno, aby se zabránilo situaci, kdy by se například dočasná zpráva o načtení karty okamžitě přepsala periodickou aktualizací času.
- Nová tlačítka a "Info režim": Byla přidána podpora pro čtyři hardwarová tlačítka. Jedno z tlačítek aktivuje speciální "Info režim". Pokud je tento režim aktivní, přiložení karty nespustí standardní logování, ale pouze zobrazí na displeji informace o držiteli karty, které si zařízení vyžádá ze serveru.
5. Modernizované webové rozhraní
- Jednotná stránka s nastavením: Všechna nastavení jsou nyní přehledně na jedné stránce, včetně nových voleb pro plánovaný restart nebo délku zobrazení informací o kartě.
- Prohlížeč logů na SD kartě: Byla přidána zcela nová stránka (
/sdlog), která umožňuje pohodlně procházet, stahovat nebo mazat jednotlivé denní log soubory uložené na SD kartě. - Stav systému: Na hlavní stránce se nyní zobrazují užitečné diagnostické informace, jako je doba běhu od posledního restartu, aktuální využití paměti a stav SD karty.
6. Změna architektury softwaru na vícejádrové zpracování
- Asynchronní operace: Největší architektonickou změnou je přechod na vícejádrové zpracování pomocí systému FreeRTOS. Operace, které mohou trvat déle (zápis na soubor, odesílání dat na server, dotaz na databázi), nyní běží na pozadí na druhém jádře procesoru.
- Okamžitá odezva: Díky tomu je hlavní smyčka programu, která obsluhuje čtení karet a tlačítek, vždy volná a systém reaguje na podněty okamžitě, i když na pozadí probíhá například odesílání velkého množství dat.
- Použití front a mutexů: Pro bezpečnou komunikaci mezi jednotlivými úlohami se nyní používají standardní programovací techniky jako fronty (pro předávání dat) a mutexy (pro ochranu sdílených zdrojů, jako je displej).
Závěr
Verze 1.50 představuje přerod z jednoduchého, lineárně fungujícího zařízení na komplexní a vysoce spolehlivý systém.
Je navržen pro dlouhodobý bezúdržbový provoz s maximální ochranou proti ztrátě dat a systémovým chybám, přičemž nabízí výrazně lepší možnosti správy a údržby na dálku.
Popis změn a nových funkcí, které se objevily mezi starší verzí (předpokládaně 1.37) a novou verzí 1.44
Popis vychází z analýzy kódu verze 1.37, který již obsahuje mnoho pokročilých funkcí a optimalizací, jež představují zásadní posun oproti základní verzi.
Změny verze 1.44 se zaměřují především na stabilitu, spolehlivost, uživatelský komfort a rozšíření hardwarových možností.
Přehled klíčových vylepšení ve verzi 1.44
1. Vzdálená aktualizace firmwaru (OTA) přes SD kartu
Jedná se o jednu z největších novinek. Systém nyní podporuje nahrání nového firmwaru na dálku přes webové rozhraní.
- Princip: Do webového rozhraní byla přidána sekce "Aktualizace Firmware (OTA)". Uživatel zde může nahrát soubor s novým firmwarem (koncovka
.bin). - Využití SD karty: Nahraný soubor se nejprve uloží na SD kartu pod názvem
update.bin. Tím se předchází problémům s nedostatkem operační paměti (RAM) v ESP32, což je častý problém u přímých OTA aktualizací. - Proces aktualizace: Jakmile je soubor kompletně nahrán na SD kartu, systém spustí aktualizační proces. Přečte soubor z karty a bezpečně přepíše starý firmware novým.
- Automatický restart: Po úspěšné aktualizaci se zařízení automaticky restartuje a spustí se již s novou verzí firmwaru.
- Předpoklad: Tato funkce vyžaduje jednorázovou úpravu rozdělení paměti (Partition Table) při prvním nahrání firmwaru přes USB kabel. Všechny další aktualizace již mohou probíhat na dálku.
2. Zásadní optimalizace paměti a zvýšení stability
Verze 1.44 se intenzivně zaměřuje na dlouhodobou stabilitu zařízení. Byly provedeny klíčové změny, které zabraňují fragmentaci paměti a pádům systému po delší době běhu.
- Nahrazení objektů
String: Většina operací s textovými řetězci byla přepsána. Místo dynamických objektůString, které způsobují fragmentaci paměti, se nyní používají pole znaků (charpole) s pevnou velikostí. To je výrazně rychlejší a paměťově šetrnější. - Periodická kontrola stavu systému: V pravidelných intervalech (např. každou minutu) se spouští funkce, která kontroluje "zdraví" zařízení:
- Stav sítě: Ověřuje, zda je zařízení stále připojeno k WiFi nebo Ethernetu. Pokud dojde ke ztrátě spojení, pokusí se ho automaticky obnovit.
- Stav paměti: Monitoruje množství volné paměti (Heap). Pokud volná paměť klesne pod kritickou mez (např. 20 KB), zařízení se preventivně restartuje. Tím se předejde pádu systému z důvodu nedostatku paměti.
- Automatický restart při chybě: Pokud se opakovaně nedaří obnovit síťové připojení nebo dojde k závažné fragmentaci paměti, systém se bezpečně restartuje, aby se obnovila jeho plná funkčnost.
3. Asynchronní operace (multitasking s FreeRTOS)
Pro zajištění plynulého chodu a okamžité reakce zařízení (např. při přiložení karty) byly časově náročné operace přesunuty do samostatných úloh, které běží na pozadí na druhém jádře procesoru.
- Asynchronní ukládání logů: Když je přiložena karta, data se již nezapisují přímo do souboru (což by mohlo na chvíli "zamrazit" systém). Místo toho se informace o kartě vloží do rychlé fronty. Samostatná úloha na pozadí si data z fronty vyzvedává a v klidu je zapisuje do souboru v paměti SPIFFS.
- Asynchronní dotazy na server: Podobně funguje i ověřování karty na vzdáleném serveru. Po přiložení karty se požadavek vloží do fronty a úloha na pozadí se postará o odeslání dotazu a zpracování odpovědi. Hlavní program tak nečeká na odpověď serveru a může okamžitě reagovat na další podněty.
- Asynchronní odesílání dat: Periodické odesílání nasbíraných dat z logu na server nyní také běží jako samostatná úloha na pozadí, která neblokuje hlavní funkce zařízení.
4. Vylepšená podpora hardwaru a nové funkce
- Plná podpora NFC čtečky (PN532): Kromě stávající 125kHz čtečky je nyní plně integrována i podpora pro NFC modul PN532. Systém automaticky detekuje jeho přítomnost a umožňuje číst UID z bezkontaktních karet i mobilních telefonů s NFC. Logika pro zpracování dat (včetně zamezení opakovaného čtení) je stejná jako u 125kHz čtečky.
- Pokročilá obsluha tlačítek: Byla implementována robustní, neblokující obsluha až čtyř tlačítek, včetně potlačení zákmitů (debouncing).
- Speciální "Info režim": Stiskem jednoho z tlačítek lze aktivovat dočasný "informační režim". Pokud je v tomto režimu přiložena karta, její ID se odešle na server se speciálním parametrem. To umožňuje například zjistit informace o držiteli karty, aniž by se tato událost zapsala do standardního logu docházky. Režim se po několika sekundách nebo po přiložení karty automaticky deaktivuje.
- Automatické ztlumení OLED displeje: Pokud je připojen OLED displej, jeho jas se po určité době nečinnosti (např. 30 sekund) automaticky sníží. Tím se šetří energie a prodlužuje životnost displeje. Jakákoliv aktivita (přiložení karty, stisk tlačítka) displej okamžitě "probudí" na plný jas.
5. Vylepšení webového rozhraní
Webové rozhraní pro správu zařízení bylo kompletně přepracováno a rozšířeno.
- Prohlížeč logů: Byla přidána nová stránka
/log, kde si uživatel může prohlédnout všechny záznamy uložené v paměti zařízení. - Správa logů: Přímo z webového rozhraní je nyní možné:
- Smazat celý log.
- Smazat jednotlivé řádky (záznamy).
- Spustit okamžité odeslání všech uložených dat na server.
- Stav systému: Na hlavní stránce s nastavením se nyní zobrazují užitečné systémové informace, jako je doba běhu zařízení a aktuální stav volné paměti.
- Manuální synchronizace času: Bylo přidáno tlačítko pro manuální spuštění synchronizace času s NTP serverem.
6. Robustnější autorizace při startu
Proces ověření licence zařízení při startu byl vylepšen, aby byl odolnější vůči dočasným problémům se sítí nebo serverem.
- Opakované pokusy: Pokud se autorizace při startu nepodaří, zařízení se automaticky restartuje a zkusí to znovu. Tento proces se opakuje až 5krát.
- Bezpečné zablokování: Pokud se autorizace nezdaří ani po 5 pokusech, zařízení se trvale zablokuje a na displeji zobrazí chybovou hlášku. Tím se zabrání jeho neautorizovanému použití.
Celkově je verze 1.44 obrovským krokem vpřed v oblasti stability, spolehlivosti a funkčnosti.
Díky asynchronnímu zpracování a pečlivé optimalizaci paměti je zařízení připraveno na dlouhodobý a bezproblémový provoz, zatímco nové funkce jako OTA a vylepšené webové rozhraní výrazně zjednodušují jeho správu.
Popis hlavních změn a novinek, které odlišují verzi 1.37 od předchozích verzí (kolem verze 1.30).
Přehled Změn: 1.30 vs. 1.37
Verze 1.37 představuje zásadní skok vpřed oproti starším verzím.
Hlavní důraz byl kladen na stabilitu, robustnost, rozšíření hardwarových možností a zásadní optimalizaci využití paměti.
Zatímco starší verze byly primárně funkční, nová verze je navržena pro dlouhodobý a spolehlivý provoz.
1. Klíčové Novinky a Funkce
a) Vzdálená Aktualizace Firmwaru (OTA) přes SD Kartu
Toto je jedna z nejvýznamnějších novinek. Systém nyní podporuje nahrání nového firmwaru (.bin souboru) přes webové rozhraní.
- Princip: Firmware se nejprve bezpečně uloží na SD kartu. Tím se předejde problémům s nedostatkem paměti RAM během nahrávání. Teprve po kompletním uložení souboru na SD kartu se spustí samotný proces aktualizace, který přepíše starou verzi firmwaru v paměti ESP32.
- Výhoda: Tato metoda je velmi spolehlivá a umožňuje snadnou údržbu zařízení na dálku, aniž by byl nutný fyzický přístup a připojení přes USB.
- Požadavek: Vyžaduje specifické rozdělení paměti (Partition Table), které musí být do zařízení nahráno při první instalaci této verze.
b) Podpora Nového Hardwaru
Funkčnost zařízení byla rozšířena o podporu nových periferií.
- NFC Čtečka (PN532): Kromě původní 125kHz RFID čtečky nyní systém podporuje i NFC čtečku PN532. Automaticky detekuje, zda je modul připojen, a pokud ano, aktivuje čtení NFC tagů a mobilních telefonů. Logika pro zpracování (včetně zamezení opakovaného čtení) je implementována pro oba typy čteček.
- Fyzická Tlačítka: Byla přidána podpora pro osm fyzických tlačítek připojených k různým GPIO pinům. Systém obsahuje mechanismus pro potlačení zákmitů (debouncing), který zajišťuje spolehlivou detekci stisku. To otevírá možnosti pro manuální ovládání zařízení.
c) Automatická Kontrola Stavu a "Sebeuzdravení"
Pro zajištění maximální stability byl implementován mechanismus, který periodicky kontroluje "zdraví" systému.
- Kontrola Sítě: Pravidelně ověřuje, zda je zařízení stále připojeno k WiFi. Pokud spojení spadne, pokusí se ho několikrát automaticky obnovit. Pokud se to nepodaří, zařízení se bezpečně restartuje, aby se předešlo jeho zablokování v nefunkčním stavu.
- Kontrola Paměti: Neustále monitoruje volnou paměť (Heap). Pokud paměť klesne pod kritickou mez (což je předzvěst pádu systému kvůli fragmentaci), systém provede preventivní restart. Tím se paměť vyčistí a obnoví se plná funkčnost.
2. Architektonická Vylepšení a Optimalizace
a) Zásadní Optimalizace Práce s Pamětí
Toto je klíčová změna pro dlouhodobou stabilitu. Starší verze intenzivně využívaly objekty String, které způsobovaly fragmentaci paměti a mohly vést k pádu zařízení po delší době běhu.
- Nahrazení
String: Téměř veškerá práce s textovými řetězci byla přepsána. Místo dynamickýchStringobjektů se nyní používají pole znaků (char array) s pevnou velikostí. To je výrazně rychlejší a nezpůsobuje fragmentaci paměti. - Bezpečné Formátování: Pro sestavování textů (např. pro odeslání na server) se používají bezpečné funkce jako
snprintf, které zabraňují přetečení bufferu.
b) Asynchronní (Neblokující) Operace
Mnoho operací, které dříve mohly "zamrznout" zařízení, nyní běží na pozadí na druhém jádře procesoru.
- Asynchronní Zápis Logu: Když je přiložena karta, záznam se okamžitě přidá do fronty a hlavní program pokračuje dál. Samotný zápis do souboru na SPIFFS provádí samostatná úloha na pozadí, takže zařízení zůstává plně responzivní.
- Asynchronní Dotazy na Server: Dotaz na server pro získání jména uživatele nebo odeslání logu již neblokuje hlavní smyčku. Je spuštěn jako samostatná úloha, takže zařízení může mezitím normálně číst další karty a aktualizovat displej.
c) Bezpečný Přístup k Displeji (Mutex)
Při použití více úloh (např. hlavní smyčka a úloha pro dotaz na server) hrozilo, že se pokusí zapisovat na displej ve stejný okamžik, což by vedlo k poškozenému zobrazení.
- Zámek Displeje: Byl implementován mechanismus "zámku" (Mutex), který zajišťuje, že na displej může v jeden okamžik zapisovat pouze jedna úloha. Ostatní musí počkat, až se displej uvolní. Tím je zaručeno, že zobrazená data jsou vždy konzistentní.
3. Vylepšení Uživatelského Rozhraní a Logiky
- Správa Času: Logika pro synchronizaci času byla vylepšena. Zařízení se primárně snaží získat přesný čas z internetu (NTP). Pokud se to podaří, nastaví tento čas i do hardwarových hodin (RTC). Pokud internet není dostupný, použije čas z RTC jako zálohu.
- Webové Rozhraní:
- Přibyla sekce pro nahrání firmwaru (OTA).
- Do nastavení byla přidána možnost konfigurovat délku RFID ID a interval odesílání dat.
- Zobrazuje se podrobný stav systému, včetně doby běhu a využití paměti.
- Logika Čteček: Byla vylepšena logika pro detekci opakovaně přiložené karty/tagu, aby se zamezilo nechtěnému vícenásobnému zpracování v krátkém čase.
Celkově lze říci, že verze 1.37 transformovala projekt z funkčního prototypu na robustní a spolehlivé zařízení připravené na reálné nasazení, s pokročilými funkcemi pro údržbu a monitorování.
ESP32-RFID27 (verze 1.27) a ESP32-RFID32 (verze 1.30).
Verze 1.30 představuje zásadní posun od jednoduchého online terminálu k robustní a autonomní jednotce pro sběr dat.
Hlavní důraz byl kladen na spolehlivost, stabilitu a schopnost fungovat offline.
Přehled klíčových rozdílů
| Funkce / Oblast | Verze 1.27 (ESP32-RFID27) |
Verze 1.30 (ESP32-RFID32) |
Význam změny |
|---|---|---|---|
| Zpracování dat | Okamžité odeslání (data se mohou ztratit) | Ulož a pošli (Store-and-Forward) | Žádná ztráta dat i při výpadku sítě. |
| Stabilita systému | Pasivní (vyžaduje ruční restart při problému) | Aktivní samoobnova a monitoring | Vysoká spolehlivost pro dlouhodobý provoz. |
| Webové rozhraní | Pouze základní nastavení | Nastavení + správa a prohlížení logu | Plná kontrola a přehled nad zařízením. |
| Konfigurace | Pevně dané parametry | Možnost nastavit délku RFID a interval odesílání | Větší flexibilita a přizpůsobení. |
| Optimalizace | Standardní kód | Výrazná optimalizace paměti a výkonu | Vyšší rychlost a stabilita, prevence pádů. |
Detailní popis změn
1. Zpracování a ukládání dat (Největší změna)
- Verze 1.27:
- Fungovala v režimu "všechno, nebo nic".
- Po načtení karty se pokusila data okamžitě odeslat na vzdálený server.
- Pokud server nebo síť nebyly v daný moment dostupné, informace o přiložení karty byla nenávratně ztracena.
- Verze 1.30: Implementuje robustní mechanismus "Ulož a pošli" (Store-and-Forward).
- Každé úspěšné načtení karty (RFID i NFC) se okamžitě uloží do souboru v interní paměti zařízení (
/rfid_log.ea). Tím je zajištěno, že záznam je bezpečně uchován. - Na pozadí běží nová, samostatná úloha, která se v pravidelných, nastavitelných intervalech pokouší odeslat uložená data na server.
- Záznam je z interního logu smazán až poté, co server potvrdí jeho úspěšné přijetí.
- Význam: Zařízení nyní může fungovat zcela autonomně i několik dní bez připojení k síti. Jakmile se spojení obnoví, automaticky odešle všechny nasbírané záznamy. Je tak zaručena 100% doručitelnost dat.
- Každé úspěšné načtení karty (RFID i NFC) se okamžitě uloží do souboru v interní paměti zařízení (
2. Stabilita a samoobnova systému
- Verze 1.27:
- Neměla žádnou aktivní kontrolu svého stavu.
- Pokud v průběhu času došlo k problému (např. dočasný výpadek WiFi, postupné zaplnění paměti kvůli fragmentaci), zařízení se mohlo "zaseknout" a přestat fungovat, což vyžadovalo manuální restart.
- Verze 1.30: Zavádí automatickou kontrolu stavu systému, která běží periodicky na pozadí.
- Kontrola sítě: Aktivně sleduje, zda je zařízení připojeno k WiFi. Pokud spojení spadne, automaticky se ho pokusí obnovit. Pokud se to nepodaří ani po několika pokusech, provede bezpečný restart, aby se obnovila konektivita.
- Kontrola paměti (Heap): Toto je klíčová funkce pro dlouhodobou stabilitu. Systém monitoruje množství volné operační paměti. Pokud paměť klesne pod kritickou mez (což je častá příčina pádů u zařízení v nepřetržitém provozu), systém provede preventivní restart. Tím se paměť kompletně vyčistí a předejde se pádu systému.
- Význam: Zařízení je schopno se samo zotavit z běžných provozních problémů, což dramaticky zvyšuje jeho spolehlivost a snižuje potřebu údržby.
3. Rozšířené webové rozhraní a správa
- Verze 1.27:
- Webové rozhraní sloužilo pouze pro prvotní nastavení (přihlašovací údaje k WiFi, IP adresa serveru atd.).
- Verze 1.30: Webové rozhraní je výrazně rozšířeno o novou stránku
/log, která slouží jako administrační panel. Umožňuje:- Prohlížet kompletní obsah interního logu – tedy všechny záznamy, které čekají na odeslání.
- Ručně spustit odeslání všech dat na server tlačítkem "Odeslat data nyní".
- Mazat jednotlivé záznamy nebo vyčistit celý log.
- Význam: Administrátor má nyní plnou kontrolu a přehled o tom, jaká data jsou v zařízení uložena a může spravovat jejich odesílání.
4. Nové možnosti konfigurace
- Verze 1.27:
- Klíčové parametry, jako délka RFID kódu, byly pevně nastaveny v kódu.
- Verze 1.30: Do webového rozhraní byly přidány nové konfigurační volby:
- Délka RFID ID: Možnost vybrat, zda má čtečka zpracovávat 10 nebo 11 znaků dlouhé ID, což zvyšuje kompatibilitu s různými typy karet.
- Interval odesílání dat: Lze nastavit, jak často (v sekundách) se má zařízení pokoušet odesílat data ze svého interního logu.
- Význam: Zařízení je flexibilnější a lépe přizpůsobitelné konkrétním potřebám nasazení.
5. Optimalizace kódu a správy paměti
- Verze 1.27:
- Na mnoha místech v kódu byly použity standardní, ale pro vestavěná zařízení méně vhodné programovací techniky (např. časté používání objektů
String), které mohou při dlouhodobém běhu vést k fragmentaci paměti a následné nestabilitě.
- Na mnoha místech v kódu byly použity standardní, ale pro vestavěná zařízení méně vhodné programovací techniky (např. časté používání objektů
- Verze 1.30: Kód prošel významnou optimalizací. Klíčové části, jako je generování webových stránek, ukládání do souborů a zpracování dat, byly přepsány s důrazem na efektivní správu paměti.
- Význam: Výsledkem je nižší spotřeba paměti, vyšší rychlost a celkově robustnější a spolehlivější chod aplikace.
Závěr
Zatímco verze 1.27 byla funkčním prototypem, verze 1.30 je produkčně nasaditelný produkt.
Přechod na offline-first architekturu s automatickou synchronizací a přidání mechanismů pro samoobnovu systému jsou klíčové změny, které z tohoto zařízení dělají spolehlivý nástroj pro sběr dat v reálném světě.
Základní Popis aplikace
Tento program je firmware pro mikrokontrolér ESP32, který z něj vytváří pokročilý síťový RFID terminál.
Zařízení je navrženo pro systémy jako je docházka, kontrola přístupu nebo sběr dat, kde je potřeba identifikovat uživatele pomocí RFID čipu a zaznamenat tuto událost na vzdáleném serveru.
Systém je vysoce flexibilní díky podpoře duální síťové konektivity (drátový Ethernet i bezdrátová WiFi), automatické detekci připojených displejů (LCD a OLED) a robustnímu asynchronnímu zpracování dat, které zajišťuje plynulý a spolehlivý chod.
Klíčové Vlastnosti
- Čtení RFID: Využívá 125kHz RFID čtečku pro identifikaci bezkontaktních čipů a karet.
- Duální Konektivita: Preferuje stabilní připojení přes Ethernet (LAN). Pokud není k dispozici, automaticky se připojí k nakonfigurované WiFi síti.
- Webová Konfigurace: Pokud zařízení nemá uloženy přístupové údaje k síti, spustí se v režimu "Access Point". Uživatel se k němu může připojit telefonem nebo počítačem a přes jednoduchou webovou stránku nastavit všechny potřebné parametry (název zařízení, WiFi, IP adresa serveru, heslo atd.).
- Komunikace se Serverem: Po načtení karty odešle její unikátní ID na předem definovaný vzdálený server. Následně si ze stejného serveru vyžádá data spojená s touto kartou (např. jméno osoby, stav přístupu) a zobrazí je na displeji.
- Podpora Displejů: Program při startu automaticky zkontroluje, zda je připojen I2C LCD (20x4 znaků) nebo I2C OLED displej. Veškeré výstupy pak přizpůsobí detekovanému displeji.
- Správa Času: Synchronizuje přesný čas z internetu pomocí NTP protokolu. Pro případ výpadku internetu je vybaven hardwarovým modulem reálného času (RTC), který udržuje čas i po odpojení napájení. Časová zóna je nastavitelná přes webové rozhraní.
- Asynchronní Provoz: Síťové operace (odesílání dat, komunikace se serverem) běží v samostatném vlákně (úkolu). Díky tomu hlavní smyčka programu, která se stará o čtení RFID karet, není nikdy blokována pomalou sítí a zařízení zůstává neustále responzivní.
- Ukládání Nastavení: Všechna uživatelská nastavení jsou bezpečně uložena v interní flash paměti (SPIFFS), takže si je zařízení pamatuje i po restartu.
Popis Hlavních Funkcí a Chování
-
Spuštění a Inicializace:
- Po zapnutí se program pokusí načíst uloženou konfiguraci.
- Pokud konfigurace neexistuje, spustí vlastní WiFi síť (Access Point) a čeká na nastavení přes webový prohlížeč.
- Pokud konfigurace existuje, pokusí se připojit k síti (nejprve LAN, pak WiFi).
- Zdetekuje připojené displeje, inicializuje RFID čtečku a modul reálného času (RTC).
- Synchronizuje systémový čas (nejprve z NTP, pokud selže, tak z RTC).
- Spustí samostatný úkol pro síťovou komunikaci.
-
Běžný Provoz (Hlavní Smyčka):
- V základním stavu zobrazuje na displeji název zařízení, aktuální datum a čas. Čas na displeji se automaticky aktualizuje každou minutu.
- Nepřetržitě monitoruje RFID čtečku.
- Periodicky v pozadí kontroluje dostupnost vzdáleného serveru, aby mohl rychle reagovat v případě jeho výpadku.
-
Zpracování RFID Karty:
- Když je přiložena karta, funkce pro čtení RFID ověří platnost dat.
- Implementuje ochranu proti opakovanému načtení stejné karty v krátkém časovém intervalu, aby se zamezilo duplicitním záznamům.
- Místo přímého odeslání dat na server vloží ID karty do speciální fronty. Tím se okamžitě uvolní pro čtení další karty.
-
Síťový Úkol (Běží na pozadí):
- Tento úkol neustále sleduje frontu. Jakmile se v ní objeví nové ID karty, vezme si ho ke zpracování.
- Sestaví a odešle data (ID karty, název zařízení) na server pomocí HTTP POST požadavku. Pokud odeslání selže, zkusí to ještě několikrát.
- Po úspěšném odeslání provede další dotaz (HTTP GET) na server, aby získal textovou informaci, která se má zobrazit uživateli (např. "Vítejte, pane Nováku" nebo "Přístup zamítnut").
- Tuto informaci zobrazí na displeji na několik sekund. Poté se displej vrátí do výchozího stavu zobrazení času a data.
- Pokud je server nedostupný, zobrazí chybovou hlášku a data neodesílá.
Tato architektura zajišťuje, že terminál je schopen rychle načítat karty jednu po druhé, i když je síťové připojení pomalé nebo dočasně nedostupné, což je klíčové pro jeho spolehlivost v reálném provozu.
Podrobný popis použitého hardwaru, jeho zapojení a důvodů, proč byly jednotlivé komponenty a způsoby připojení zvoleny.
Přehled Hardwaru
Projekt je postaven na mikrokontroléru ESP32, který slouží jako centrální mozek celého zařízení.
K němu jsou připojeny specializované moduly pro zajištění síťové konektivity, čtení RFID karet, udržování času a zobrazování informací.
Důraz je kladen na modularitu a spolehlivost.
1. Řídicí Jednotka: ESP32
- Komponenta: Vývojová deska s čipem ESP32.
- Důvod: Byla zvolena pro svůj vysoký výkon, dva procesorová jádra (což umožňuje plynulý běh síťových operací na pozadí), integrovanou WiFi a dostatečný počet vstupně/výstupních (GPIO) pinů pro připojení všech potřebných periferií
2. Síťové Připojení: Ethernet Modul W5500
- Komponenta: Modul s čipem W5500 pro drátové připojení k síti LAN.
- Zapojení (SPI sběrnice):
GPIO 5->SCS(Chip Select) - Tento pin aktivuje komunikaci s modulem.GPIO 18->SCLK(Serial Clock) - Hodinový signál pro synchronizaci dat.GPIO 19->MISO(Master In, Slave Out) - Data z modulu do ESP32.GPIO 23->MOSI(Master Out, Slave In) - Data z ESP32 do modulu.
- Důvod: Drátové připojení je obecně stabilnější a spolehlivější než WiFi, což je pro přístupové a docházkové systémy klíčové. Komunikace přes rychlou SPI sběrnici zajišťuje plynulý přenos dat. Firmware preferuje toto připojení a na WiFi se přepne jen v případě, že LAN není k dispozici.
3. Identifikace: RFID Čtečka (125kHz)
- Komponenta: Modul pro čtení bezkontaktních karet a čipů, např. RDM6300 nebo kompatibilní.
- Zapojení (Sériová linka - UART):
GPIO 17(ESP32 RX) ->TX pin modulu- ESP32 přijímá data (ID karty) ze čtečky.GPIO 16(ESP32 TX) ->RX pin modulu- ESP32 může posílat příkazy do čtečky (v tomto kódu se nevyužívá).
- Důvod: UART je standardní a velmi spolehlivý způsob komunikace pro tyto moduly. ESP32 má více hardwarových UART portů, což umožňuje dedikovanou komunikaci se čtečkou bez nutnosti softwarové emulace a nezatěžuje tak procesor.
4. Zobrazovací Jednotky: LCD a OLED Displej
- Komponenty:
- Znakový LCD displej 20x4 s I2C převodníkem (adresa
0x27). - Grafický OLED displej 128x64 s I2C rozhraním (adresa
0x3C).
- Znakový LCD displej 20x4 s I2C převodníkem (adresa
- Zapojení (I2C sběrnice): Oba displeje se připojují na stejné piny.
GPIO 21->SDA(Serial Data) - Datový vodič.GPIO 22->SCL(Serial Clock) - Hodinový vodič.
- Důvod: I2C sběrnice je ideální, protože umožňuje připojit více zařízení pouze pomocí dvou vodičů. Program je navržen tak, aby při startu automaticky proskenoval obě I2C adresy a sám zjistil, který z displejů je fyzicky připojen. Tím je zajištěna vysoká flexibilita bez nutnosti měnit kód.
5. Udržování Času: Modul Reálného Času (RTC) DS1302
- Komponenta: Modul s čipem DS1302 a záložní baterií.
- Zapojení (3-vodičová sběrnice):
GPIO 33->SCLK(Clock)GPIO 25->IO(Data)GPIO 26->CE(Chip Enable / Reset)
- Důvod: Zajišťuje, že zařízení má vždy k dispozici přesný čas, i když dojde k výpadku napájení nebo není dostupné připojení k internetu pro synchronizaci přes NTP. To je kritické pro správnost časových razítek u docházkových záznamů.
6. Zvuková Signalizace: Pípák (Buzzer)
- Komponenta: Jednoduchý aktivní pípák.
- Zapojení:
GPIO 27-> Signální pin pípáku.
- Důvod: Poskytuje okamžitou a intuitivní zvukovou zpětnou vazbu uživateli – například krátké pípnutí při úspěšném načtení karty nebo delší/přerušované pípnutí při chybě.
7. Napájení: POE Modul (Power over Ethernet)
- Komponenta: Modul standardu IEEE 802.3af, který dodává 5V.
- Zapojení: Modul se vkládá mezi Ethernetový konektor a W5500 modul. Jeho výstup (5V a GND) napájí celou sestavu (ESP32 a všechny periferie).
- Důvod: Výrazně zjednodušuje instalaci terminálu na místě určení. K zařízení stačí přivést jediný ethernetový kabel, který zajišťuje jak datovou konektivitu, tak napájení. Odpadá tak nutnost mít v blízkosti elektrickou zásuvku.
Využití RFID terminálu a využití pro sledování docházky zaměstnanců
představuje kompletní uživatelské a administrátorské rozhraní pro správu pracovních pozic v systému.
Umožňuje provádět všechny základní databázové operace (vytvořit, číst, aktualizovat, smazat - CRUD).
-
(Správa pracovních pozic)
- Účel: Definuje role v organizaci (např. "Skladník", "Vedoucí směny", "Pokladní").
- Funkce: Poskytuje kompletní rozhraní pro vytváření, čtení, úpravu a mazání (CRUD) záznamů v tabulce
users_positions. Klíčovou vlastností je chráněné mazání: skript před smazáním pozice ověří, zda není přiřazena k žádnému plánu směn nebo požadavku na obsazení. Tím se zabraňuje narušení datové integrity.
-
(Správa skupin/útvarů)
- Účel: Definuje organizační strukturu (např. "Oddělení logistiky", "Prodejna Brno").
- Funkce: Plnohodnotné CRUD rozhraní pro správu záznamů v tabulce
users_groups. Stejně jako u pozic, i zde je implementováno chráněné mazání, aby nebylo možné smazat skupinu, která je navázána na existující požadavky.
-
(Správa šablon směn)
- Účel: Zjednodušuje a standardizuje plánování. Umožňuje vytvořit předdefinované typy směn (např. "Ranní 8:00-16:30", "Noční 22:00-6:00").
- Funkce: CRUD rozhraní pro tabulku
users_shift_templates. Šablona obsahuje název, kód, výchozí časy, délku přestávky a barvu pro vizuální odlišení v kalendářích. Toto je klíčový nástroj pro efektivitu – manažer nemusí pokaždé zadávat stejné časy.
Plánování a definice potřeb
Tato skupina skriptů slouží manažerům k definování, kolik lidí a na jaké směny potřebují, a k následnému plánování.
-
(Vytváření požadavků na obsazení)
- Účel: Nástroj pro manažery, kterým definují své personální potřeby.
- Funkce: Formulář, kde manažer zadá např.: "Potřebuji 5 lidí na pozici Skladník na ranní směnu každý pracovní den v prosinci." Skript následně hromadně vytvoří záznamy v tabulce
users_staffing_requirements.
-
(Plánování jednotlivých směn)
- Účel: Detailní plánování a úpravy.
- Funkce: Formulář pro vytvoření směny pro konkrétního uživatele na konkrétní den nebo pro úpravu již existující směny. Umožňuje také manuální opravu časů příchodu a odchodu, pokud došlo k chybě v docházce.
-
(Hromadné plánování směn)
- Účel: Nástroj pro maximální efektivitu při plánování.
- Funkce: Umožňuje manažerovi vybrat jeden nebo více útvarů, šablonu směny a období, a systém automaticky naplánuje směny všem zaměstnancům v daných útvarech. Šetří obrovské množství času oproti individuálnímu plánování.
Zobrazení, přehledy a reporting
Tyto skripty poskytují různé pohledy na data, od vizuálních kalendářů po detailní tabulkové reporty.
-
(Hlavní kalendář směn)
- Účel: Vizuální přehled o tom, kdo, kdy a kde pracuje.
- Funkce: Zobrazuje klasický měsíční kalendář. Každý den je dynamicky naplněn seznamem zaměstnanců a jejich směn (pomocí vkládaného skriptu
working_calendar_users.asp). Obsahuje rozsáhlé filtry (podle uživatele, pozice, stavu směny), což z něj dělá silný analytický nástroj.
-
(Seznam požadavků na obsazení)
- Účel: Manažerský přehled o neobsazených pozicích.
- Funkce: Zobrazuje tabulkový seznam všech vytvořených požadavků a u každého ukazuje stav (např. "Potřeba: 5, Obsazeno: 3"). Umožňuje rychlou úpravu nebo smazání požadavků.
-
(Měsíční přehled požadavků pro zaměstnance)
- Účel: "Tržiště směn" pro zaměstnance.
- Funkce: Zobrazuje požadavky v měsíční mřížce. Zaměstnanec vidí, kde chybí lidé, a kliknutím na buňku si může směnu "vzít" (tím se spustí skript
create_shift_from_requirement.asp).
-
(Centrální seznam naplánovaných směn)
- Účel: Hlavní operativní nástroj pro manažery.
- Funkce: Zobrazuje všechny naplánované směny v detailní tabulce s pokročilými filtry. Jeho klíčovou funkcí je hromadná úprava: manažer může označit více směn a najednou je schválit, zamítnout nebo změnit jejich šablonu.
-
(Detailní měsíční report)
- Účel: Komplexní souhrnný report pro manažery a mzdové oddělení.
- Funkce: Zobrazuje mřížku, kde řádky jsou zaměstnanci a sloupce dny v měsíci. Buňky obsahují odpracované hodiny (pro dokončené směny) nebo symboly pro různé stavy. Integruje i události jako dovolená nebo nemoc. Obsahuje tiskovou verzi.
-
(Souhrn skutečně odpracované doby)
- Účel: Finanční a analytický reporting.
- Funkce: Agreguje data ze skutečně odpracovaných směn (
users_actual_work_logs) a zobrazuje celkové součty (hrubý čas, přestávky, čistý čas) pro jednotlivé zaměstnance nebo celé útvary za zvolené období.
-
Roční přehledy
- Účel: Strategický roční přehled.
- Funkce: Poskytují pohled na data z ptačí perspektivy. Zobrazují trendy v plánování, počty směn v různých stavech po měsících a útvarech. Slouží pro dlouhodobé plánování a analýzu vytíženosti.
Interakce a automatizace
Tyto skripty zajišťují interakci se zaměstnanci, hardwarem a provádějí automatické úkony na pozadí.
-
(Endpoint pro RFID terminály)
- Účel: Komunikační brána mezi fyzickými docházkovými terminály a databází.
- Funkce: Přijímá HTTP požadavek s ID karty. Identifikuje uživatele, zjistí, zda se jedná o příchod či odchod, a zapíše přesný čas do databáze. Zvládá i situaci, kdy zaměstnanec přijde bez naplánované směny – v takovém případě mu ji automaticky vytvoří. Vrací terminálu odpověď pro zobrazení na displeji (např. "Vítejte, Petře Nováku").
-
(Vytvoření směny z požadavku)
- Účel: Akční skript pro zaměstnance, kteří si berou volnou směnu.
- Funkce: Po kliknutí na volnou směnu v reportu tento skript ověří, zda zaměstnanci nevznikne časová kolize s jinou jeho směnou. Pokud ne, vytvoří mu novou směnu v plánu.
-
(Detail docházky a korekce)
- Účel: Nástroj pro audit a opravu docházkových dat.
- Funkce: Zobrazí všechny příchody a odchody zaznamenané RFID terminálem pro jednu konkrétní směnu. Umožňuje manažerovi manuálně opravit záznamy, pokud například zaměstnanec zapomněl "pípnout".
-
(Zpracování dokončených směn)
- Účel: Automatická údržba a příprava dat pro reporting.
- Funkce: Tento skript se spouští na pozadí. Projde všechny dokončené směny, vypočítá z nich skutečně odpracovaný čas (s prioritou RFID dat) a uloží čistá data do tabulky
users_actual_work_logs, která slouží jako podklad pro reporty a mzdy.
Pomocné a vkládané skripty
banner: Zobrazuje konzistentní navigační menu na všech stránkách.chyba: Uživatelsky přívětivá stránka pro zobrazení chybových hlášení.tisk-planovani: Generuje zjednodušenou verzi plánu pro tisk.working_calendar_users: Pomocný skript, který generuje HTML kód se seznamem zaměstnanců pro jeden den v kalendáři.- Ostatní (
StavSmenyAktualizace,update_users_shift_schedules, atd.): Malé, specializované skripty, které jsou vkládány do hlavních stránek a provádějí dílčí úkoly, jako je přepočet stavů nebo synchronizace dat s jinými moduly.
