NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 10 - Raspberry Pi - Připojení RFID čtečky

V minulé lekci, Raspberry Pi - Drátová komunikace s Arduino UNO, jsme si vytvořili komunikaci mezi Raspberry Pi a Arduinem UNO pomocí USB kabelu.

Dnes k našemu Raspberry Pi připojíme RFID čtečku a budeme skrz ni přečítat RFID karty a čipy. Naprogramujeme si k tomu jednoduchý kód v Pythonu a vysvětlíme si, k čemu je taková RFID technologie dobrá.

Jako už mnohokrát předtím zde ukáži vlastní zapojení a schéma zapojení vytvořené pomocí Fritzing.

Potřebné součástky

K úspěšnému zapojení budeme potřebovat:

  • Raspberry Pi,
  • RFID čtečku,
  • libovolnou kartu či čip,
  • při nejlepším nepájivé pole a několik drátků, případně pouze drátky.
Raspberry Pi

Co je RFID?

Rádio frekvenční identifikace neboli RFID je technologie bezdrátové komunikace pomocí radiových vln mezi RFID čtečkou a čipem s anténou. Dále také můžeme mluvit o RFID komunikaci mezi RFID writerem a čipem s anténou. RFID writer zapisuje data na RFID čip, která pak můžeme přečíst pomocí RFID čtečky.

RFID VS NFC

Protože často panuje rozpor mezi těmito dvěma technologiemi, rád bych zmínil, jaký je mezi nimi rozdíl. NFC je forma bezdrátové komunikace používaná pouze na krátké vzdálenosti. Tato technologie je podobně jako RFID založena na radiových vlnách, ale narozdíl od RFID se používá i v jiných oblastech než jen pro identifikaci. Komunikace na krátkou vzdálenost se stala populární díky komplexním možnostem jejího použití pro autorizaci různých typů činností a zasílání malého množství dat. NFC používají vysokou frekvenci - 13.56 MHz. Teoretický dosah je asi 20 centimetrů, ale v praxi musí být vzdálenost mezi zařízeními vyměňujícími si mezi sebou konkrétní data zhruba 5 až 6 centimetrů. U zařízení založených na RFID technologii se mění dosah podle frekvence od 10 cm až do 12 m vzdálenosti.

RFID čtečka

RFID čtečka, kterou budeme dnes používat, má ale stejnou frekvenci jako je právě NFC, a to 13.56 MHz. Také není zároveň schopná do čipu zapisovat, pouze je dokáže číst. Čtečka obsahuje čip MFRC522, který má zabudovanou detekci chyb a měl by být schopný podle typu zapisovat i číst RFID komunikaci. RFID čtečka potřebuje ke svému chodu 3.3V.

Pokud si koupíte stejný model jako mám já, je defaultně dodáván bez pinů. V balení jsou však piny, které se musí k RFID čtečce připájet.

Zapojení RFID čtečky

  • Se zapojováním začneme u prvního pinu s nápisem 3.3V, který zapojíme hned do prvního pinu v pinoutu pin 3V3.
  • Další pin s nápisem RST zapojíme do GPIO25 nebo jiného GPIO pinu.
  • GND pin pak zapojíme, jak jinak než do GND pinu na Raspberry Pi.
  • IRQ pin necháme prázdný, ten potřebovat nebudeme.
  • MISO pin zapojíme do dalšího GPIO pinu, u mě to je například GPIO9.
  • MOSI pin zapojíme do GPIO10.
  • A nakonec SCK a SDA do GPIO pinů 11 a 8.

Zapojení je velmi jednoduché MFRC522 čip jednoduše posílá data do Raspberry Pi. Velmi důležité je samozřejmě GND zapojit do GND, aby byla RFID čtečka uzemněna. Dále nezapojit napájení 3.3V do 5V, mohlo by to RFID čtečku odpálit.

Raspberry Pi

Programová část

Máme tedy RFID čtečku zapojenou a víme, jak funguje. Teď si s její pomocí, a prostřednictvím knihoven Pythonu, vyzkoušíme načíst pár čipů.

Import knihoven

Dnes budeme používat především dvě knihovny. První bude tradičně GPIO knihovna. Druhá bude knihovna pro samotný čip čtečky tedy mfrc522. Tyto knihovny samozřejmě musíme mít nainstalované pomocí pip viz minulé díly. První knihovnu importujeme jednoduše:

import RPi.GPIO as GPIO

