Obsah článku
title: "Firmvér pre RFID prístupový systém s API validáciou a NeoPixel vizualizáciou"
slug: "esp8266-rfid-api-neopixel-lock"
technologies: ["ESP8266", "Arduino", "RFID (MFRC522)", "NeoPixel (WS2812B)", "REST API", "Modbus TCP", "ArduinoJson", "WiFiManager"]
tags: ["iot", "access-control", "rfid", "neopixel", "api-integration", "esp8266", "modbus", "firmware", "smart-lock"]
date_solved: "2025-08-18"
Projekt/Téma: Vývoj firmvéru pre inteligentný prístupový systém založený na RFID technológii, ktorý overuje prístupové práva cez vzdialené REST API, poskytuje vizuálnu spätnú väzbu pomocou NeoPixel LED pásika a umožňuje integráciu do priemyselných systémov cez Modbus TCP.
1. Cieľ / Problém na vyriešenie: Cieľom bolo vytvoriť moderný a flexibilný prístupový systém, ktorý by nahradil tradičné offline riešenia. Kľúčové požiadavky boli:
- Centralizovaná správa: Prístupové práva sa nespravujú lokálne v zariadení, ale cez vzdialené API. To umožňuje okamžité pridávanie/odoberanie prístupov bez nutnosti fyzickej interakcie so čítačkou.
- Intuitívna spätná väzba: Užívateľ musí dostať jasnú a okamžitú vizuálnu a zvukovú informáciu o výsledku (prístup povolený/zamietnutý).
- Spoľahlivosť a odolnosť: Zariadenie musí byť schopné dlhodobej autonómnej prevádzky, vedieť sa zotaviť z výpadkov siete a prežiť zlyhanie API servera.
- Integračná schopnosť: Zariadenie musí byť možné monitorovať a čiastočne ovládať cez štandardné priemyselné protokoly (Modbus TCP).
2. Použité technológie a nástroje:
- Mikrokontrolér: ESP8266
- Senzor: RFID čítačka MFRC522 (SPI zbernica)
- Vizuálny výstup: RGB LED pásik NeoPixel (WS2812B)
- Akčný člen: 2x Relé (jedno pre zámok, druhé pre bzučiak)
- Komunikácia a protokoly:
- WiFi: Spravované knižnicou
WiFiManagerpre jednoduché nastavenie. - HTTPS/REST API: Pre overovanie UID RFID tagov na externom serveri. Používa
BearSSLpre zabezpečené spojenie. - JSON: Dátový formát pre komunikáciu s API, spracovaný knižnicou
ArduinoJson. - Modbus TCP: Pre vzdialený monitoring a ovládanie relé.
- WiFi: Spravované knižnicou
- Správa a údržba: OTA (Over-The-Air) aktualizácie, Telnet konzola, Web server.
3. Kľúčové postupy a konfiguračné kroky:
- Inicializácia: Pri štarte sa inicializujú všetky periférie (SPI pre RFID, GPIO pre relé, NeoPixel pásik), načíta sa konfigurácia WiFi a zariadenie sa pripojí k sieti.
- Stavový automat pre RFID: Hlavná slučka (
loop) je navrhnutá neblokujúco. Kontroluje prítomnosť novej RFID karty iba vtedy, ak neprebieha iná operácia (animácia, API volanie, pauza po čítaní). - API Validácia: Po priložení karty sa jej UID odošle ako JSON požiadavka na
server_url. Zariadenie čaká na odpoveď, ktorá obsahuje status a akciu (napr.action: "r1on"). - Spustenie akcie: Na základe odpovede z API sa vykoná príslušná akcia:
- Prístup povolený: Zopne sa relé zámku na krátky impulz (
RELE_ACTIVE_PULSE) a spustí sa neblokujúca animáciaaccessGrantedAnimationna NeoPixel pásiku (postupné zelené zhasínanie). - Prístup zamietnutý: Zopne sa relé bzučiaka (niekoľko krátkych pípnutí) a spustí sa animácia
accessDeniedAnimation(červené prebliknutie).
- Prístup povolený: Zopne sa relé zámku na krátky impulz (
- Monitoring API dostupnosti: Zariadenie v pravidelných intervaloch (
API_CHECK_INTERVAL) posiela "ping" požiadavku na API. Ak server neodpovedá, systém prejde do offline režimu a dočasne zamietne všetky pokusy o prístup, aby sa predišlo zablokovaniu v dôsledku čakania na nedostupné API. - Obsluha Modbus: Paralelne s RFID logikou beží Modbus TCP server, ktorý umožňuje čítať stav zariadenia (uptime, sila signálu) a manuálne ovládať relé (s prioritou pre RFID akcie).
4. Výsledné kódy a skripty:
-
Neblokujúca obsluha animácií: Kľúčový prvok pre responzívne správanie. Miesto použitia
delay()sa využíva stavový automat (enum AnimationState) a časovače (millis()), čo umožňuje, aby ostatné časti kódu (sieť, Modbus) bežali aj počas prehrávania animácie.// === HLAVNÁ FUNKCIA PRE OBSLUHU ANIMÁCIÍ === void handleAnimations() { unsigned long currentTime = millis(); switch (currentAnimation) { case ANIM_IDLE: // Nič nerobíme break; case ANIM_GRANTED: // Logika pre postupne zhasinanie zelenych LED... break; case ANIM_DENIED: // Logika pre cervene blikanie... break; } }
5. Zistené problémy a riešenia (Gotchas):
- Problém: Blokujúce sieťové operácie (čakanie na API odpoveď) by mohli spôsobiť, že zariadenie nereaguje na iné podnety (Modbus, OTA).
- Riešenie: Celá hlavná slučka je navrhnutá ako neblokujúca. Sieťové volanie je síce vo svojej podstate blokujúce, ale je zapuzdrené v stavovom automate (
rfid_processing), ktorý zabráni ďalším čítaniam, kým nie je operácia dokončená alebo neuplynie časový limit (RFID_PROCESSING_TIMEOUT).
- Riešenie: Celá hlavná slučka je navrhnutá ako neblokujúca. Sieťové volanie je síce vo svojej podstate blokujúce, ale je zapuzdrené v stavovom automate (
- Problém: Dlhé a zložité animácie s
delay()by zablokovali celý systém.- Riešenie: Implementácia plne neblokujúceho animačného systému pomocou
millis()a stavového automatu. FunkciahandleAnimations()je volaná v každom cykleloop()a vykoná len malý krok animácie, ak nastal čas, čím uvoľní procesor pre ostatné úlohy.
- Riešenie: Implementácia plne neblokujúceho animačného systému pomocou
- Problém: Výpadok API servera by mohol znefunkčniť celý prístupový systém.
- Riešenie: Zavedenie periodickej kontroly dostupnosti API (
checkApiStatus). Ak API nie je dostupné, globálny príznakisApiAvailablesa nastaví nafalsea všetky pokusy o validáciu karty sú okamžite zamietnuté s príslušnou animáciou. Tým sa zabráni zbytočným a dlhým timeoutom pri každom priložení karty.
- Riešenie: Zavedenie periodickej kontroly dostupnosti API (
- Problém: "Odrážanie" signálu bzučiaka alebo rýchle opätovné priloženie karty mohlo spôsobiť chaos.
- Riešenie: Po každej akcii (úspešnej aj neúspešnej) sa aktivuje krátka pauza (
rfid_pause_time), počas ktorej čítačka ignoruje nové karty. Tým sa zabezpečí, že každá akcia je jasne oddelená.
- Riešenie: Po každej akcii (úspešnej aj neúspešnej) sa aktivuje krátka pauza (
6. Finálny výsledok / Záver: Výsledkom je sofistikovaný a robustný firmvér, ktorý spája hardvérovú interakciu s modernou cloudovou infraštruktúrou. Vďaka neblokujúcej architektúre je systém vysoko responzívny. Monitorovanie dostupnosti API a možnosť integrácie cez Modbus z neho robia spoľahlivé a škálovateľné riešenie pre moderné prístupové systémy. Projekt je vynikajúcim príkladom, ako aj na malej platforme ako ESP8266 možno implementovať zložité a odolné systémy.