Základní popis RFID terminálu a popis hardware
Právě se nacházíte: Home / vyvoj /
Celkový 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
).
- 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).
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.