Uložíme tak knihovnu do proměnné GPIO, abychom neustále nemuseli psát její název. Z knihovny mfrc522 si naimportujeme jen SimpleMFRC522:

from mfrc522 import SimpleMFRC522

SimpleMFRC522 je pouze základně nastavená část knihovny mfrc522, kterou budeme potřebovat. Není nutné importovat celou knihovnu.

Uložení do proměnné

Vytvoříme si proměnnou ctecka, do které uložíme SimpleMFRC522(), abychom nemuseli opět vypisovat dlouhý název části knihovny. Proměnnou budeme moci využívat úplně stejně. Do druhé proměnné text pak pomocí metody ctecka.read() uložíme ID čipu. Když se k RFID čtečce přiblíží čip, program to zaznamená a ID čipu uloží do naší proměnné.

Výpis textu

Než začneme s výpisem, musíme proměnnou text trochu pozměnit. Kdybychom ji nyní vypsali, dostali bychom kromě ID i další věci, které nepotřebujeme. My ale chceme pouze ID, a proto uložíme do proměnné text jen nultou část celého výpisu:

text = str(text[0])

Tímto kódem zabráníme výpisu dalších, zbytečných informací. Teď máme k dispozici jen ID, se kterým můžeme dál pracovat. Asi jste si všimli, že jsme ID přetypovali na string funkcí str(), který nám bude lépe vyhovovat. Pomocí příkazu print si vypíšeme například text přiložte kartu. Tento krok je jen estetická část programu. ID kód čtečky, který máme nyní uložen v proměnné text, si vypíšeme příkazem print.

Vyčištění GPIO

Nakonec vyčistíme GPIO piny pomocí příkazu GPIO.cleanup(). Cleanup nám zařídí, abychom mohli bez větších problémů piny znovu použít. Kdyby náš program měl být například ve smyčce.

Konečná podoba našeho kódu:

import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522

ctecka = SimpleMFRC522()

print("přiložte kartu")

text = ctecka.read()
text = text[0]

print(text)

GPIO.cleanup()

Shrnutí

Zobrazí se nám tedy pobídka a po přiložení RFID čipu i samotný RFID kód. Nakonec se ještě vyčistí GPIO piny, abychom je mohli použít znovu.

Bonus upgrade

Aby byl náš kód použitelný v reálném provozu, ještě si ho trochu upravíme. Po spuštění kódu a přiložení karty dostaneme výpis. Toho využijeme, abychom ověřili, jaká karta byla naskenována. Když bude karta v naší "databázi", bude přijata. Když ne, karta bude zamítnuta.

Přidání podmínek

Místo abychom vypisovali kód, ošetříme situace, kdy bude přístup povolen nebo přístup odepřen. Nejprve si smažeme náš print s vypsáním RFID kódu. Nahradíme ho:

if text == "kód který nám předtím vypsala jedna z kartiček":

Na konci if nezapomeneme dvojtečku. Když se naše proměnná text bude rovnat kódu RFID čtečky, provede se nějaký příkaz, např. vypíše se text. My si do if vložíme print s nápisem přístup povolen.

Druhý if bude mít dvě podmínky:

if text != "náš kód text" and text != "":

Aby se příkaz provedl, musí být splněny obě podmínky, tj. text se nebude rovnat kódu a zároveň nebude prázdný. Druhou podmínku máme z toho důvodu, že se čeká na přiložení karty, ale než kartu přiložíme, bude vždy v proměnné text prázdno. Tímto kódem se vyvarujeme situaci, kdy by if reagoval na prázdno vypsáním přístup odepřen.

Kód po úpravách vypadá takto:

import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522

ctecka = SimpleMFRC522()
print("přiložte kartu")


text = ctecka.read()
text = str(text[0])
if text == "701117799140":
      print("přístup povolen")

if text != "701117799140" and text != "":
      print("přístup odepřen")

Věřím, že se vám připojení RFID čtečky a nakódování podmínek podařilo. Své dojmy a případné dotazy můžete zanechat v diskusi pod článkem 🙂

V další lekci, Raspberry Pi - Membránová klávesnice 4x4 , si k Raspberry Pi připojíme membránovou klávesnici 4x4.


 

Předchozí článek
Raspberry Pi - Drátová komunikace s Arduino UNO
Všechny články v sekci
Raspberry Pi
Přeskočit článek
(nedoporučujeme)
Raspberry Pi - Membránová klávesnice 4x4
Článek pro vás napsal Aleš Hlavín
Avatar
Uživatelské hodnocení:
11 hlasů
Raspberry
Aktivity