Použití NFC po 1-Wire sběrnici (DS2401)
How Can We Help?
Použití NFC po 1-Wire sběrnici (DS2401)
Další zajímavý projekt postavený na Arduinu, který bych zde rád představil, integruje čtení NFC karet.
Zdrojové kódy
http://jirin.deso.cz/NFC_to_1-Wire/
Video tutoriál
Potřebný hardware
Pro výrobu toho modulu budete potřebovat Arduino, doporučuji Pro Mini či Nano kvůli velikosti (lze je bez problémů strčit do krabice).
Odkazy na zakoupení:
https://www.aliexpress.com/wholesale?SearchText=arduino+pro+mini+5v+atmega328
https://www.aliexpress.com/wholesale?SearchText=arduino+nano
Další důležitá věc je čtečka NFC karet, tento projekt je postaven na PN532:
Odkaz na Aliexpress: https://www.aliexpress.com/wholesale?SearchText=pn532
Zapojení
Arduino je potřeba s čtečkou propojit pomocí 6ti drátů.
- VCC čtečky jde na 5 V Arduina
- GND čtečky jde na GND Arduina
- SS čtečky => pin D9 Arduina
- MOSI čtečky => pin D10 Arduina
- MISO čtečky => pin D11 Arduina
- SCK čtečky => D12 Arduina
Čtečku je nutné přepnout do SPI módu pomocí malých přepínačů:
Dále jsou používány piny D4–D8, ale záleží na tom, jaké módy se rozhodnete používat (zmíněno níže). Zde je standardní stav, pokud jsou povoleny všechny módy a piny nejsou změněny:
- D8 – 1-Wire výstup (připojit na 1-Wire extension)
- D7 – pulzní výstup
- D6 – načtena neznámá karta
- D5 – načtena validní karta
- D4 – čtečka je v učícím se režimu + notifikace o nově naučené kartě (připojit na notifikační diodu)
Módy, možnosti použití
Je možné využívat 4 různých módů, které lze libovolně kombinovat.
ONE_WIRE_MODE
Tento mód je víceméně primární, kvůli kterému byla aplikace původně vyvinuta. Pokud je povolen, tak se Arduino po načtení karty vydává za DS1990 / DS2401 1-Wire zařízení. Při použití Mifare Classic (4 byty) se vyplní byty 2 a 3 hodnotou 0x00, pro Mifare Ultralight (7 bytů) je nutné přeskočit jeden byte, takže se vynechá první. Simulované 1-Wire zařízení lze zachytit pomocí Loxone 1-W extension, ale třeba také i pomocí UDP 1-W gateway.
PULSE_MODE
Pokud je tento mód aktivován dochází k pulzu na pinu 7. Důvod proč byl uveden byl požadavek na identifikaci specifické čtečky (při použití více čteček).
DB_MODE
Pomocí tohoto módu si můžete do Arduina definovat svoje karty. Jsou využívány piny 5 a 6, kdy se podle toho, jestli je načtena známá či neznámá karta, pošle pulz na jeden z nich. Takto vydefinované karty lze pak použít v následujícím „učícím se“ módu jako tzv. master karty.
LEARNING_MODE
Tento mód je nutné provozovat s předchozím (DB_MODE). Funguje tak, že je možné Arduino učit nové karty, bez toho, aby bylo nutné pokaždé do modulu nahrát nový sketch s aktualizovaným seznamem karet. Postup učení je následující:
- Na čtečku se přiloží master karta (definovaná v DB_MODE)
- Po 10ti vteřinách se rozsvítí notifikační dioda (výstup D4)
- Během 60 sekund je nutné na čtečku přiložit novou kartu
- Dojde k trojbliku diody a v tento okamžik je karta uložena do EEPROM
Vzhledem k limitu velikosti EEPROM je maximální limit 100 karet.
Zapnutí / vypnutí módů
Logiku sketche lze jednoduše ovlivnit pomocí řádků:
#define ONE_WIRE_MODE #define PULSE_MODE #define DB_MODE #define LEARNING_MODE
Pokud chcete použít kupříkladu jen 1-Wire móde upravte tyto řádky na:
#define ONE_WIRE_MODE //#define PULSE_MODE //#define DB_MODE //#define LEARNING_MODE
Použití v Loxone
NFC karty se vydávají za běžné DS1990 / DS2401 1-Wire zařízení a podle toho s nimi i Loxone pracuje. Stačí aktivovat 1-Wire monitor, přiložit kartu a přidat si ji jako nové zařízení.
S pulzními výstupy pak lze pracovat jako s každým jiným digitálním vstupem v Loxonu.
Další vývoj
Do budoucna uvažuji o verzi s rolling codes (do EEPROM a kartu se budou zapisovat náhodná čísla, která musí odpovídat).
Dále se zde určitě objeví i velmi příbuzný projekt, který s systémy řízení přístupů také velmi souvisí – klávesnice, která se také bude vydávat za DS1990 / DS2401. Bude ji tak možné velmi jednoduše integrovat, třeba i v jednom projektu s touto NFC čtečkou.
Autor článku a projektu: Jiří Jaša, http://www.deso.cz
8 thoughts on “Použití NFC po 1-Wire sběrnici (DS2401)”
Čau.
Pokoušel jsem se tvůj zdroják nahrát do Arduina (nano) ale nebyl jsem moc úspěšný. Při kompilaci mi to vyhazuje tyhle chyby:
E:\Arduino\NFC-1.0.5\NFC\NFC.ino: In function ‘void loop()’:
E:\Arduino\NFC-1.0.5\NFC\NFC.ino:201:40: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
dumpCard(“Received card:”, card, “”);
^
E:\Arduino\NFC-1.0.5\NFC\NFC.ino:201:40: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
C:\Users\ABC\Documents\Arduino\libraries\Adafruit-PN532-master\Adafruit_PN532.cpp: In member function ‘uint8_t Adafruit_PN532::mifareclassic_WriteNDEFURI(uint8_t, uint8_t, const char*)’:
C:\Users\ABC\Documents\Arduino\libraries\Adafruit-PN532-master\Adafruit_PN532.cpp:1056:53: warning: narrowing conversion of ‘(((int)len) + 5)’ from ‘int’ to ‘uint8_t {aka unsigned char}’ inside { } [-Wnarrowing]
uint8_t sectorbuffer1[16] = {0x00, 0x00, 0x03, len+5, 0xD1, 0x01, len+1, 0x55, uriIdentifier, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
^
C:\Users\ABC\Documents\Arduino\libraries\Adafruit-PN532-master\Adafruit_PN532.cpp:1056:72: warning: narrowing conversion of ‘(((int)len) + 1)’ from ‘int’ to ‘uint8_t {aka unsigned char}’ inside { } [-Wnarrowing]
uint8_t sectorbuffer1[16] = {0x00, 0x00, 0x03, len+5, 0xD1, 0x01, len+1, 0x55, uriIdentifier, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
^
C:\Users\ABC\Documents\Arduino\libraries\Adafruit-PN532-master\Adafruit_PN532.cpp: In member function ‘uint8_t Adafruit_PN532::ntag2xx_WriteNDEFURI(uint8_t, char*, uint8_t)’:
C:\Users\ABC\Documents\Arduino\libraries\Adafruit-PN532-master\Adafruit_PN532.cpp:1424:8: warning: narrowing conversion of ‘(((int)len) + 5)’ from ‘int’ to ‘uint8_t {aka unsigned char}’ inside { } [-Wnarrowing]
len+5, /* Payload Length (not including 0xFE trailer) */
^
C:\Users\ABC\Documents\Arduino\libraries\Adafruit-PN532-master\Adafruit_PN532.cpp:1427:8: warning: narrowing conversion of ‘(((int)len) + 1)’ from ‘int’ to ‘uint8_t {aka unsigned char}’ inside { } [-Wnarrowing]
len+1, /* Payload len */
^
Tušíš co se m může nelíbit?
Díky!
Předpokládám, že sis stáhnul všechny knihovny. Podle popisů jde o konverzi datových typů. Osobně jsem to do Nano nahrával a když jsem měl stažené všechny knihovny, tak nebyl žádný problém…
Jo, stahnul jsem knihovnu Adafruit-PN532 plus v IDE nainstaloval knihovny Wire.h a SPI.h.
Mám taky nano, jel jsem podle návodu ale zarazil jsem se hned na začátku při kompilaci 🙁
Díky za super stavebnici! Funkční a v nejbližších dnech budu integrovat do Loxone. Jsem zvědavý na další projekt (klávesnice). Však by mě zajímalo jak vymazat paměť EEPROM. Čtečka obsahuje 25 karet, už z výroby? Díky
mam rovnaky problem ako @radek, zistili ste kde je chyba?
Ahoj, je reálně možné, že NFC čtečka bude ovladatelná po přiložení telefonu s NFC ?
Díky moc.
Taktiez by ma zaujimala tato odpoved. Kedze platba kartou a nfc na otvorenie domu (preklik) by bolo pekne vyuzitie.
Ahoj,
mohu jeden amatérský dotaz ohledně připojení k Loxone ? D8 Arduina na 1wire ext DQ ? GND z 1wire ext je potřeba připojit na GND arduina ? Arduino D7 pulzní výstup funguje jak ? Pokud připojuji pulsní elektroměr, tak 2 vodiče jeden 24V pošle z lox a když se na druhé svorce vrátí, tak započte puls. Tady potřebuji krapet nakopnout. Děkuji.