Example program for the X-NUCLEO-NFC04A1
Dependencies: BSP libNDEF ST25DV
X-NUCLEO-NFC04A1 dynamic NFC/RFID tag IC expansion board Firmware Package
Introduction
This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-NFC04A1 dynamic NFC/RFID tag IC expansion board.
Example Application
This program gives the User the possibility to read or write the tag of the X-NUCLEO-NFC04A1. The user needs an NFC enabled device as a smartphone that has to be at least 10 cm close to the antenna of the X-NUCLEO-NFC04A1. The LEDs indicate the operational mode:
- LED1 is on: by reading the tag the User obtains the parameters of the WiFi access points.
- LED2 is on: by reading the tag the User is redirected to a website through the custom browser of the smartphone.
- LED3 is on: the User can overwrite the value of the tag through the use of any NFC application.
Tested Platforms
This firmware has been tested on STM32 NUCLEO-F401RE
source/main.cpp@0:3f1a69fc394e, 2019-11-14 (annotated)
- Committer:
- DiegoOstuni
- Date:
- Thu Nov 14 11:23:21 2019 +0000
- Revision:
- 0:3f1a69fc394e
Fork of the GitHub
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DiegoOstuni | 0:3f1a69fc394e | 1 | /** |
DiegoOstuni | 0:3f1a69fc394e | 2 | ****************************************************************************** |
DiegoOstuni | 0:3f1a69fc394e | 3 | * @file main.cpp |
DiegoOstuni | 0:3f1a69fc394e | 4 | * @author STMicroelectronics |
DiegoOstuni | 0:3f1a69fc394e | 5 | * @version V1.0.0 |
DiegoOstuni | 0:3f1a69fc394e | 6 | * @date 05 April 2019 |
DiegoOstuni | 0:3f1a69fc394e | 7 | * @brief test application for the STMicrolectronics |
DiegoOstuni | 0:3f1a69fc394e | 8 | * X-NUCLEO-NFC04A1. NFC tag based on ST25DV device. |
DiegoOstuni | 0:3f1a69fc394e | 9 | * This application makes use of C++ classes obtained from the C |
DiegoOstuni | 0:3f1a69fc394e | 10 | * components' drivers. |
DiegoOstuni | 0:3f1a69fc394e | 11 | ****************************************************************************** |
DiegoOstuni | 0:3f1a69fc394e | 12 | */ |
DiegoOstuni | 0:3f1a69fc394e | 13 | #include "mbed.h" |
DiegoOstuni | 0:3f1a69fc394e | 14 | #include "x_nucleo_nfc04.h" |
DiegoOstuni | 0:3f1a69fc394e | 15 | #include "stdio.h" |
DiegoOstuni | 0:3f1a69fc394e | 16 | #include "string.h" |
DiegoOstuni | 0:3f1a69fc394e | 17 | |
DiegoOstuni | 0:3f1a69fc394e | 18 | using namespace std; |
DiegoOstuni | 0:3f1a69fc394e | 19 | |
DiegoOstuni | 0:3f1a69fc394e | 20 | DigitalOut led_1(D5); |
DiegoOstuni | 0:3f1a69fc394e | 21 | DigitalOut led_2(D4); |
DiegoOstuni | 0:3f1a69fc394e | 22 | DigitalOut led_3(D2); |
DiegoOstuni | 0:3f1a69fc394e | 23 | DigitalOut LPD(D7); |
DiegoOstuni | 0:3f1a69fc394e | 24 | DigitalIn MISO(D12); |
DiegoOstuni | 0:3f1a69fc394e | 25 | I2C i2cChannel(I2C_SDA, I2C_SCL); |
DiegoOstuni | 0:3f1a69fc394e | 26 | DigitalIn uButton(BUTTON1); |
DiegoOstuni | 0:3f1a69fc394e | 27 | X_Nucleo_NFC04 X_Nucleo_Nfc04(&i2cChannel, &led_1, &led_2, &led_3, &LPD, &MISO); |
DiegoOstuni | 0:3f1a69fc394e | 28 | |
DiegoOstuni | 0:3f1a69fc394e | 29 | int main() |
DiegoOstuni | 0:3f1a69fc394e | 30 | { |
DiegoOstuni | 0:3f1a69fc394e | 31 | |
DiegoOstuni | 0:3f1a69fc394e | 32 | const char uri_write_message[] = "polito.it"; // Uri message to write in the tag |
DiegoOstuni | 0:3f1a69fc394e | 33 | const char uri_write_protocol[] = URI_ID_0x01_STRING; // Uri protocol to write in the tag |
DiegoOstuni | 0:3f1a69fc394e | 34 | string uri_write = string(uri_write_protocol) + string(uri_write_message); |
DiegoOstuni | 0:3f1a69fc394e | 35 | |
DiegoOstuni | 0:3f1a69fc394e | 36 | |
DiegoOstuni | 0:3f1a69fc394e | 37 | |
DiegoOstuni | 0:3f1a69fc394e | 38 | const char SSID[] = "CLAB1"; // WiFi SSID to write in the tag |
DiegoOstuni | 0:3f1a69fc394e | 39 | Ndef_Wifi_Authentication_t Auth = NDEF_WIFI_AUTHENTICATION_WPA2; |
DiegoOstuni | 0:3f1a69fc394e | 40 | Ndef_Wifi_Encryption_t Encrypt = NDEF_WIFI_ENCRYPTION_AES; |
DiegoOstuni | 0:3f1a69fc394e | 41 | const char NetKey[] = "STM32ODE"; // WiFi password to write in the tag |
DiegoOstuni | 0:3f1a69fc394e | 42 | |
DiegoOstuni | 0:3f1a69fc394e | 43 | |
DiegoOstuni | 0:3f1a69fc394e | 44 | if(X_Nucleo_Nfc04.begin(&i2cChannel, &LPD) == 0) { |
DiegoOstuni | 0:3f1a69fc394e | 45 | printf("System Init done!"); |
DiegoOstuni | 0:3f1a69fc394e | 46 | X_Nucleo_Nfc04.ledOn(&led_3); |
DiegoOstuni | 0:3f1a69fc394e | 47 | } else { |
DiegoOstuni | 0:3f1a69fc394e | 48 | printf("System Init failed!"); |
DiegoOstuni | 0:3f1a69fc394e | 49 | while(1); |
DiegoOstuni | 0:3f1a69fc394e | 50 | } |
DiegoOstuni | 0:3f1a69fc394e | 51 | |
DiegoOstuni | 0:3f1a69fc394e | 52 | |
DiegoOstuni | 0:3f1a69fc394e | 53 | int ButtonPressed = 1; |
DiegoOstuni | 0:3f1a69fc394e | 54 | |
DiegoOstuni | 0:3f1a69fc394e | 55 | /* BY pressing the button the option to write the WiFi on the tag, or to write a link( or read from it ) is enabled */ |
DiegoOstuni | 0:3f1a69fc394e | 56 | while(1) |
DiegoOstuni | 0:3f1a69fc394e | 57 | { |
DiegoOstuni | 0:3f1a69fc394e | 58 | /* Toggle ButtonPressed variable everytime button is pressed */ |
DiegoOstuni | 0:3f1a69fc394e | 59 | if(uButton.read() == 0) |
DiegoOstuni | 0:3f1a69fc394e | 60 | { |
DiegoOstuni | 0:3f1a69fc394e | 61 | ButtonPressed++; |
DiegoOstuni | 0:3f1a69fc394e | 62 | if(ButtonPressed == 4) |
DiegoOstuni | 0:3f1a69fc394e | 63 | ButtonPressed = 1; |
DiegoOstuni | 0:3f1a69fc394e | 64 | while( uButton.read() == 0 ); //Debouncing |
DiegoOstuni | 0:3f1a69fc394e | 65 | } |
DiegoOstuni | 0:3f1a69fc394e | 66 | |
DiegoOstuni | 0:3f1a69fc394e | 67 | |
DiegoOstuni | 0:3f1a69fc394e | 68 | if(ButtonPressed == 1) |
DiegoOstuni | 0:3f1a69fc394e | 69 | { |
DiegoOstuni | 0:3f1a69fc394e | 70 | |
DiegoOstuni | 0:3f1a69fc394e | 71 | X_Nucleo_Nfc04.ledOn(&led_1); |
DiegoOstuni | 0:3f1a69fc394e | 72 | X_Nucleo_Nfc04.ledOff(&led_2); |
DiegoOstuni | 0:3f1a69fc394e | 73 | X_Nucleo_Nfc04.ledOff(&led_3); |
DiegoOstuni | 0:3f1a69fc394e | 74 | wait_ms(100); |
DiegoOstuni | 0:3f1a69fc394e | 75 | if(X_Nucleo_Nfc04.writeWiFi(SSID, Auth, Encrypt, NetKey, &i2cChannel)) { |
DiegoOstuni | 0:3f1a69fc394e | 76 | /* Write failed! */ |
DiegoOstuni | 0:3f1a69fc394e | 77 | } |
DiegoOstuni | 0:3f1a69fc394e | 78 | } |
DiegoOstuni | 0:3f1a69fc394e | 79 | if(ButtonPressed == 2) |
DiegoOstuni | 0:3f1a69fc394e | 80 | { |
DiegoOstuni | 0:3f1a69fc394e | 81 | |
DiegoOstuni | 0:3f1a69fc394e | 82 | X_Nucleo_Nfc04.ledOn(&led_2); |
DiegoOstuni | 0:3f1a69fc394e | 83 | X_Nucleo_Nfc04.ledOff(&led_1); |
DiegoOstuni | 0:3f1a69fc394e | 84 | X_Nucleo_Nfc04.ledOff(&led_3); |
DiegoOstuni | 0:3f1a69fc394e | 85 | wait_ms(100); |
DiegoOstuni | 0:3f1a69fc394e | 86 | if(X_Nucleo_Nfc04.writeURI(uri_write_protocol, uri_write_message, "", &i2cChannel)) { |
DiegoOstuni | 0:3f1a69fc394e | 87 | /* Write failed! */ |
DiegoOstuni | 0:3f1a69fc394e | 88 | } |
DiegoOstuni | 0:3f1a69fc394e | 89 | } |
DiegoOstuni | 0:3f1a69fc394e | 90 | if(ButtonPressed == 3) |
DiegoOstuni | 0:3f1a69fc394e | 91 | { |
DiegoOstuni | 0:3f1a69fc394e | 92 | X_Nucleo_Nfc04.ledOn(&led_3); |
DiegoOstuni | 0:3f1a69fc394e | 93 | X_Nucleo_Nfc04.ledOff(&led_1); |
DiegoOstuni | 0:3f1a69fc394e | 94 | X_Nucleo_Nfc04.ledOff(&led_2); |
DiegoOstuni | 0:3f1a69fc394e | 95 | // Prepare device to readURI from NFC device |
DiegoOstuni | 0:3f1a69fc394e | 96 | string uri_read = X_Nucleo_Nfc04.readURI( &i2cChannel ); |
DiegoOstuni | 0:3f1a69fc394e | 97 | |
DiegoOstuni | 0:3f1a69fc394e | 98 | if(uri_read == "\0") { |
DiegoOstuni | 0:3f1a69fc394e | 99 | /* Read failed! */ |
DiegoOstuni | 0:3f1a69fc394e | 100 | } |
DiegoOstuni | 0:3f1a69fc394e | 101 | |
DiegoOstuni | 0:3f1a69fc394e | 102 | |
DiegoOstuni | 0:3f1a69fc394e | 103 | if(strcmp( uri_read.c_str(), uri_write.c_str() ) == 0) { |
DiegoOstuni | 0:3f1a69fc394e | 104 | /* Successfully written and read! */ |
DiegoOstuni | 0:3f1a69fc394e | 105 | ButtonPressed = 0; |
DiegoOstuni | 0:3f1a69fc394e | 106 | |
DiegoOstuni | 0:3f1a69fc394e | 107 | } else { |
DiegoOstuni | 0:3f1a69fc394e | 108 | /* Read bad string! */ |
DiegoOstuni | 0:3f1a69fc394e | 109 | X_Nucleo_Nfc04.ledOff(&led_3); |
DiegoOstuni | 0:3f1a69fc394e | 110 | X_Nucleo_Nfc04.ledOff(&led_1); |
DiegoOstuni | 0:3f1a69fc394e | 111 | X_Nucleo_Nfc04.ledOff(&led_2); |
DiegoOstuni | 0:3f1a69fc394e | 112 | } |
DiegoOstuni | 0:3f1a69fc394e | 113 | |
DiegoOstuni | 0:3f1a69fc394e | 114 | } |
DiegoOstuni | 0:3f1a69fc394e | 115 | } |
DiegoOstuni | 0:3f1a69fc394e | 116 | |
DiegoOstuni | 0:3f1a69fc394e | 117 | |
DiegoOstuni | 0:3f1a69fc394e | 118 | |
DiegoOstuni | 0:3f1a69fc394e | 119 | |
DiegoOstuni | 0:3f1a69fc394e | 120 | |
DiegoOstuni | 0:3f1a69fc394e | 121 | }//end of main |