IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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.
Raspberry Pi

Č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ť.

Raspberry Pi

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íkazu GPIO.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.


 

Predchádzajúci článok
Raspberry Pi - Drôtová komunikácia s Arduino UNO
Všetky články v sekcii
Raspberry Pi
Preskočiť článok
(neodporúčame)
Raspberry Pi - Membránová klávesnica 4x4
Článok pre vás napísal Aleš Hlavín
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Raspberry
Aktivity