Jste zde

FOX Board + SQLite + TLM 20 = přístupový systém

Vysoká flexibilita modulu Fox Board umožňuje přidáním jednoho obvodu TLM-20 (RFID čtečka) vytvořit např. jednoduchou jednotku pro přístupový systém.

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 :
;//zkopírujeme zdrojový balíček do adresáře s aplikacemi
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 :
cd apps
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:
cp Makefile_sh Makefile ;//volba souboru pro kompilaci
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.

;//následující příkazy se provádí v adresáři devboard-R2_01
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.

;//připojení k FOX modulu s IP 192.168.0.90 pomocí ssh
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 BAUDRATE B9600
#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 :

cd /apps/ctecka ;//adresář s naším programem
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 :

Download & odkazy:

Související zboží:

Hodnocení článku: