Tutorial # 20- Arduino NFC: Near Field Communication
Per vedere tutti i tutorial: www.marcopucci.it/arduino/
Segui la pagina Tutorial Arduino su Facebook
Materiale utilizzato – Arduino Uno, NFC Shield, 3 NGC Tag
Questo tutorial è stato realizzato in collaborazione con www.robotics-3d.com.
Se volete acquistare il kit per realizzare il tutorial cliccate qui.
Se avete già Arduino potete acquistare i singoli componenti in questi due link:
NFC Shield V2 – clicca qui
NFC Tag – clicca qui
In questo tutorial utilizziamo gli NFC. Cosa sono? Nfc sta per Near Field Communication (comunicazione in prossimità).
In poche parole grazie a dei Tag NFC (piccoli oggetti che possono contenere un messaggio) e ad un lettore NFC (in questo caso utilizziamo la Nfc Shield) Arduino è in grado di leggere il contenuto di questi messaggi avvicinando l’oggetto alla nostra scheda (circa 4 cm).
Esistono molte forme di Tag NFC come adesivi, portachiavi, tessere, ecc… che contengono al loro interno un piccolo chip. Questo chip può essere “scritto” infinite volte inserendo così un messaggio al suo interno.
Una volta avvicinato il Tag al lettore, Arduino legge il messaggio e lo analizza.
In questo tutorial realizziamo un progetto in grado di aprire diverse pagine web a seconda del contenuto presente nei vari Tag Nfc. Al di la del progetto illustrato potete utilizzare la Shield e i Tag in moltissimi modi modificando il codice di Arduino. Ad esempio una volta letto e interpretato il messaggio dei diversi Tag
possiamo accendere una luce, annaffiare una pianta, far muovere un robot o quello che più vi piace.
Nell’immagine sopra alcuni esempi di Tag Nfc. Con una semplice ricerca online potete acquistare i diversi modelli per i vostri progetti (il prezzo è di circa due euro).
Attenzione: consiglio di comprare i Tag riscrivibili per poterli utilizzare in diverse occasioni.
Quelli utilizzati in questo tutorial sono dei Tag portachiavi che potete comprare cliccando qui.
A sinistra la Shield NFC per Arduino. Inseriamo la scheda sopra Arduino e iniziamo a programmare. Il quadrato con il buco al centro è il nostro lettore dove dobbiamo avvicinare il Tag Nfc. |
Sketch Arduino – Scrittura Tag NFC
Installiamo la libreria NFC per Aduino.
– Clicca qui per scaricare i file. Scaricare il file .zip cliccando sull’ultimo bottone a destra (Download ZIP).
Aprite la cartella compressa e copiate le quattro cartelle (PN532, PN532_HSU, PN532_SPI e PN532_I2C) all’interno della cartella libraries di Arduino.
– Clicca qui per scaricare la seconda libreria. Click sul bottone a destra (Download ZIP).
Una volta scaricato aprite il file .zip. La cartella presente al suo interno (NDEF-master) deve essere rinominata in NDEF. Copiate questa cartella all’interno della cartella libraries di Arduino.
Fatto!
N.B: Clicca qui per scaricare tutti gli sketch utilizzati in questo tutorial.
Apriamo il file nfc_scrittura.ino
Compiliamo il programma per vedere se abbiamo commesso errori nell’installazione delle librerie (click sulla prima icona tonda con la V).
#include <SPI.h>
#include “PN532_SPI.h”
#include “PN532.h”
#include “NfcAdapter.h”
Importiamo la libreria installate
PN532_SPI interface(SPI, 10);
NfcAdapter nfc = NfcAdapter(interface);
void setup(void)
{
Serial.begin(9600);
Serial.println(“NDEF Reader”);
nfc.begin();
}
void loop(void)
{
Serial.println(“Place a formatted Mifare Classic NFC tag on the reader.”);
if(nfc.tagPresent())
{
NdefMessage message = NdefMessage();
message.addUriRecord(“ciao”);
Inserite il messaggio che volete registrare all’interno del Tag NFC.
bool success = nfc.write(message);
if(success)
{
Serial.println(“The message was successfully written to the tag.”);
Se la scrittura è andata a buon fine appare il messaggio di scrittura effettuata
}else{
Serial.println(“Message write failed.”);
}
}
delay(5000);
}
Apriamo il Serial Monitor e avviciniamo il Tag NFC al lettore come nella figura qui sotto.
Il Tag è stato scritto con successo! Il messaggio al suo interno rimane memorizzato finchè non cambiamo il codice con un altro testo, uplodiamo e passiamo nuovamente il Tag
vicino al lettore.
Sketch Arduino – Lettura Tag NFC
Apriamo il file nfc_lettura.ino
Uplodiamo il codice e apriamo il Serial Monitor. Avvicinando il Tag al lettore apparirà la scritta che abbiamo precedentemente memorizzato.
#include <SPI.h>
#include “PN532_SPI.h”
#include “PN532.h”
#include “NfcAdapter.h”
PN532_SPI interface(SPI, 10);
NfcAdapter nfc = NfcAdapter(interface);
void setup(void)
{
Serial.begin(9600); // start serial comm
Serial.println(“NDEF Reader”);
nfc.begin(); // begin NFC comm
}
void loop(void)
{
Serial.println(“\nScan an NFC tag\n”);
if (nfc.tagPresent())
Se vicino al lettore è presente un Tag NFC
{
NfcTag tag = nfc.read();
Leggo il contenuto del Tag
if(tag.hasNdefMessage())
{
NdefMessage message = tag.getNdefMessage();
for(int i=0;i<message.getRecordCount();i++)
{
NdefRecord record = message.getRecord(i);
int payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
Serial.write(payload,payloadLength);
Stampo il valore del messaggio memorizzato
}
}
}
delay(500); }
Sketch Arduino – Verifica del messaggio NFC
Apriamo il file _3_controllo_messaggio.ino
In questo sketch verifichiamo se il Tag ha al suo interno la parola “ciao”. Se è vero accendiamo un led altrimenti lo teniamo spento.
#include <SPI.h>
#include “PN532_SPI.h”
#include “PN532.h”
#include “NfcAdapter.h”
int led=9;
Il led deve essere posizionato nel pin 9
PN532_SPI interface(SPI, 10); // create a SPI interface for the shield with the SPI CS terminal at digital pin 10
NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter object
void setup(void)
{
pinMode(led,OUTPUT);
Serial.begin(9600); // start serial comm
Serial.println(“NDEF Reader”);
nfc.begin(); // begin NFC comm
}
void loop(void)
{
Serial.println(“\nScan an NFC tag\n”);
if (nfc.tagPresent()) // Do an NFC scan to see if an NFC tag is present
{
NfcTag tag = nfc.read(); // read the NFC tag
NdefMessage message = tag.getNdefMessage();
if(tag.hasNdefMessage())
{
NdefMessage message = tag.getNdefMessage();
for(int i=0;i<message.getRecordCount();i++)
{
NdefRecord record = message.getRecord(i);
int payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
String payloadAsString = “”;
for (int c = 0; c < payloadLength; c++) {
payloadAsString += (char)payload[c];
}
if (payloadAsString.substring(1) == “ciao”) {
Serial.println(“ok”);
digitalWrite(led,1);
Se il messaggio ricevuto è uguale a “ciao”
Scrivo sul Serial Monitor “ok” e accendo il led
}
else{
Serial.println(“no ok”);
digitalWrite(led,0);
Se il messaggio non è uguale a Ciao scrivo sul Serial Monitor “no ok” e spengo il led
}
}
}
}
delay(500);
}
Apertura pagina Web
Concludiamo il tutorial facendo aprire al nostro computer una pagina web (ad esempio Gmail) se avviciniamo un Tag con scritto “gmail”, un’altra pagina web (Yahoo) se il Tag
contiene “yahoo” e Facebook se il Tag contiene “facebook”.
Per realizzare questa parte finale abbiamo bisogno del programma Python che mette in comunicazione Arduino con il nostro Pc.
Se non hai letto il precedente tutorial su Python clicca qui.
Se invece volete far compiere ad Arduino diverse azioni basta che al posto del comando Serial.println(“yahoo”); fate muovere un motorino, accendere una luce o quello che volete.
Prima di tutto dobbiamo scrivere sui tre Tag i messaggi “gmail”, “yahoo” e “facebook”.
Uplodate ogni messaggio sul proprio Tag NFC.
…LA PRIMA PARTE E’ UGUALE AL PRECEDENTE CODICE
void loop(void)
{
// Serial.println(“\nScan an NFC tag\n”);
if (nfc.tagPresent()) {
NfcTag tag = nfc.read(); // read the NFC tag
NdefMessage message = tag.getNdefMessage();
if(tag.hasNdefMessage())
{
NdefMessage message = tag.getNdefMessage();
for(int i=0;i<message.getRecordCount();i++)
{
NdefRecord record = message.getRecord(i);
int payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
String payloadAsString = “”;
for (int c = 0; c < payloadLength; c++) {
payloadAsString += (char)payload[c];
}
if ((payloadAsString.substring(1) == gmail”)&(verifica==0)) {
Serial.println(“gmail”);
verifica=1;
Se il messaggio è uguale a “gmail” allora scrivo sul Serial Monitor la scritta “gmail” (questo messaggio verrà letto e interpretato da Python che aprirà la pagina web www.gmail.com
}
if ((payloadAsString.substring(1) == “yahoo”)&(verifica==0)) {
Serial.println(“yahoo”);
verifica=1;
}
if ((payloadAsString.substring(1) == “facebook”)&(verifica==0)) {
Serial.println(“facebook”);
verifica=1;
}
}
}
}
else{
verifica=0;
}
Python
Con Python possiamo leggere il messaggio che Arduino invia sul Serial Monitor e analizzarlo.
Se da Arduino arriva ad esempio la parola “facebook” verrà aperto il sito web www.facebook.com.
Se non avete letto il tutorial precedente sull’installazione e l’utilizzo di Python cliccate qui.
Aprite il file controllo if_arduino_NFC.py con Python IDLE.
import serial
import time
import webbrowser
ard = serial.Serial(‘COM9’, 9600, timeout=0)
Inserite al posto di COM9 la porta seriale con cui è collegato Arduino al vostro pc.
while True:
x = ard.readline()
all’interno della variabile x inseriamo il valore letto dal Serial Monitor
print (“Message from arduino: “)
print (x)
if “gmail” in x:
webbrowser.open(‘http://www.gmail.com’)
Se all’interno di x è contenuta la parola “gmail” allora apro la pagina web www.gmail.com
if “yahoo” in x:
webbrowser.open(‘http://www.yahoo.it’)
if “facebook” in x:
webbrowser.open(‘http://www.facebook.com’)
else:
print ‘nessun dato ricevuto !’
time.sleep(2)
Per far funzionare il progetto uplodiamo il codice di Arduino e teniamo CHIUSO il Serial Monitor.
In Python clicchiamo su Run – Run Module.
Avviciniamo uno dei tre Tag NFC al lettore e la relativa pagina web si aprirà!
Qui sotto alcune immagini della struttura che ho realizzato per il lettore NFC.
[slideshow_deploy id=’2905′]
I tutorial sono liberamente scaricabili e condivisibili sotto l’etichetta Creative Commons (non è possibile commercializzarli e modificarli)
Scarica il Pdf del tutorial di Arduino NFC |
Ti è piaciuto il tutorial? Se ti va offrimi un caffè… [paypal-donation] |