Read nfc tags and push data to thingspeak and send a push notification to users accordingly.

Dependencies:   EthernetInterface_NFC HTTPClient_NFC LibPN532_NFC mbed-rtos mbed

Fork of PN532_ReadUid by dotnfc Tang

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