Discussione PN532 ed Arduino per lettura tag

firmware

Utente Bronze
3 Febbraio 2020
27
1
3
29
Un saluto a tutti, come da titolo mi sono lanciato in questa sfida di crearmi un lettore/scrittore di tag ISO14443B in autonomia. Ho preso un PN532 V4 by elechouse ed un Arduino. Il protocollo di comunicazione usato è l'i2c e ho scritto qualche funzione in aggiunta alla libreria fornita da elechouse in quanto non c'erano quelle adatte allo standard citato in precedenza. Il problema è che non riesco a fare la lettura del tag, per intenderci non arrivo al INIT e SELECT per chi ha letto qualche datasheet. Mi chiedevo se c'è qualcuno con un po' più di esperienza che volesse aiutarmi in questo sviluppo. Ovviamente per chi fosse interessato condividerò lo sketch di Arduino e la libreria per capire ciò che ho fatto sin ora.
Per escludere problemi al PN532 ho provato a fare una lettura di un tag ISO14443A ed è tutto ok. Nel datasheet del PN532 c'è scritto che è possibile la lettura/scrittura del ISO14443B quindi vorrei confrontarmi per capire se ho scritto male qualcosa o se può essere ad esempio un limite dell'antenna integrata.
Il PN532 è questo:
NFC_V4-1.jpg
 
  • Mi piace
Reazioni: nicovon
Un saluto a tutti, come da titolo mi sono lanciato in questa sfida di crearmi un lettore/scrittore di tag ISO14443B in autonomia. Ho preso un PN532 V4 by elechouse ed un Arduino. Il protocollo di comunicazione usato è l'i2c e ho scritto qualche funzione in aggiunta alla libreria fornita da elechouse in quanto non c'erano quelle adatte allo standard citato in precedenza. Il problema è che non riesco a fare la lettura del tag, per intenderci non arrivo al INIT e SELECT per chi ha letto qualche datasheet. Mi chiedevo se c'è qualcuno con un po' più di esperienza che volesse aiutarmi in questo sviluppo. Ovviamente per chi fosse interessato condividerò lo sketch di Arduino e la libreria per capire ciò che ho fatto sin ora.
Per escludere problemi al PN532 ho provato a fare una lettura di un tag ISO14443A ed è tutto ok. Nel datasheet del PN532 c'è scritto che è possibile la lettura/scrittura del ISO14443B quindi vorrei confrontarmi per capire se ho scritto male qualcosa o se può essere ad esempio un limite dell'antenna integrata.
Il PN532 è questo:
NFC_V4-1.jpg
Il pn è quello ma il tag ISO14443B qual’è? Mi viene da pensare che vorresti leggere uno srix4k con la libreria per Arduino scritta per leggere gli srix4k con il pn532.
In tal caso sei sicuro che il tag che vuoi leggere è uno srix4k?
Ti faccio un esempio, se il tag in questione si trova all’interno di una mykey coges, dovresti sapere che da un certo seriale in poi (che non ricordo) la coges non utilizza più gli srix4k ma altri tag che sono compatibili per le loro macchinette ma evidentemente non lo sono per la libreria che usi tu. Tutto ciò se le mie premesse sono valide altrimenti ignora questo messaggio.
 
Se vuoi iniziare a leggere e scrivere i tag ISO14443B , puoi iniziare utilizzando lo sketch realizzato da PTR anni fa che ti assicuro funziona sia in lettura che in scrittura con l'hardware in tuo possesso.

Grazie per la risposta Stikki. Avevo già visto quella libreria ma la Adafruit non funziona per il mio PN532 (non viene rilevato dall’arduino, potrebbe essere un problema nella funzione begin) e non vorrei spendere troppo tempo a capire il motivo visto che ho una libreria fatta apposta dal produttore che invece funziona correttamente. Dopo questa premessa sono abbastanza sicuro di aver scritto bene le funzioni infatti riesco a spedire il comando ma quando devo ricevere la risposta la funzione va in timeout o comunque fallisce. Altre idee?
 
