This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

Dependencies:   NDefLib X_NUCLEO_NFC01A1 mbed

Fork of X-MBED-NFC1 by Giovanni Visentini

This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

The available demos are:

  • SAMPLE_WRITE_URL: write a tag with the ST home page URL
  • SAMPLE_COUNT_CLICK: create a custom tag to count and report the user button clicks.
  • SAMPLE_WRITE_AND_CHANGE_ALL: write a tag with all the supported records and update the tag contents when the user button is pressed.
  • SAMPLE_LOCK_TAG_CONTENT: use the M24SR component API to set the NFC tag as read-only.

To enable the different demos comment/uncomment the SAMPLE_* macros provided in main.cpp .

Revision:
3:f7f818ee694e
Parent:
2:0648c1561eb2
Child:
4:f40b3505070c
diff -r 0648c1561eb2 -r f7f818ee694e main.cpp
--- a/main.cpp	Tue Dec 01 08:30:54 2015 +0000
+++ b/main.cpp	Tue Dec 01 16:01:24 2015 +0000
@@ -1,9 +1,6 @@
-#include <cstring>
+#if 0
 #include "mbed.h"
 
-#include "m24sr/m24sr_class.h"
-//#include "lib_NDEF/lib_TagType4.h"
-
 #include "Type4NfcTagSTM24SR.h"
 
 #include "NDefLib/RecordType/RecordAAR.h"
@@ -21,7 +18,6 @@
 
 DigitalOut myled(LED1);
 
-
 void shiftLed(DigitalOut &led1,DigitalOut &led2,DigitalOut &led3){
 	const uint8_t prevLed1=led1;
 	const uint8_t prevLed2=led2;
@@ -31,9 +27,6 @@
 	led3=prevLed2;
 }
 
-static const PinName M24SR_SDA=D14;
-static const PinName M24SR_SDL=D15;
-
 static const uint32_t MAX_WRITE_TRY=1;
 
 void setNFCTag(NDefLib::Type4NfcTag &tag){
@@ -285,7 +278,7 @@
 }
 
 int main() {
-	I2C i2cChannel(M24SR_SDA,M24SR_SDL);
+	I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
 	i2cChannel.frequency(400000);
 	X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
 	Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
@@ -312,4 +305,137 @@
 	}
 
 }
+#endif
 
+#if 0
+#include "mbed.h"
+
+#include "Type4NfcTagSTM24SR.h"
+#include "NDefLib/RecordType/RecordURI.h"
+
+#include "X_NUCLEO_NFC01A1.h"
+
+int main() {
+	Serial pc(SERIAL_TX, SERIAL_RX);
+	I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
+	i2cChannel.frequency(400000);
+	X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
+	//create the wrapper for use the NdefLib
+	Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
+	pc.printf("System Init done: !\n\r");
+	//open the i2c session with the nfc chip
+	if(tag.openSession()){
+		nfcNucleo->getLed1()=1;
+		
+		//create the NDef message and record
+		NDefLib::Message msg;
+		NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"st.com");
+		msg.addRecord(&rUri);
+
+		//write the tag
+		if(tag.write(msg)){
+			pc.printf("Tag writed \n\r");
+			nfcNucleo->getLed2()=1;
+		}
+
+	
+		//close the i2c session
+		if(!tag.closeSession()){
+			pc.printf("Error Closing the session\n\r");
+		}else
+			nfcNucleo->getLed3()=1;
+	}else
+		pc.printf("Error open Session\n\r");
+	
+	return 0;
+}
+
+#endif
+
+#if 1
+
+#include "mbed.h"
+
+#include "Type4NfcTagSTM24SR.h"
+#include "NDefLib/RecordType/RecordText.h"
+
+#include "X_NUCLEO_NFC01A1.h"
+
+class MyRecord : public NDefLib::RecordText{
+	
+private:
+	char nClickStringBuffer[12];
+	uint32_t nClick;
+	
+	void syncTextValue(){
+		sprintf(nClickStringBuffer,"%d",nClick);
+		setText(nClickStringBuffer);
+	}
+		
+public:	
+	
+	MyRecord():nClick(0){
+		syncTextValue();
+	}
+	
+	void incrementClick(){
+		nClick++;
+		syncTextValue();
+	}
+
+};
+
+static volatile bool buttonPress=false;
+
+void setButtonPress(){
+	buttonPress=true;
+}//if buttonPress
+
+void writeMessage(X_NUCLEO_NFC01A1 *nfcNucleo,NDefLib::Message &msg){
+	Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
+	//open the i2c session with the nfc chip
+	if(tag.openSession()){
+		nfcNucleo->getLed1()=! nfcNucleo->getLed1();
+		
+		//write the tag
+		if(tag.write(msg)){
+			nfcNucleo->getLed2()=!nfcNucleo->getLed2();
+		}//if
+
+		//close the i2c session
+		if(tag.closeSession())
+			nfcNucleo->getLed3()=!nfcNucleo->getLed3();
+	}//if open session
+}
+
+void main() {
+	I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
+	i2cChannel.frequency(400000);
+
+	X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
+	//create the wrapper for use the NdefLib
+	Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
+	
+	InterruptIn userButton(USER_BUTTON);	
+	userButton.fall(setButtonPress);
+	
+	//create the NDef message and record
+	NDefLib::Message msg;
+	MyRecord rClickCount;
+	msg.addRecord(&rClickCount);
+	
+	writeMessage(nfcNucleo,msg);
+	
+	while(1){
+		
+		if(buttonPress){
+			rClickCount.incrementClick();
+			writeMessage(nfcNucleo,msg);			
+			buttonPress=false;
+		}//if
+		
+	}//while
+
+}//main
+
+#endif