Marco Pucci

personal website

Tutorial 20 – Arduino NFC: Near Field Communication

Tutorial # 20- Arduino NFC: Near Field Communication

 

Per vedere tutti i tutorial: www.marcopucci.it/arduino/

 

images (1)
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.

 

 arduino-nfc

 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.

 

arduino-shield-nfc 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.

SerialMonitor_ardunio_nfc

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.

 

Untitled-1

 

 

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); }

 

nfc-near-field-communication

 

 

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′]

 

 
 
 

 

Licenza Creative Commons

I tutorial sono liberamente scaricabili e condivisibili sotto l’etichetta Creative Commons (non è possibile commercializzarli e modificarli)

 

 

icona_pdf Scarica il Pdf del tutorial di Arduino NFC

 

 

   
   
Ti è piaciuto il tutorial? Se ti va offrimi un caffè… [paypal-donation]  

 

 

Succ Articolo

Precedente Articolo

© 2024 Marco Pucci

Tema di Anders Norén