Ultima modifica:
Il pn è quello ma il tag ISO14443B qual’è? Mi viene da pensare che vorresti leggere uno srix4k con la libreria per Arduino scritta per leggere gli srix4k con il pn532.
In tal caso sei sicuro che il tag che vuoi leggere è uno srix4k?
Ti faccio un esempio, se il tag in questione si trova all’interno di una mykey coges, dovresti sapere che da un certo seriale in poi (che non ricordo) la coges non utilizza più gli srix4k ma altri tag che sono compatibili per le loro macchinette ma evidentemente non lo sono per la libreria che usi tu. Tutto ciò se le mie premesse sono valide altrimenti ignora questo messaggio.
Grazie mikegim per la tua risposta. Il tag che voglio leggere e scrivere è quello (ecco perché ho scritto qua) ma non volevo scriverlo così apertamente e cercavo un pubblico che avesse studiato un po’ e che quindi sapesse di cosa parlo senza esplicitarlo. Per venire alla tua domanda, si sono sicuro che sia quello perché ho tag molto vecchi (10 anni almeno) e di nuovi, inoltre molto tempo fa mi ero fatto un lettore/scrittore con CRX14 e quello funziona ancora alla perfezione. Escludo perciò l’anticollision che non supporta il pn532 ma che comunque mi sembra si possa implementare via software. La libreria di arduino che citavi per leggere quel tipo di tag ad ogni modo non la conosco, come dicevo le funzioni le ho implementate io estrapolandole dal datasheet.
Messaggio unito automaticamente:

Io ho il tuo setsso hardware e mi funziona la libreria di ptr. sia con PN532 clone che con quello originale
Come ti dicevo a me il pn532 con quella libreria non viene rilevato (la funzione getfirmware non va a buon fine). Potrebbe dipendere dall’arduino a questo punto. Il mio è un heltec Wi-Fi kit 32. Ho ancora dubbi comunque che l’antenna di quel pn532 sia disegnata correttamente ma comunque l’ho preso direttamente da sito di elechouse. Mi è sorto un altro dubbio però, tu utilizzi il segnale IRQ?
 
Aggiornamento:

per escludere problemi del modulo pn532 ho utilizzato un software open GNFC. Con questo software tutto bene, riesco a leggere l’uid dei vari tag. Direi quindi che il problema è sulla libreria che utilizzo. Siccome Stikki ha detto di aver utilizzato con successo la libreria con le funzioni create da Ptr, ho riscritto le stesse funzioni passando però per i metodi di read e write della libreria che già utilizzo. Anche in questo caso non funziona, quando chiamo initiate_select() la funzione va in timeout dopo la prima write. Se qualcuno avesse voglia di aiutarmi nel capire dov’è il problema nella libreria mi faccia sapere che gli giro il codice. Ovviamente una volta risolto l’arcano il codice sarà reso pubblico.
 
Niente IRQ, prova a usare questo sketch, è stato fatto da un utente di questo forum. Installa prima la libreria adafruit che utilizza lo sketch. In allegato vedi le foto della mia configurazione. ogni tanto il tag non viene rilevato correttamente, ma facendo reset su arduino torna a funzionare
 

Allegati

  • arduino_pn532_srix.zip
    19.4 KB · Visualizzazioni: 55
  • 1.jpg
    1.jpg
    130.2 KB · Visualizzazioni: 93
  • 2.jpg
    2.jpg
    174 KB · Visualizzazioni: 95
Niente IRQ, prova a usare questo sketch, è stato fatto da un utente di questo forum. Installa prima la libreria adafruit che utilizza lo sketch. In allegato vedi le foto della mia configurazione. ogni tanto il tag non viene rilevato correttamente, ma facendo reset su arduino torna a funzionare
Grazie Stikki, in giornata provo e ti faccio sapere. Se funziona cercherò di capire in cosa differisce dalla mia libreria.
 
Ritorno su questa discussione dopo diverso tempo in cui ho abbandonato il progetto per mancanza di tempo. Attualmente riesco a leggere e scrivere i tag con l'hardware citato in precedenza ma c'è una cosa che proprio non torna e dopo aver fatto varie prove e letto i vari manuali/datasheet ancora non ho trovato una soluzione.

Come sappiamo il primo comando da inviare dall'host al PN532 è inListPassiveTarget per attivare l'antenna e prepararlo alla ricezione del tag.
Il comando inviato è quindi: 4A 01 03 00 [4A comando inlist, 01 numero di tag massimi da intercettare, 03 modulazione 106 kpbs, 00 AFI]
La risposta da parte del PN532 dovrebbe essere: 4B 01 01 .... (più una serie di byte ATQB) [4B comando di risposta, 01 e 01 il numero dei tag individuati]

