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
Diff: source/x_nucleo_nfc04.cpp
- Revision:
- 0:3f1a69fc394e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/x_nucleo_nfc04.cpp Thu Nov 14 11:23:21 2019 +0000 @@ -0,0 +1,142 @@ +#include "x_nucleo_nfc04.h" + +extern sCCFileInfo CCFileStruct; + +// This is a constructor + +X_Nucleo_NFC04::X_Nucleo_NFC04(I2C* i2cChannel, DigitalOut* led_1, DigitalOut* led_2, DigitalOut* led_3, DigitalOut* LPD, DigitalIn* MISO){ + mi2cChannel = i2cChannel; + mled_1 = led_1; + mled_2 = led_2; + mled_3 = led_3; + mLPD = LPD; + mMISO = MISO; +} + +/** + * @brief This function initialize the device + * @param mi2cChannel : I2C Channel + * @param mLPD : A digital PIN + * @retval status(int) : Return if the write operation is succesful + */ + +int X_Nucleo_NFC04::begin(I2C* mi2cChannel, DigitalOut *mLPD) { + int ret = 0; + + // Light some leds + ledOn(mled_1); + wait_ms( 300 ); + ledOn(mled_2); + + /* NFCTAG Init */ + ret = BSP_NFCTAG_Init(mi2cChannel, mLPD); + if(ret != NDEF_OK) + return ret; + + /* Reset MBEN Dynamic and initializes the CCFile struct */ + BSP_NFCTAG_GetExtended_Drv()->ResetMBEN_Dyn( mi2cChannel ); + if( NfcType5_NDEFDetection( mi2cChannel) != NDEF_OK ) + { + CCFileStruct.MagicNumber = NFCT5_MAGICNUMBER_E1_CCFILE; + CCFileStruct.Version = NFCT5_VERSION_V1_0; + CCFileStruct.MemorySize = ( ST25DV_MAX_SIZE / 8 ) & 0xFF; + CCFileStruct.TT5Tag = 0x05; + /* Init of the Type Tag 5 component (M24LR) */ + ret = NfcType5_TT5Init( mi2cChannel ); + if (ret != NDEF_OK) + return ret; + } + + ledOff( mled_1 ); + wait_ms( 300 ); + ledOff( mled_2 ); + wait_ms( 300 ); + ledOff( mled_3 ); + wait_ms( 300 ); + return NDEF_OK; +} + + +/** + * @brief This function light on selected Led + * @param led : Led to be lit on + * @retval None + */ +void X_Nucleo_NFC04::ledOn(DigitalOut* led) { + led -> write(1); +} + +/** + * @brief This function light off selected Led + * @param led : Led to be lit off + * @retval None + */ + +void X_Nucleo_NFC04::ledOff(DigitalOut* led) { + *led = 0; +} + + +/** + * @brief This function write an URI into the NFC Tag + * @param protocol : Protocol of the uri to write + * @param uri : String containing the uri to write in the NFC Tag + * @param info : Additional info + * @param mi2cChannel : Object of the I2C channel + * @retval status(int) : Return if the write operation is succesful + */ +int X_Nucleo_NFC04::writeURI(string protocol, string uri, string info, I2C* mi2cChannel) { + sURI_Info _URI; + strcpy( _URI.protocol,protocol.c_str() ); + strcpy( _URI.URI_Message,uri.c_str() ); + strcpy( _URI.Information,info.c_str() ); + + + return NDEF_WriteURI( &_URI, mi2cChannel ); +} + +/** + * @brief This function read an URI from the NFC Tag + * @param mi2cChannel : Object of the I2C channel + * @retval string : Return the string that has been read from the NFC Tag + */ + +string X_Nucleo_NFC04::readURI( I2C* mi2cChannel) { + sURI_Info uri = {"","",""}; + sRecordInfo_t recordInfo; + // increase buffer size for bigger messages + if(NDEF_ReadNDEF(NDEF_Buffer, mi2cChannel)) + return (string)NULL; + + if(NDEF_IdentifyBuffer(&recordInfo, NDEF_Buffer)) + return (string)NULL; + if(NDEF_ReadURI(&recordInfo,&uri)) + return (string)NULL; + return string(uri.protocol) + string(uri.URI_Message); +} + + +/** + * @brief This function write WiFi Credentials into the NFC Tag + * @param NetworkSSID : SSID of the WiFi Network + * @param AuthenticationType : + * @param EncryptionType : + * @param NetworkKey : Password of the WiFi + * @param mi2cChannel : Object of the I2C channel + * @retval status(int) : Return if the write operation is succesful + */ +uint16_t X_Nucleo_NFC04::writeWiFi(string NetworkSSID, Ndef_Wifi_Authentication_t AuthenticationType, Ndef_Wifi_Encryption_t EncryptionType, string NetworkKey, I2C* mi2cChannel ){ + + sWifiTokenInfo _wifi; + + strcpy( _wifi.NetworkSSID,NetworkSSID.c_str() ); + _wifi.AuthenticationType = AuthenticationType; + _wifi.EncryptionType = EncryptionType; + strcpy( _wifi.NetworkKey,NetworkKey.c_str() ); + + + + return NDEF_WriteWifiToken(&_wifi, mi2cChannel ); +} + +