10. diel - Raspberry Pri pripojení RFID čítačky
V minulej lekcii, Raspberry Pi - Drôtová komunikácia s Arduino UNO , sme si vytvorili komunikáciu medzi Raspberry pi a Arduino UNO pomocou USB kábla.
Dnes k nášmu Raspberry Pi pripojíme RFID čítačku a budeme cez ňu prečítať RFID karty a čipy. Naprogramujeme si k tomu jednoduchý kód v Pythone a vysvetlíme si, na čo je taká RFID technológia dobrá.
Ako už mnohokrát predtým tu ukážem vlastné zapojenie a schému zapojenia vytvorené pomocou Fritzing.
Potrebné súčiastky
Na úspešné zapojenie budeme potrebovať:- Raspberry Pi,
- RFID čítačku,
- ľubovoľnú kartu či čip,
- pri najlepšom nepájivé pole a niekoľko drôtikov, prípadne iba drôtiky.
Čo je RFID?
Rádio frekvenčnej identifikácie alebo RFID je technológia bezdrôtovej komunikácie pomocou rádiových vĺn medzi RFID čítačkou a čipom s anténou. Ďalej tiež môžeme hovoriť o RFID komunikácii medzi RFID writerom a čipom s anténou. RFID writer zapisuje dáta na RFID čip, ktoré potom môžeme prečítať pomocou RFID čítačky.RFID VS NFC
Pretože často panuje rozpor medzi týmito dvoma technológiami, rád by som spomenul, aký je medzi nimi rozdiel. NFC je forma bezdrôtovej komunikácie používaná iba na krátke vzdialenosti. Táto technológia je podobne ako RFID založená na rádiových vlnách, ale na rozdiel od RFID sa používa aj v iných oblastiach než len na identifikáciu. Komunikácia na krátku vzdialenosť sa stala populárnou vďaka komplexným možnostiam jej použitia pre autorizáciu rôznych typov činností a zasielanie malého množstva dát. NFC používajú vysokú frekvenciu - 13,56 MHz. Teoretický dosah je asi 20 centimetrov, ale v praxi musí byť vzdialenosť medzi zariadeniami vymieňajúcimi si medzi sebou konkrétne dáta zhruba 5 až 6 centimetrov. Pri zariadeniach založených na RFID technológii sa mení dosah podľa frekvencie od 10 cm až do 12 m vzdialenosti.RFID čítačka
RFID čítačka, ktorú budeme dnes používať, má ale rovnakú frekvenciu ako je práve NFC, a to 13.56 MHz. Tiež nie je zároveň schopná do čipu zapisovať, iba ich dokáže čítať. Čítačka obsahuje čip MF RC522, ktorý má zabudovanú detekciu chýb a mal by byť schopný podľa typu zapisovať aj čítať RFID komunikáciu. RFID čítačka potrebuje k svojmu chodu 3.3V.Pokiaľ si kúpite rovnaký model ako mám ja, je defaultne dodávaný bez pinov. V balení sú však piny, ktoré sa musia k RFID čítačke pripájať.
Zapojenie RFID čítačky
- So zapájaním začneme pri prvom pine s nápisom 3.3V, ktorý zapojíme hneď do prvého pinu v pinoutu pin 3V3.- Ďalší pin s nápisom RST zapojíme do GPIO25 alebo iného GPIO pinu.
- GND pin potom zapojíme, ako inak ako do GND pinu na Raspberry Pi.
- IRQ pin necháme prázdny, ten potrebovať nebudeme.
- MISO pin zapojíme do ďalšieho GPIO pinu, u mňa to je napríklad GPIO9.
- MOSI pin zapojíme do GPIO10.
- A nakoniec SCK a SDA do GPIO pinov 11 a 8.
Zapojenie je veľmi jednoduché MFRC522
čip jednoducho posiela
dáta do Raspberry Pi. Veľmi dôležité je samozrejme GND zapojiť do GND, aby
bola RFID čítačka uzemnená. Ďalej nezapojiť napájanie 3.3V do 5V, mohlo
by to RFID čítačku odpáliť.
Programová časť
Máme teda RFID čítačku zapojenú a vieme, ako funguje. Teraz si s jej pomocou, a prostredníctvom knižníc Pythona, vyskúšame načítať pár čipov.Import knižníc
Dnes budeme používať predovšetkým dve knižnice. Prvá bude tradične GPIO knižnica. Druhá bude knižnica pre samotný čip čítačky teda mfrc522. Tieto knižnice samozrejme musíme mať nainštalované pomocou pip pozri minulé diely. Prvú knižnicu importujeme jednoducho:import RPi.GPIO as GPIO
Uložíme tak knižnicu do premennej GPIO, aby sme neustále nemuseli písať jej názov. Z knižnice mfrc522 si naimportujeme len SimpleMFRC522:
from mfrc522 import SimpleMFRC522
SimpleMFRC522 je iba základne nastavená časť knižnice mfrc522, ktorú budeme potrebovať. Nie je potrebné importovať celú knižnicu.
Uloženie do premennej
Vytvoríme si premennúctecka
, do ktorej uložíme
SimpleMFRC522()
, aby sme nemuseli opäť vypisovať dlhý názov
časti knižnice. Premennú budeme môcť využívať úplne rovnako. Do druhej
premennej text
potom pomocou ctecka.read()
uložíme ID čipu. Keď sa k RFID čítačke priblíži čip, program to
zaznamená a ID čipu uloží do našej premennej.
Výpis textu
Než začneme s výpisom, musíme premennútext
trochu pozmeniť.
Keby sme ju teraz vypísali, dostali by sme okrem ID aj ďalšie veci, ktoré
nepotrebujeme. My ale chceme iba ID, a preto uložíme do premennej
text
len nultú časť celého výpisu:
text = str(text[0])
Týmto kódom zabránime výpisu ďalších, zbytočných informácií. Teraz
máme k dispozícii iba ID, s ktorým môžeme ďalej pracovať. Asi ste si
všimli, že sme ID pretypovali na string funkciou str()
, ktorý
nám bude lepšie vyhovovať. Pomocou príkazu print
si vypíšeme
napríklad text priložte kartu. Tento krok je len estetická
časť programu. ID kód čítačky, ktorý máme teraz uložený v premennej
text
, si vypíšeme príkazom print
.
Vyčistenie GPIO
Nakoniec vyčistíme GPIO piny pomocou príkazuGPIO.cleanup()
.
Cleanup nám zariadi, aby sme mohli bez väčších problémov piny znova
použiť. Keby náš program mal byť napríklad v slučke.
Konečná podoba nášho kódu:
import RPi.GPIO as GPIO from mfrc522 import SimpleMFRC522 ctecka = SimpleMFRC522() print("priložte kartu") text = ctecka.read() text = text[0] print(text) GPIO.cleanup()
Zhrnutie
Zobrazí sa nám teda stimul a po priložení RFID čipu aj samotný RFID kód. Nakoniec sa ešte vyčistia GPIO piny, aby sme ich mohli použiť znova.Bonus upgrade
Aby bol náš kód použiteľný v reálnej prevádzke, ešte si ho trochu upravíme. Po spustení kódu a priložení karty dostaneme výpis. To využijeme, aby sme overili, aká karta bola naskenovaná. Keď bude karta v našej "databáze", bude prijatá. Keď nie, karta bude zamietnutá.Pridanie podmienok
Namiesto toho, aby sme vypisovali kód, ošetríme situácie, kedy bude prístup povolený alebo prístup odmietnutý. Najprv si zmažeme nášprint
s vypísaním RFID kódu. Nahradíme ho:
if text=="kód ktorý nám predtým vypísala jedna z kartičiek":
Na konci if
nezabudneme dvojbodku. Keď sa naša premenná
text
bude rovnať kódu RFID čítačky, vykoná sa nejaký
príkaz, napr. vypíše sa text. My si do if
vložíme
print
s nápisom prístup povolený
.
Druhý if
bude mať dve podmienky:
if text != "náš kód text" and text != "":
Aby sa príkaz vykonal, musia byť splnené obe podmienky, tj text sa nebude
rovnať kódu a zároveň nebude prázdny. Druhú podmienku máme z toho
dôvodu, že sa čaká na priloženie karty, ale kým kartu priložíme, bude
vždy v premennej text
prázdno. Týmto kódom sa vyvarujeme
situácii, kedy by if
reagoval na prázdno vypísaním "prístup
odmietnutý".
Kód po úpravách vyzerá takto:
import RPi.GPIO as GPIO from mfrc522 import SimpleMFRC522 ctecka = SimpleMFRC522() print("priložte kartu") text = ctecka.read() text = str(text[0]) if text == "701117799140": print("prístup povolený") if text != "701117799140" and text != "": print("prístup odmietnutý")
Verím, že sa vám pripojenie RFID čítačky a nakódovanie podmienok podarilo. Svoje dojmy a prípadné otázky môžete zanechať v diskusii pod článkom 🙂
V ďalšej lekcii, Raspberry Pi - Membránová klávesnica 4x4 , si k Raspberry Pi pripojíme membránovú klávesnicu 4x4.