This is a library for ST's ST25DV-I2C series. The ST25DV chip is an RFID/NFC dynamic tag. It can be accessed by any NFC smartphone or NFC/RFID HF reader, and also by an MCU (an esp32 for this library), using the I²C wired link.
Warning This Library is not compatible with Arduino framework
The wiring is made with the reference board. Check the datasheet to wire directly the chip.
ST25DV Pins | ESP32S3 Pins |
---|---|
GND | GND |
VCC | 3v3 |
SCL | GPIO2, 4.7 kΩ pullup resistor required to 3v3 |
SDA | GPIO1, 4.7 kΩ pullup resistor required to 3v3 |
GPO (RF) | Not used in the examples |
The library is available at https://components.espressif.com/components/rjrp44/st25dv.
So, you can use the IDF Component Manager to easily import this library into your project. To add this component to your project, run:
idf.py add-dependency "rjrp44/st25dv^0.1.0"
This library contains a basic implementation of ndef to read or write data. However, more specific data types like uri and text require their formats to be added.
For simple write you can use this function st25dv_ndef_write_content
as shown :
st25dv_config st25dv_config = {
ST25DV_USER_ADDRESS,
ST25DV_SYSTEM_ADDRESS
};
char record_type[] = "android.com:pkg";
char record_payload[] = "fr.ouchat.app";
std25dv_ndef_record record = {
NDEF_ST25DV_TNF_EXTERNAL,
record_type,
record_payload
};
st25dv_ndef_write_content(st25dv_config, &address, mb, me, ndef_record);
Arguments of the function :
st25dv_config
is your st25dv configaddress
is the pointer of the value for the memory address, after writing it is updated to the end of what was writtenmb
stands for "message begin" and should be true is this record is the first oneme
stands for "message end" and should be true for the last recordndef_record
contains 3 values:tnf
: Type Name Format, witch describes the content format. Theses are all the values :0x00
: Empty0x01
: Well known0x02
: Mime0x03
: URI0x04
: External0x05
: Unknown0x06
: Unchanged0x07
: Reserved
record_type
: The name of your record typerecord_payload
: The payload
To read data you can use this function st25dv_ndef_read
std25dv_ndef_record *read = malloc(sizeof(std25dv_ndef_record));
memset(read, 0 , sizeof(std25dv_ndef_record));
uint8_t record_num = 2;
uint8_t record_count = 0;
st25dv_ndef_read(st25dv_config, record_num,read, &record_count);
//Delete record after use
st25dv_ndef_delete_records(read);
You can find in the 📁 /examples
folder an example project showcasing the main features of the library to help you understand how it works.
Copyright © 2023 RJRP44.
This project is MIT licensed.
Give a ⭐️ if this project helped you!