![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
NFC With peripherals
Dependencies: EthernetInterface_NFC HTTPClient_NFC LibPN532_NFC mbed-rtos mbed
Fork of NFC_Secure_Access by
main.cpp@3:17dd24c1b0c3, 2018-04-27 (annotated)
- Committer:
- chavan
- Date:
- Fri Apr 27 13:28:48 2018 +0000
- Revision:
- 3:17dd24c1b0c3
- Parent:
- 2:881a9a0da73f
- Child:
- 4:25a67f63d5a3
nfc
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 | |
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 | 3:17dd24c1b0c3 | 98 | |
chavan | 3:17dd24c1b0c3 | 99 | pc.printf("\n\rNo access for this card\n\r"); |
chavan | 3:17dd24c1b0c3 | 100 | strcat(str,"Invalid Card Accessed"); |
chavan | 2:881a9a0da73f | 101 | Buzzer=1; |
chavan | 2:881a9a0da73f | 102 | wait(0.2); |
chavan | 2:881a9a0da73f | 103 | Buzzer=0; |
udareaniket | 1:6e04ab90909f | 104 | value = 404; |
udareaniket | 1:6e04ab90909f | 105 | } |
udareaniket | 1:6e04ab90909f | 106 | HTTPClient http; |
udareaniket | 1:6e04ab90909f | 107 | char buffer[256]; |
udareaniket | 1:6e04ab90909f | 108 | sprintf(buffer,"%s?api_key=%s&field1=%d",thingSpeakUrl,thingSpeakKey,value); |
udareaniket | 1:6e04ab90909f | 109 | printf("Send to %s\r\n", buffer); |
udareaniket | 1:6e04ab90909f | 110 | http.get(buffer, buffer , 10); |
udareaniket | 1:6e04ab90909f | 111 | } |
udareaniket | 1:6e04ab90909f | 112 | wait_ms (10000); |
dotnfc | 0:54a12c4b19c2 | 113 | } else { |
dotnfc | 0:54a12c4b19c2 | 114 | // PN532 probably timed out waiting for a card |
udareaniket | 1:6e04ab90909f | 115 | pc.printf("\n\rWaiting for a card\n\r"); |
udareaniket | 1:6e04ab90909f | 116 | wait_ms (5000); |
dotnfc | 0:54a12c4b19c2 | 117 | } |
dotnfc | 0:54a12c4b19c2 | 118 | } |
chavan | 2:881a9a0da73f | 119 | |
chavan | 2:881a9a0da73f | 120 | |
dotnfc | 0:54a12c4b19c2 | 121 | /*============================================================================== |
dotnfc | 0:54a12c4b19c2 | 122 | * \brief main entry |
dotnfc | 0:54a12c4b19c2 | 123 | */ |
dotnfc | 0:54a12c4b19c2 | 124 | int main() |
dotnfc | 0:54a12c4b19c2 | 125 | { |
chavan | 2:881a9a0da73f | 126 | |
udareaniket | 1:6e04ab90909f | 127 | eth.init(); //Use DHCP |
udareaniket | 1:6e04ab90909f | 128 | eth.connect(); |
udareaniket | 1:6e04ab90909f | 129 | printf("\n\rEthernet connected, and IP Address is %s\n\r", eth.getIPAddress()); |
dotnfc | 0:54a12c4b19c2 | 130 | setup(); |
chavan | 2:881a9a0da73f | 131 | |
dotnfc | 0:54a12c4b19c2 | 132 | while (1) |
dotnfc | 0:54a12c4b19c2 | 133 | loop (); |
udareaniket | 1:6e04ab90909f | 134 | eth.disconnect(); |
chavan | 2:881a9a0da73f | 135 | } |