NFC With peripherals

Dependencies:   EthernetInterface_NFC HTTPClient_NFC LibPN532_NFC mbed-rtos mbed

Fork of NFC_Secure_Access by Aniket Udare

Committer:
udareaniket
Date:
Fri Apr 27 15:10:45 2018 +0000
Revision:
4:25a67f63d5a3
Parent:
3:17dd24c1b0c3
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
udareaniket 1:6e04ab90909f 1 #include <sstream>
dotnfc 0:54a12c4b19c2 2 #include "mbed.h"
dotnfc 0:54a12c4b19c2 3 #include "PN532.h"
dotnfc 0:54a12c4b19c2 4 #include "PN532_HSU.h"
dotnfc 0:54a12c4b19c2 5 #include "PN532_SPI.h"
dotnfc 0:54a12c4b19c2 6 #include "PN532_I2C.h"
udareaniket 1:6e04ab90909f 7 #include "EthernetInterface.h"
udareaniket 1:6e04ab90909f 8 #include "HTTPClient.h"
dotnfc 0:54a12c4b19c2 9
udareaniket 1:6e04ab90909f 10 char* thingSpeakUrl = "http://api.thingspeak.com/update";
udareaniket 1:6e04ab90909f 11 char* thingSpeakKey = "7QKJFB65MJBCNM3L";
udareaniket 1:6e04ab90909f 12 EthernetInterface eth;
udareaniket 1:6e04ab90909f 13 TCPSocketConnection sock;
udareaniket 4:25a67f63d5a3 14 DigitalOut red (LED1); // error led
udareaniket 4:25a67f63d5a3 15 DigitalOut green (LED2);
udareaniket 4:25a67f63d5a3 16 DigitalOut buzz (D8);
udareaniket 1:6e04ab90909f 17 Serial pc(USBTX, USBRX);
udareaniket 4:25a67f63d5a3 18
dotnfc 0:54a12c4b19c2 19 // ----------------------------------------- HSU
dotnfc 0:54a12c4b19c2 20 //HardwareSerial pn532_hsu (PC_10, PC_11);
dotnfc 0:54a12c4b19c2 21 //PN532_HSU pn532_if (pn532_hsu);
udareaniket 4:25a67f63d5a3 22
dotnfc 0:54a12c4b19c2 23 // ----------------------------------------- SPI
udareaniket 1:6e04ab90909f 24 SPI pn532_spi (D11, D12, D13);
udareaniket 1:6e04ab90909f 25 PN532_SPI pn532_if (pn532_spi, D10);
udareaniket 4:25a67f63d5a3 26
dotnfc 0:54a12c4b19c2 27 // ----------------------------------------- I2C
dotnfc 0:54a12c4b19c2 28 //I2C pn532_i2c (I2C_SDA, I2C_SCL);
dotnfc 0:54a12c4b19c2 29 //PN532_I2C pn532_if (pn532_i2c);
udareaniket 4:25a67f63d5a3 30
dotnfc 0:54a12c4b19c2 31 PN532 nfc(pn532_if);
dotnfc 0:54a12c4b19c2 32 void setup(void)
dotnfc 0:54a12c4b19c2 33 {
udareaniket 4:25a67f63d5a3 34 red = 1;
udareaniket 4:25a67f63d5a3 35 green = 1;
dotnfc 0:54a12c4b19c2 36 uint32_t versiondata = 0;
dotnfc 0:54a12c4b19c2 37 pc.baud(115200);
dotnfc 0:54a12c4b19c2 38 while (1) {
dotnfc 0:54a12c4b19c2 39 nfc.begin();
dotnfc 0:54a12c4b19c2 40 versiondata = nfc.getFirmwareVersion();
dotnfc 0:54a12c4b19c2 41 if (! versiondata) {
udareaniket 1:6e04ab90909f 42 pc.printf("Didn't find PN53x board\n\n\r");
dotnfc 0:54a12c4b19c2 43 wait_ms(500);
dotnfc 0:54a12c4b19c2 44 } else {
dotnfc 0:54a12c4b19c2 45 break;
dotnfc 0:54a12c4b19c2 46 }
dotnfc 0:54a12c4b19c2 47 }
udareaniket 1:6e04ab90909f 48 pc.printf ("\rFound chip PN5%02X , Firmware ver. %d.%d\n",
dotnfc 0:54a12c4b19c2 49 (versiondata>>24) & 0xFF,
dotnfc 0:54a12c4b19c2 50 (versiondata>>16) & 0xFF,
dotnfc 0:54a12c4b19c2 51 (versiondata>>8) & 0xFF);
dotnfc 0:54a12c4b19c2 52 nfc.setPassiveActivationRetries(0xFF);
udareaniket 4:25a67f63d5a3 53
dotnfc 0:54a12c4b19c2 54 // configure board to read RFID tags
udareaniket 1:6e04ab90909f 55 //nfc.SAMConfig();
udareaniket 4:25a67f63d5a3 56
udareaniket 1:6e04ab90909f 57 pc.printf ("\n\rWaiting for an ISO14443A card\n");
udareaniket 1:6e04ab90909f 58 }
udareaniket 4:25a67f63d5a3 59
udareaniket 4:25a67f63d5a3 60
dotnfc 0:54a12c4b19c2 61 /*==============================================================================
dotnfc 0:54a12c4b19c2 62 * \brief main entry
dotnfc 0:54a12c4b19c2 63 */
dotnfc 0:54a12c4b19c2 64 int main()
dotnfc 0:54a12c4b19c2 65 {
udareaniket 4:25a67f63d5a3 66
udareaniket 1:6e04ab90909f 67 eth.init(); //Use DHCP
udareaniket 1:6e04ab90909f 68 eth.connect();
udareaniket 1:6e04ab90909f 69 printf("\n\rEthernet connected, and IP Address is %s\n\r", eth.getIPAddress());
dotnfc 0:54a12c4b19c2 70 setup();
udareaniket 4:25a67f63d5a3 71
udareaniket 4:25a67f63d5a3 72 while (1) {
udareaniket 4:25a67f63d5a3 73 bool success;
udareaniket 4:25a67f63d5a3 74 uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
udareaniket 4:25a67f63d5a3 75 uint8_t uidLength;
udareaniket 4:25a67f63d5a3 76 success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
udareaniket 4:25a67f63d5a3 77 if (success) {
udareaniket 4:25a67f63d5a3 78 pc.printf("\n\rFound a card!\n\r");
udareaniket 4:25a67f63d5a3 79 pc.printf("UID Length: %d bytes\n\r", uidLength);
udareaniket 4:25a67f63d5a3 80 pc.printf("UID Value: ");
udareaniket 4:25a67f63d5a3 81 for (uint8_t i=0; i < uidLength; i++) {
udareaniket 4:25a67f63d5a3 82 pc.printf(" 0x%02X", uid[i]);
udareaniket 4:25a67f63d5a3 83 }
udareaniket 4:25a67f63d5a3 84 uint8_t data[4];
udareaniket 4:25a67f63d5a3 85 char card[4];
udareaniket 4:25a67f63d5a3 86 memcpy(card, (const char[]) { 'a', 'n', 'i', 'k'
udareaniket 4:25a67f63d5a3 87 }, sizeof card);
udareaniket 4:25a67f63d5a3 88 // If you want to write something to block 4 to test with, uncomment
udareaniket 4:25a67f63d5a3 89 // the following line and this text should be read back in a minute
udareaniket 4:25a67f63d5a3 90 //memcpy(data, (const uint8_t[]) { 'a', 'n', 'i', 'k'
udareaniket 4:25a67f63d5a3 91 //}, sizeof data);
udareaniket 4:25a67f63d5a3 92 //success = nfc.mifareclassic_WriteDataBlock (4, data);
udareaniket 4:25a67f63d5a3 93
udareaniket 4:25a67f63d5a3 94 // Try to read the contents of block 4
udareaniket 4:25a67f63d5a3 95 success = nfc.mifareclassic_ReadDataBlock(4, data);
udareaniket 4:25a67f63d5a3 96 if (success) {
udareaniket 4:25a67f63d5a3 97 char s = 's';
udareaniket 4:25a67f63d5a3 98 for (uint8_t i = 0; i < 4; i++) {
udareaniket 4:25a67f63d5a3 99 char c = data[i];
udareaniket 4:25a67f63d5a3 100 if(c!=card[i]) {
udareaniket 4:25a67f63d5a3 101 s='f';
udareaniket 4:25a67f63d5a3 102 }
udareaniket 4:25a67f63d5a3 103 }
udareaniket 4:25a67f63d5a3 104 char str[]="";
udareaniket 4:25a67f63d5a3 105 int value = 0;
udareaniket 4:25a67f63d5a3 106 if(s=='s') {
udareaniket 4:25a67f63d5a3 107 pc.printf("\n\rCard for Aniket Accessed\n\r");
udareaniket 4:25a67f63d5a3 108 strcat(str, "Aniket's Card Accessed");
udareaniket 4:25a67f63d5a3 109 value = 1;
udareaniket 4:25a67f63d5a3 110 green = 0;
udareaniket 4:25a67f63d5a3 111 buzz = 0;
udareaniket 4:25a67f63d5a3 112 } else {
udareaniket 4:25a67f63d5a3 113 pc.printf("\n\rNo access for this card\n\r");
udareaniket 4:25a67f63d5a3 114 strcat(str,"Invalid Card Accessed");
udareaniket 4:25a67f63d5a3 115 value = 404;
udareaniket 4:25a67f63d5a3 116 red = 0;
udareaniket 4:25a67f63d5a3 117 buzz = 1;
udareaniket 4:25a67f63d5a3 118 }
udareaniket 4:25a67f63d5a3 119 HTTPClient http;
udareaniket 4:25a67f63d5a3 120 char buffer[256];
udareaniket 4:25a67f63d5a3 121 sprintf(buffer,"%s?api_key=%s&field1=%d",thingSpeakUrl,thingSpeakKey,value);
udareaniket 4:25a67f63d5a3 122 printf("Send to %s\r\n", buffer);
udareaniket 4:25a67f63d5a3 123 http.get(buffer, buffer , 10);
udareaniket 4:25a67f63d5a3 124 wait_ms (5000);
udareaniket 4:25a67f63d5a3 125 red = 1;
udareaniket 4:25a67f63d5a3 126 green = 1;
udareaniket 4:25a67f63d5a3 127 }
udareaniket 4:25a67f63d5a3 128
udareaniket 4:25a67f63d5a3 129 } else {
udareaniket 4:25a67f63d5a3 130 // PN532 probably timed out waiting for a card
udareaniket 4:25a67f63d5a3 131 pc.printf("\n\rWaiting for a card\n\r");
udareaniket 4:25a67f63d5a3 132 wait_ms (5000);
udareaniket 4:25a67f63d5a3 133 buzz = 0;
udareaniket 4:25a67f63d5a3 134 }
udareaniket 4:25a67f63d5a3 135 }
udareaniket 4:25a67f63d5a3 136 // loop ();
udareaniket 1:6e04ab90909f 137 eth.disconnect();
udareaniket 4:25a67f63d5a3 138 }
udareaniket 4:25a67f63d5a3 139