Problematika přístupových systémů je velice široká, proto bude popsána pouze základní činnost a to vstup povolen / zakázán. Databáze platných karet je uložena v databázi SQLite, která byla zvolena pro svoji jednoduchost a možnost rožšíření databáze o další položky jako je jméno uživatele, časové omezení průchodu, apod.
Podrobnějšímu popisu modulu FOX Board LX se věnuje tento článek, starší verze je popsána zde a pro se k nim již nebudeme příliš vracet. Instalace vývojového prostředí AXIS SDK je popsána zde.
Popis obvodu TLM-20:
RFID čtečka TLM-20 (kompatibilní s AXA 012) je hybridní obvod pro čtení bezkontaktních identifikátorů pracujících na frekvenci 125 kHz, bližšímu popisu se věnuje tento článek.
Zjednodušené schéma přístupového systému :
LED dioda označená jako LED_K signalizuje přečtení kódu snímané karty čtečkou RFID a vyslání tohoto kódu v ASCII formátu (JP1). Volba tohoto režimu je dána zapojením pinu č.7. Povolení vstupu dané osoby je signalizováno diodou LED_ON. Pin JP1 je připojen na sériový port COM3, pin RxD. Pin JP2 je připojen na port PA7.
Instalace databáze SQLite:
Nejjednodušší možnost je stáhnutí již hotového image s nainstalovanou databázi SQLite. Pro zkušenější uživatele je zde popsána instalace ze zdrojových kódů. Tento postup se dělí na dvě části, a to na vytvoření dynamické knihovny sqlite3.so a na sqlite3shell umožňující vytváření, editace a rušení tabulek a databází přímo v konzoli. Zdrojový kód byl doplněn o Makefile soubory pro obě tyto kompilace. Po stáhnutí zdrojových kódů do domovského adresáře postupujeme :
- Příprava prostředí AXIS SDK, příprava instalace SQLite :
cp sqlite-source-3_2_2.tar ./devboard-R2_01/apps
cd devboard-R2_01 ;//adresář SDK
source ./init_env ;//nastaveni potřebných cest (PATH)
- Vytvoření dynamické knihovny sqlite3.so, je použita programy využívajícími databázi :
tar -xvf ./sqlite-source-3_2_2.tar ;//rozbalení archivu
cd sqlite
cp Makefile_so Makefile ;//volba souboru pro kompilaci
make crix-axis-linux-gnu ;//standardní knihovna glibc
make ;//kompilace knihovny
make install ;//překopírování knihovny do příslušného adresáře
- Vytvoření programu sqlite3shell:
make crix-axis-linux-gnu ;//standardní knihovna glibc
make ;//kompilace programu
make install ;//překopírování programu do příslušného adresáře
Vytvoření nového image a přenesení do modulu:
Image pro modul se vytváří z adresáře devboard-R2_01/target/cris-axis-linux-gnu. Do tohoto adresáře můžeme umístit výslednou aplikaci, zajistit její spuštění při startu, popř. nastavit potřebné služby pro další aplikace. Pro přenesení nového image do modulu je zvolen postup přes Ethernet rozhraní, režim LAN BOOT . Nutno propojit příslušnou propojku před zapnutím napájení. Tato volba nevyžaduje funkční linuxové jádro, propojení s PC se provádí kříženým UTP kabelem.
make images ;//vytvoření nového image obsahujícího SQLite
./flashit ;//přenesení image do modulu
Vytvoření jednoduché databáze uživatelů:
Databázi osob lze vytvořit přímo v modulu, komunikace s modulem probíhá přes ssh , popř. telnet.
ssh 192.168.0.90 ;//zadáme jméno a heslo
;//změna adresáře, pro umístění databáze
cd /mnt/flash
;//vytvoření databáze s názvem přístup
sqlite3shell pristup ;//vytvoření tabulky s názvem osoby obsahující
;//položky jméno, karta, vstup
> Create table osoby(jmeno text,karta text,vstup text);
;//vytvoříme dva uživatele s povoleným vstupem
> Insert into osoby values("Milan","30313535343534314434","A");
> Insert into osoby values("Pavel","30313232353433444042","A");
;//vytvoříme jednoho uživatele se zakázaným vstupem
> Insert into osoby values("Honza","30313537374441443535","N");
;//zobrazení položek databáze osoby, ukončení programu
> Select * from osoby;
> .quit
Část zdrojového kódu komunikace se čtečkou RFID:
#define DEVICE "/dev/ttyS3"
#define DATABASE "pristup"
char buf[200];
sqlite *db;
char sqliteprikaz[50];
...
printf("Opening Port COM ");
fd = open(DEVICE, O_RDWR | O_NOCTTY);
...
printf("Opening Database ");
db = sqlite_open(DATABASE, 0, &zErrMsg);
...
while(1){
;//přečtení kódu karty z COM
res = read(fd,buf,sizeof(buf));
buf[res]=0;
;//hledani v databazi platnosti karty
sprintf(sqliteprikaz,"Select vstup from osoby where karta=("%2.2x%2.2X%2.2x%2.2x%2.2x")",buf[4],buf[3],buf[2],buf[1],buf[0] );
rc = sqlite_exec(db, sqlprikaz, callback, 0, &zErrMsg);
....
if(vstup=="A")
{
;//vstup povolen - rozsvícení LED
ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_ON);
}
...
}
...
sqlite_close(db);
close(fd);
exit(0);
Kompilace zdrojového kódu a přenesení programu do modulu :
make crix-axis-linux-gnu ;//standardní knihovna glibc
make ;kompilace programu
;//kopírování spustitelného souboru ctecka do modulu
scp ctecka root@192.168.0.90:/mnt/flash
ssh 192.168.0.90 ;//připojení k modulu
cd /mnt/flash ;//změna adresáře
./ctecka ;//spuštění programu
Závěr :
Cílem tohoto článku bylo popsat vytvoření jednoduchého přístupového systému za použití modulu FOX Board. Vzhledem k použité čtečce RFID, která má snímací dosah přibližně 10cm a databázi SQLite můžeme vhodnou úpravou vzorového programu a doplněním zařízení o klávesnicí a LCD displej vytvořit standardní přístupový systém. Díky rozhraní Ethernet obsaženého v modulu, můžeme vzdáleně přistupovat ke čtečce, upravovat databázi uživatelů, prohlížet a stahovat jednotlivé průchody osob, apod. Platnost karty (povolení vstupu) v této ukázce je signalizována pouze LED diodou, ve skutečném provozu je přidána zvuková signalizace včetně sepnutí elektomechanického zámku na nastavenou dobu.
Miroslav Dvořák
Dvorak.Linux@ seznam.cz
Předcházející články :
- FOX LX Board-nový embedded modul splňující požadavky RoHS
- SX18 - rozšiřující modul pro FOX Board
- FOX Board - instalace AXIS SDK pod Linuxem
- FOX Board - embedded modul "ready to run" s 32 bit RISC a Linuxem
Download & odkazy:
- Zdrojový kód ukázkového programu - ctecka.tar
- Datasheet TLM-20 - TLM20Reader.pdf
- Domovská stránka SQLite - www.sqlite.org
- Domovská stránka FOX modulu - www.acmesystems.it