Il problema è che ricevo: 4B 00 00

Nonostante ciò come ho detto tutti gli altri comandi funzionano anche se il PN532 apparentemente non individua il tag.

Ho provato con lo sketch di @_Ptr_ per verificare di non aver commesso qualche errore ma ho lo stesso risultato.

Qualcuno ha qualche idea sul perché? Ripeto, funziona tutto ma questa cosa proprio non mi torna e ho provato inoltre con due diversi PN532.
 
Avendo un po' di tempo mi sono rimesso sul progetto abbandonato. Dopo un po' di studio (datasheet pn532, rispolverata del datasheet srix) e di scrittura di codice posso finalmente dire di aver completato il porting di mikai e di aver un hardware custom per lettura e scrittura. Complimenti a @SEG0C e a @lilz0C per la riscrittura.
 
Un saluto a tutti, come da titolo mi sono lanciato in questa sfida di crearmi un lettore/scrittore di tag ISO14443B in autonomia. Ho preso un PN532 V4 by elechouse ed un Arduino. Il protocollo di comunicazione usato è l'i2c e ho scritto qualche funzione in aggiunta alla libreria fornita da elechouse in quanto non c'erano quelle adatte allo standard citato in precedenza. Il problema è che non riesco a fare la lettura del tag, per intenderci non arrivo al INIT e SELECT per chi ha letto qualche datasheet. Mi chiedevo se c'è qualcuno con un po' più di esperienza che volesse aiutarmi in questo sviluppo. Ovviamente per chi fosse interessato condividerò lo sketch di Arduino e la libreria per capire ciò che ho fatto sin ora.
Per escludere problemi al PN532 ho provato a fare una lettura di un tag ISO14443A ed è tutto ok. Nel datasheet del PN532 c'è scritto che è possibile la lettura/scrittura del ISO14443B quindi vorrei confrontarmi per capire se ho scritto male qualcosa o se può essere ad esempio un limite dell'antenna integrata.
Il PN532 è questo:
NFC_V4-1.jpg
Ho comprato anch'io un pn532 ma non è elechouse https://amzn.eu/d/4PD87Jo
non ho idea di come utilizzarlo, senza o con Arduino? qualcuno potrebbe spiegarmi come collegarlo?
 
Colle il
Hai scoperto come usare pn532 su Mikai magari senza Arduino ma con adattatore usb-seriale?
Colleghi il pn532 all'adattatore usb seriale tramite 4 fili, GND, VCC, RX e TX. Per usare mikai deve avere linux o una virtual machine con linux. Una volta collegata la usb otterrai una porta seriale, il lettore dovrebbe essere trovato in maniera automatica da mikai, se non lo fosse ci sono alcuni accorgimenti da prendere lato software.
 
Colle il

Colleghi il pn532 all'adattatore usb seriale tramite 4 fili, GND, VCC, RX e TX. Per usare mikai deve avere linux o una virtual machine con linux. Una volta collegata la usb otterrai una porta seriale, il lettore dovrebbe essere trovato in maniera automatica da mikai, se non lo fosse ci sono alcuni accorgimenti da prendere lato software.
il pn532 l'ho già collegato all'adattatore e installare linux affianco a widnows e usando mikai non riesco a far rilevare il lettore anche dopo aver installato tutte le librerie.
 
Avendo un po' di tempo mi sono rimesso sul progetto abbandonato. Dopo un po' di studio (datasheet pn532, rispolverata del datasheet srix) e di scrittura di codice posso finalmente dire di aver completato il porting di mikai e di aver un hardware custom per lettura e scrittura. Complimenti a @SEG0C e a @lilz0C per la riscrittura.
Sei poi riuscito ad interfacciare Mikai con il PN532? Io sto cercando di realizzare una versione portatile con un arduino mini e un PN532, se sei interessato scrivimi
Messaggio unito automaticamente:

Niente IRQ, prova a usare questo sketch, è stato fatto da un utente di questo forum. Installa prima la libreria adafruit che utilizza lo sketch. In allegato vedi le foto della mia configurazione. ogni tanto il tag non viene rilevato correttamente, ma facendo reset su arduino torna a funzionare
Ciao, sto cercando di realizzare più o meno la stessa cosa, hai voglia e tempo di darmi qualche dritta?