Arduino M24SR NFC Tag Library

M24SR_NFC_Tag_with_I2C_Interface
Gegenstand dieses Blogartikels ist der ST M24SR im praktischen Einsatz mit einem Arduino:
Oft ist eine Benutzerschnittstelle erforderlich, wenn eine Mikrokontroller Schaltung konfiguriert werden muss. Falls ein paar Taster, evtl inkl. Mini-LCD zu teuer sind bzw das Gerät nicht über Bluetooth-, RF- oder Ethernet-Schnittstelle verfügt kann die sehr stromsparende, kostengünstige NFC-Schnittstelle zum Einsatz kommen. Der M24SR von ST dient in dieser Konstellation als NFC-I2C-Brücke zum Auslesen von Logeinträgen, Status- oder Fehlercodes und zum Konfigurieren per Smartphone. Dieser NFC-Chip ist gegenüber den komplexen NFC-Controllern (zB PN532) recht günstig ($0.34 – $1.88) da er nicht alle NFC-Modie wie Reader/Writer, P2P und Card-Emulation unterstützt sondern nur als NFC-Tag fungieren kann. Daten können in den Speicher (EEPROM) des Chips entweder per I2C-Schnittstelle (Arduino) oder per NFC (NFC Phone, Smartcard-Reader) geschrieben bzw ausgelesen werden.

Was wird benötigt?

  • ST M24SR Chip
  • Breadboard + Verbindungskabel
  • SO8-Sockel oder SO8-DIL8-Adapter-Platine zum Auflöten des Chips
  • Arduino Duemilanove (o.ae.)
  • Arduino M24SR Library
  • Antenne: Größe 75 mm x 48 mm, 6 Windungen
  • 10k Ohm Pull-up Widerstand

Setup

Das IC mit 8 Pins ist recht überschaubar zu verdrahten: Spannungsversorgung (GND, VCC), I2CInterface (SDA, SCL),  Antennenanschlüsse (AC0, AC1) und optional RF disable, Schreib-/Leseereignisse (GPO).

    • Schaltung zusammen stecken:

      Pinout:
      -------------------------------------------------------------------------------
      M24SR -> Arduino / resistor / antenna
      -------------------------------------------------------------------------------
      1 RF disable -> TODO not used
      2 AC0 (antenna) -> Antenna
      3 AC1 (antenna) -> Antenna
      4 VSS (GND) -> Arduino Gnd
      5 SDA (I2C data) -> Arduino A4
      6 SCL (I2C clock) -> Arduino A5
      7 GPO -> Arduino D7 + Pull-Up resistor (>4.7kOhm) to VCC
      8 VCC (2...5V) -> Arduino 5V
      -------------------------------------------------------------------------------
    • Arduino M24SR-Lib https://github.com/rena2019/ArduinoM24SR herunterladen

Beispiele

Sample: SystemFile

Dieses Beispiel zeigt nur die Eigenschaften des Tags an (UID, Speichergrösse, Produktcode). Es dient nur zum Überprüfen der korrekten Verdrahtung/Funktionsweise des Chips. Dafür ist weder Smartcard-Reader noch NFC-Smartphone erforderlich.

#include #include
#include
#include
#include
#define gpo_pin 7
M24SR m24sr(gpo_pin);

void setup()
{
Serial.begin(9600);
//for debug purpose
//m24sr._verbose = true;
//m24sr._cmds = true;
m24sr._setup();
m24sr.displaySystemFile();
}

void loop()
{
}

 

Sample: NDefWrite

Einfachstes Beispiel, bei dem eine (von drei) vordefinierten NDef-URL-Records in den M24SR via I2C geschrieben wird. Nach einem Reset wird der Record jedesmal neu geschrieben und kann mit einem NFC-Smartphone ausgelesen werden (Browser öffnet automatisch URL)

Sample: NFC-Info-Display

Für dieses Beispiel muss der GPO-Pin mit einem Pullup-Widerstand zusätzlich zu den I2C-Leitungen an den Arduino angeschlossen werden. Über diesen Pin erhält der Arduino ein Signal bei Schreib-/Leseversuchen über das RF-Interface. Beschreibt man den NFC-Tag mit einer App (z.B. NFC-TagWriter oder ST M24SR Demo App) so wird der Inhalt des NDEF-Records auf dem optional via SPI angeschlossenen TFT zb 128×160 angezeigt.

