NFC With peripherals
Dependencies: EthernetInterface_NFC HTTPClient_NFC LibPN532_NFC mbed-rtos mbed
Fork of NFC_Secure_Access by
main.cpp@4:25a67f63d5a3, 2018-04-27 (annotated)
- 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?
User | Revision | Line number | New 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 |