PROGRAMA COMPLETO
Dependencies: PN532_MK20 USBDevice mbed
UtilidadesNFC.cpp@3:74dccd92e7f2, 2015-04-24 (annotated)
- Committer:
- mauroar211
- Date:
- Fri Apr 24 20:44:50 2015 +0000
- Revision:
- 3:74dccd92e7f2
- Parent:
- 2:e2d9212cbca3
PROGRAMA COMPLETO:; leer; escribir; emular
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mauroar211 | 0:4075acb88627 | 1 | /* |
mauroar211 | 0:4075acb88627 | 2 | -------------------------------------------------------------- |
mauroar211 | 0:4075acb88627 | 3 | ---- DECLARACIONES DE LIBRERIAS |
mauroar211 | 0:4075acb88627 | 4 | -------------------------------------------------------------- |
mauroar211 | 0:4075acb88627 | 5 | */ |
mauroar211 | 0:4075acb88627 | 6 | #include "mbed.h" |
mauroar211 | 0:4075acb88627 | 7 | #include "PN532_SPI.h" |
mauroar211 | 0:4075acb88627 | 8 | #include "NfcAdapter.h" |
mauroar211 | 0:4075acb88627 | 9 | #include "PN532.h" |
mauroar211 | 0:4075acb88627 | 10 | #include "USBSerial.h" |
mauroar211 | 0:4075acb88627 | 11 | #include "UtilidadesNFC.h" |
mauroar211 | 2:e2d9212cbca3 | 12 | #include "snep.h" |
mauroar211 | 2:e2d9212cbca3 | 13 | #include "NdefMessage.h" |
mauroar211 | 0:4075acb88627 | 14 | |
mauroar211 | 0:4075acb88627 | 15 | /* |
mauroar211 | 0:4075acb88627 | 16 | -------------------------------------------------------------- |
mauroar211 | 0:4075acb88627 | 17 | ---- DECLARACIONES DE EXTERNAS |
mauroar211 | 0:4075acb88627 | 18 | -------------------------------------------------------------- |
mauroar211 | 0:4075acb88627 | 19 | */ |
mauroar211 | 0:4075acb88627 | 20 | extern USBSerial usb; |
mauroar211 | 0:4075acb88627 | 21 | extern DigitalOut red; |
mauroar211 | 0:4075acb88627 | 22 | extern DigitalOut green; |
mauroar211 | 0:4075acb88627 | 23 | extern DigitalOut blue; |
mauroar211 | 2:e2d9212cbca3 | 24 | extern uint8_t ndefBuf[128]; |
mauroar211 | 2:e2d9212cbca3 | 25 | extern char buffertexto[15]; |
mauroar211 | 0:4075acb88627 | 26 | |
mauroar211 | 0:4075acb88627 | 27 | /* |
mauroar211 | 0:4075acb88627 | 28 | -------------------------------------------------------------- |
mauroar211 | 0:4075acb88627 | 29 | ---- FUNCIONES |
mauroar211 | 0:4075acb88627 | 30 | -------------------------------------------------------------- |
mauroar211 | 0:4075acb88627 | 31 | */ |
mauroar211 | 0:4075acb88627 | 32 | |
mauroar211 | 0:4075acb88627 | 33 | //Funcion para Inicializar el Chip NFC PN532 |
mauroar211 | 0:4075acb88627 | 34 | NfcAdapter inicializarlector() |
mauroar211 | 0:4075acb88627 | 35 | { |
mauroar211 | 0:4075acb88627 | 36 | //Se inicializa el modulo de comunicacion SPI en los pines D11 (MOSI), D12 (MISO) y D13(CLK) |
mauroar211 | 0:4075acb88627 | 37 | SPI spi(D11, D12, D13); |
mauroar211 | 0:4075acb88627 | 38 | //se selecciona el pin SS (slave selector) |
mauroar211 | 0:4075acb88627 | 39 | PN532_SPI pn532spi(spi, D10); |
mauroar211 | 0:4075acb88627 | 40 | //envia comandos para inicializar comunicacion con el chip |
mauroar211 | 0:4075acb88627 | 41 | NfcAdapter nfc(pn532spi); |
mauroar211 | 0:4075acb88627 | 42 | //configura el chip en modo lectura escritura |
mauroar211 | 0:4075acb88627 | 43 | nfc.begin(); |
mauroar211 | 0:4075acb88627 | 44 | return nfc; |
mauroar211 | 0:4075acb88627 | 45 | }; |
mauroar211 | 0:4075acb88627 | 46 | |
mauroar211 | 0:4075acb88627 | 47 | |
mauroar211 | 0:4075acb88627 | 48 | //Funcion para identificar si hay un TAG en el modulo, obtener su ID y leer mensajes en memoria |
mauroar211 | 0:4075acb88627 | 49 | int LeerTagNFC(){ |
mauroar211 | 0:4075acb88627 | 50 | |
mauroar211 | 0:4075acb88627 | 51 | //FUNCION PARA CONFIGURAR EL MODULO NFC |
mauroar211 | 0:4075acb88627 | 52 | NfcAdapter nfc = inicializarlector(); |
mauroar211 | 0:4075acb88627 | 53 | |
mauroar211 | 0:4075acb88627 | 54 | while (1) { |
mauroar211 | 0:4075acb88627 | 55 | |
mauroar211 | 0:4075acb88627 | 56 | usb.printf("\r buscando Tag NFC\n\r"); |
mauroar211 | 0:4075acb88627 | 57 | |
mauroar211 | 0:4075acb88627 | 58 | |
mauroar211 | 0:4075acb88627 | 59 | if (nfc.tagPresent()) { //ESCANEA HASTA ENCONTRAR UN TAG |
mauroar211 | 0:4075acb88627 | 60 | usb.printf("\r Tag encontrado \n\r"); |
mauroar211 | 0:4075acb88627 | 61 | unsigned int type1 = nfc.guessTagType(); //OBTIENE EL TIPO DE TAG |
mauroar211 | 0:4075acb88627 | 62 | NfcTag tag = nfc.read(); //LEE EL TAG |
mauroar211 | 0:4075acb88627 | 63 | if (type1 == TAG_TYPE_MIFARE_CLASSIC){ |
mauroar211 | 0:4075acb88627 | 64 | red = 0; |
mauroar211 | 0:4075acb88627 | 65 | blue = 0; |
mauroar211 | 0:4075acb88627 | 66 | wait(0.5); |
mauroar211 | 0:4075acb88627 | 67 | } |
mauroar211 | 0:4075acb88627 | 68 | |
mauroar211 | 0:4075acb88627 | 69 | string id = tag.getUidString(); //OBTIENE EL ID DEL TAG |
mauroar211 | 0:4075acb88627 | 70 | |
mauroar211 | 0:4075acb88627 | 71 | usb.printf("|id: %s|\n\r", id); |
mauroar211 | 0:4075acb88627 | 72 | |
mauroar211 | 0:4075acb88627 | 73 | if (tag.hasNdefMessage()) { //INDICA SI EL TAG TIENE UN MENSAJE EN SU MEMORIA |
mauroar211 | 0:4075acb88627 | 74 | NdefMessage mensaje = tag.getNdefMessage();//OBTIENE EL MENSAJE DENTRO DEL TAG |
mauroar211 | 0:4075acb88627 | 75 | usb.printf("|Mensaje: %s|\n\r", mensaje); |
mauroar211 | 0:4075acb88627 | 76 | } |
mauroar211 | 0:4075acb88627 | 77 | return 1; |
mauroar211 | 0:4075acb88627 | 78 | } |
mauroar211 | 0:4075acb88627 | 79 | wait(1); |
mauroar211 | 0:4075acb88627 | 80 | } |
mauroar211 | 0:4075acb88627 | 81 | } |
mauroar211 | 0:4075acb88627 | 82 | |
mauroar211 | 0:4075acb88627 | 83 | |
mauroar211 | 0:4075acb88627 | 84 | int escribirTagNFC(){ |
mauroar211 | 3:74dccd92e7f2 | 85 | //Se inicializa el modulo de comunicacion SPI en los pines D11 (MOSI), D12 (MISO) y D13(CLK) |
mauroar211 | 3:74dccd92e7f2 | 86 | SPI spi(D11, D12, D13); |
mauroar211 | 3:74dccd92e7f2 | 87 | //se selecciona el pin SS (slave selector) |
mauroar211 | 3:74dccd92e7f2 | 88 | PN532_SPI pn532spi(spi, D10); |
mauroar211 | 3:74dccd92e7f2 | 89 | //envia comandos para inicializar comunicacion con el chip |
mauroar211 | 3:74dccd92e7f2 | 90 | NfcAdapter nfc(pn532spi); |
mauroar211 | 3:74dccd92e7f2 | 91 | //configura el chip en modo lectura escritura |
mauroar211 | 3:74dccd92e7f2 | 92 | nfc.begin(); |
mauroar211 | 0:4075acb88627 | 93 | |
mauroar211 | 0:4075acb88627 | 94 | while (1) { |
mauroar211 | 0:4075acb88627 | 95 | usb.printf("\r Coloque una etiqueta Mifare Classic NFC formateada en el lector \n\r"); |
mauroar211 | 0:4075acb88627 | 96 | if (nfc.tagPresent()) { |
mauroar211 | 0:4075acb88627 | 97 | usb.printf("\r entre \r\n"); |
mauroar211 | 0:4075acb88627 | 98 | NdefMessage message = NdefMessage(); |
mauroar211 | 3:74dccd92e7f2 | 99 | message.addTextRecord(buffertexto); |
mauroar211 | 0:4075acb88627 | 100 | // message.addUriRecord(""); |
mauroar211 | 0:4075acb88627 | 101 | bool success = nfc.write(message); |
mauroar211 | 0:4075acb88627 | 102 | if (success) { |
mauroar211 | 0:4075acb88627 | 103 | usb.printf("\r Trate de leer esta etiqueta con su telefono \n\r"); |
mauroar211 | 0:4075acb88627 | 104 | green = 0; |
mauroar211 | 0:4075acb88627 | 105 | blue = 0; |
mauroar211 | 0:4075acb88627 | 106 | return 1; |
mauroar211 | 0:4075acb88627 | 107 | } |
mauroar211 | 0:4075acb88627 | 108 | else { |
mauroar211 | 0:4075acb88627 | 109 | usb.printf("\r no se escribio \n\r"); |
mauroar211 | 0:4075acb88627 | 110 | } |
mauroar211 | 0:4075acb88627 | 111 | |
mauroar211 | 0:4075acb88627 | 112 | } |
mauroar211 | 0:4075acb88627 | 113 | wait(2); |
mauroar211 | 0:4075acb88627 | 114 | } |
mauroar211 | 0:4075acb88627 | 115 | |
mauroar211 | 2:e2d9212cbca3 | 116 | } |
mauroar211 | 2:e2d9212cbca3 | 117 | |
mauroar211 | 2:e2d9212cbca3 | 118 | int emularTagNFC(){ |
mauroar211 | 2:e2d9212cbca3 | 119 | |
mauroar211 | 2:e2d9212cbca3 | 120 | uint8_t ndefBuf[128]; //EL MENSAJE NO PUEDE SUPERAR LOS 128 CARACTERES. |
mauroar211 | 2:e2d9212cbca3 | 121 | //Se inicializa el modulo de comunicacion SPI en los pines D11 (MOSI), D12 (MISO) y D13(CLK) |
mauroar211 | 2:e2d9212cbca3 | 122 | SPI spi(D11, D12, D13); |
mauroar211 | 2:e2d9212cbca3 | 123 | //se selecciona el pin SS (slave selector) |
mauroar211 | 2:e2d9212cbca3 | 124 | PN532_SPI pn532spi(spi, D10); |
mauroar211 | 2:e2d9212cbca3 | 125 | //configura el chip en modo emulacion de tarjeta |
mauroar211 | 2:e2d9212cbca3 | 126 | SNEP nfc(pn532spi); |
mauroar211 | 2:e2d9212cbca3 | 127 | |
mauroar211 | 2:e2d9212cbca3 | 128 | //uint8_t ndefBuf[128]; //EL MENSAJE NO PUEDE SUPERAR LOS 128 CARACTERES. |
mauroar211 | 2:e2d9212cbca3 | 129 | |
mauroar211 | 2:e2d9212cbca3 | 130 | while (1) { |
mauroar211 | 2:e2d9212cbca3 | 131 | usb.printf("\r ENVIANDO MENSAJE - \n\r "); |
mauroar211 | 2:e2d9212cbca3 | 132 | NdefMessage message = NdefMessage(); |
mauroar211 | 2:e2d9212cbca3 | 133 | message.addTextRecord(buffertexto);//COMANDO UTILIZADO PARA ENVIAR TEXTO PLANO |
mauroar211 | 2:e2d9212cbca3 | 134 | //message.addUriRecord("http://www.pizzaspiccolo.com.co/");//COMANDO UTILIZADO PARA ENVIAR UNA URL |
mauroar211 | 2:e2d9212cbca3 | 135 | int messageSize = message.getEncodedSize();//OBTIENE EL TAMAÑO TOTAL DEL MENSAJE (ENCABEZADO + TEXTO) |
mauroar211 | 2:e2d9212cbca3 | 136 | if (messageSize > sizeof(ndefBuf)) { |
mauroar211 | 2:e2d9212cbca3 | 137 | usb.printf("EL MENSAJE ES DEMASIADO GRANDE\r\n"); |
mauroar211 | 2:e2d9212cbca3 | 138 | |
mauroar211 | 2:e2d9212cbca3 | 139 | } |
mauroar211 | 2:e2d9212cbca3 | 140 | message.encode(ndefBuf);//ENCAPSULA EL ENCABEZADO Y EL MENSAJE EN EL BUFFER |
mauroar211 | 2:e2d9212cbca3 | 141 | if (0 >= nfc.write(ndefBuf, messageSize)) {//ESCRIBE EL MENSAJE EN UN DISPOSITIVO MOVIL COMPATIBLE |
mauroar211 | 2:e2d9212cbca3 | 142 | usb.printf("FALLO\r\n"); |
mauroar211 | 2:e2d9212cbca3 | 143 | } else { |
mauroar211 | 2:e2d9212cbca3 | 144 | usb.printf("MENSAJE ENVIADO\r\n"); |
mauroar211 | 2:e2d9212cbca3 | 145 | return 1; |
mauroar211 | 2:e2d9212cbca3 | 146 | } |
mauroar211 | 2:e2d9212cbca3 | 147 | |
mauroar211 | 2:e2d9212cbca3 | 148 | wait(1); |
mauroar211 | 2:e2d9212cbca3 | 149 | } |
mauroar211 | 2:e2d9212cbca3 | 150 | |
mauroar211 | 2:e2d9212cbca3 | 151 | } |