Arduino_M24SR_Antenna_TFT_CIMG4837
Bei gleichzeitiger Nutzung von mehreren Bibliotheken (NDef, M24SR) kommt man mit dem Arduino schnell an die Grenzen des RAMs. Bei der Implementierung der M24SR-Bibliothek kam es mehrfach zu unerklärlichem Verhalten, die Funktion displayFreeRAM legte dann das Problem offen: Speicher zu klein:-/

Links
Blogartikel: ST M24SR – Low-Cost NFC Tag mit I2C-Schnittstelle
Arduino M24SR Lib (Source Code) https://github.com/rena2019/ArduinoM24SR
ST M24SR64-Y Datenblatt http://www.st.com/web/en/resource/technical/document/datasheet/DM00067892.pdf
Google Play – ST M24SR Demo App https://play.google.com/store/apps/details?id=com.nfc.m24srdemo
Google Play – NFC TagWriter App https://play.google.com/store/apps/details?id=com.nxp.nfc.tagwriter

26 thoughts on “Arduino M24SR NFC Tag Library”

  1. Hey.
    Vielen Dank für den Post. Ich werd das mal ausprobieren…bisher habe ich das Tag nur passiv genutzt und suche schon eine Weile nach einer lib für den Arduino.
    Kannst du kurz erklären wie du die Antenne herstellst?! Momentan nutze ich eine rausgesägte Antenne aus einem Eval-Board…

    Schöne Grüße

  2. Alles klar…meine bisherigen Versuche mit dem selber wickeln waren nicht erfolgreich, aber ich werds noch mal testen…

  3. Sorry für die späte Antwort, das System ist wie folgt: Arduino IDE 1.05-r2 an Win7 …hatte auch an XP getestet, da kam aber der gleiche Fehler. An Mageia-Linux könnte ich nochmal testen. Kann das ein Problem in der CRC Lib sein? Ich habe alle Libs runtergeladen und in einzelnen Ordnern in …/Arduino/libraries/… abgelegt

  4. Dear Sir could you tell me whare I can find modified NdefRecord file with implementation of the ToString() procedure? Thanks, Peter.

  5. Hey.
    Nachdem ich die Libs nun endlich richtig eingebunden hab bin ich auch auf das „toString“ Problem gestossen: Könntest du erklären was du nach String wandelst und in welchen Dateien, welche Änderungen vorgenommen werden?

  6. Hey,
    bin selber am Überlegen mir den M24SR zuzulegen und bei mir scheitert es an der Antenne. Wenn man danach sucht, stößt man leider immer nur auf diverse Akkudeckel für Smartphone. Selber wickeln wäre auch eine Option, aber die Lösung soll unter Umständen in der Firma mal zum Einsatz kommen, deswegen wäre natürlich eine „ordentliche“ Antenne von Vorteil. Kannst du was empfehlen?
    Viele Grüße
    Björn

  7. Eigentlich hatte ich nicht vor ein PCB zu erstellen😀 Ich arbeite in einer relativ kleinen Firma, deswegen soll dort nur ein Raspberry Pi bzw. Arduino + Breadboard stehen.

  8. Hallo regnerischernachmittag,
    danke für deinen guten Artikel! Ich habe beim Nachbau alles richtig gemacht, denke ich, sogar der Nachmittag ist regnerisch! Aber ich bleibe auch beim toString-Fehler hängen. Könntest du mir auch helfen?
    VG Skysurfer

  9. Hi, thank you for your project. Can I have the patched NDEF libs as well?
    My email is verzo85 at gmail dot com

  10. hello… i already download the m24sr library, but when i try to compile some program that using #include M24SR.h, there some error, the arduino says const prog_char; no such type of data, i already change to const char but still in issue. please explain..😀 im newbie

  11. im using arduino uno and m24sr, when i compile the example program there some error witth the M24SR.h library,
    it says

    „In file included from C:\Users\Boreys\Documents\Arduino\libraries\ArduinoM24SR-master\examples\DisplaySystemFile\DisplaySystemFile.ino:10:0:

    C:\Users\Boreys\Documents\Arduino\libraries\ArduinoM24SR-master/M24SR.h:76:93: error: ‚prog_char‘ does not name a type

    void sendApdu_P(uint8_t CLA, uint8_t INS, uint8_t P1, uint8_t P2, uint8_t Lc, const prog_char* Data); “

    what does that mean?

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s