NFC With peripherals

Dependencies:   EthernetInterface_NFC HTTPClient_NFC LibPN532_NFC mbed-rtos mbed

Fork of NFC_Secure_Access by Aniket Udare

Committer:
chavan
Date:
Thu Apr 26 18:40:34 2018 +0000
Revision:
2:881a9a0da73f
Parent:
1:6e04ab90909f
Child:
3:17dd24c1b0c3
NFC Secured Access

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