RFID an UNO Grove Base Shield anschließen

Hallo Zusammen,

ich möchte einen Standard RC522 RFID Reader an ein Grove Base Shield anschließen und die Grove Connectoren dann nutzen. Dazu will ich die Kabel dann extra dafür löten. Ein Grove Kabel hat immer 4 Kabel, GND, VCC, Daten1 und Daten 2.

Ein Grove Shield sieht so aus:

Die Verdrahtung des RFID Readers ist ja wie folgt gedacht:

GND --> GND
3,3V --> 3,3V
SDA (SS) --> Pin 10
SCK --> Pin 13
MOSI -->Pin 11
MISO --> Pin 12
RST --> Pin 9

GND, 3,3V, SDA und RST würde ich auf das erste Grove Kabel D2 legen und den Code im Sketch ändern:

#define SS_PIN 2 // SDA 
#define RST_PIN 3 // RST

Nun sind noch die Kabel SCM, MOSI und MISO offen. Die sind ja in der SPI Bibliothek definiert.
So, nun die Frage. Ist auf dem GROVE Base Shield irgendwo einfach irgendwas anders benannt was ich für die drei Pins nutzen könnte? Ich sehe Sachen wie RX, DX bei dem UART Connector z.B.
Kann mir jemand auf die Sprünge helfen ob das geht?

UNO?
Alle notwendigen Anschlüsse liegen auf der oberen linken blauen Leiste.
Einzig Vcc benötigt eine Extrawurst.

Die für SPI benötigten Pins auf einen ATmega328 basierenden Board sind nicht auf die Grove Stecker geführt. Du mußt sie auf der blauen Leiste abgreifen. Oder den ISP Stecker ablöten und gegen einen mit langen Pins austauschen.

Grüße Uwe

Der funktioniert nur mit SPI-Schnittstelle sauber.

Leider kann ich auf den Foto keine SPI-Schnittstelle sehen. Falls es doch eine gibt, NUTZE die.

Es gibt irgendwo eine Anleitung wie man das Teil auf I2C umbauen kann. Das bedeuten aber "löten mit Mikroskop"

Mein Rat nimm den Roten Reader.
https://www.amazon.de/ICQUANZX-Nahfeldkommunikationsleser-Modul-Kit-Schlüsselkarte-DIY-Smartphone-Android-Handy/dp/B07VT431QZ

Der hat an der Seite !!! den i2c-Bus und dieser Bus kann per Mäuseklavier :wink: aktiviert werden.

Davon abgesehen liest der auch Mifare-Karten sauber und Stressfrei.

Gruß

Pucki

Vielen Dank für die ganzen Tipps.
Mit der blauen Leiste bekomme ich es auf jeden Fall zum Laufen, ich wollte davon nur weg kommen und richtige Stecker benutzen, da die Verbindung nicht optimal ist.
Wie muss man denn den roten Reader mit i2c dann anschließen?
VNN, GND, IRQ sowie RST, sind klar, das könnte auf einen Connector, IRQ und RST sind dann im Sketch definiert.
SDA und SCL könnte dann auf den Connector wo auf dem Bild 12C steht, richtig?
Das wäre wirklich ne saubere Lösung.

Mach doch!

Der Rote Reader hat 2 Leisten. Wo man (je nach Ausführung) die Steckkontakte einlöten kann oder sie schon drin sind.

"Oben" (neben den Dip-Schaltern) siehst du auf den 1. Amazonfoto (das wo das Zubehör mit drauf ist) die i2c Anschlüsse. Dort die Kabel anklemmen und WICHTIG auf den Mäuseklavier (die kleinen Dipschalter) die Schalter in die Stellung für i2c bringen. Wie ist auf der Platine aufgedruckt, was man alles im ZOOM-Mode sehr gut lesen kann. Ach ja, Rechts ist der SPI-Bus. :slight_smile:

Das ist alles.

Ach ja. Du musst logoweise die Beispiele für i2c laden. Da stehen dann auch die passenden Libs drin.

Ich habe mal den i2c-Bus getestet und er läuft einwandfrei.

Gruß

Pucki

Danke, ich habe jetzt mal einen bestellt. Die Verdrahtung scheint wirklich einfach zu sein. Das genau das was ich brauche. Beim Sketch schaue ich gerade noch was passt, Ziel ist ja dann eine Karte auszulösen und wenn die ID der Karte richtig ist, dann schaltet der Arduino ein Relais frei (und eine Geheimtür öffnet sich...)
Mit dem RC522 läuft das auch, weiß nur nicht ob das dann mit dem anderen Sketch auch so einfach ist.
Habe jetzt mal was zusammen kopiert:


#include <Wire.h>                            
#include <Adafruit_PN532.h>                
#define PN532_IRQ   (2)                      
#define PN532_RESET (3)                    
const int LEDGREEN  =  4; 
const int LEDRED = 6;
const int RELAY = 5;                  
const int VOICE =  13;                  
unsigned long cardid;                     
unsigned long TAGid1 = 1702536620;           
unsigned long TAGid2 = 4070796058;           
unsigned long TAGid3 ;                
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);  
void setup() {                                           
pinMode(LEDGREEN, OUTPUT);  
pinMode(LEDRED, OUTPUT);                        
pinMode(VOICE, OUTPUT);                        
pinMode(RELAY, OUTPUT);
Serial.begin(115200);                                 
Serial.println("Hallo!");                             
nfc.begin();                                           
unsigned long versiondata = nfc.getFirmwareVersion(); 
if (! versiondata) {                                  
Serial.print("Kann kein Board finden !");            
while (1);                                         
}
Serial.print("Chip PN5 gefunden"); Serial.println((versiondata >> 24) & 0xFF, HEX); 
Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC);     
Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC);                 
nfc.SAMConfig();                                      
Serial.println("Warte auf einen ISO14443A Chip ...");     
}
void loop() {                                              
uint8_t success;                                        
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };                 // Puffer um die UID zu speichern
uint8_t uidLength;                                       // Länge der UID (4 or 7 bytes je nach ISO14443A Card/Chip Type)

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {                                           // Wenn erkannt wird, arbeite ab...
Serial.println("Found an ISO14443A card");
Serial.print("  UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");
Serial.print("  UID Value: ");
nfc.PrintHex(uid, uidLength);                          // gib Informationen auf seriellen Monitor aus
if (uidLength == 4) {                                  // Hat die Karte/der Chip 4 byte Länge...
// Mifare Classic Karte
cardid = uid[0];                                   
cardid <<= 8;                                        // Setze die 4 byte Blöcke
cardid |= uid[1];                                  
cardid <<= 8;                                        // zu einem einzigen Block
cardid |= uid[2];                                 
cardid <<= 8;                                        // zusammen
cardid |= uid[3];                                  
Serial.print("Scheint eine Mifare Classic zu sein #");  //
Serial.println(cardid);                                 
Serial.println("");                                   
Serial.println("");                                   
}
if  ((cardid) == (TAGid1)||(cardid) == (TAGid2)||(cardid) == (TAGid3))  // Abfrage, ob die TAGs 1..2..3 mit der jeweiligen
{digitalWrite(LEDGREEN,HIGH);  
digitalWrite(RELAY,HIGH);                                             
delay(3000);
digitalWrite(LEDGREEN,LOW);}                                               
else
{tone(VOICE, 1000);    
digitalWrite(LEDRED,HIGH);                                                   
delay(4000);
digitalWrite(LEDRED, LOW);
noTone(VOICE);}
}                                                     
}                                                      

Du kannst dir ja Spasshalber schon mal die passende Libs für den PN532 herunterladen.

Musst hat nur das passende Verzeichnis auswählen und dir die Beispiele ansehen.

Das ist die die ich auch benutzt habe für i2c zum testen. Aktuell benutze ich zwar lieber die SPI-Schnittstelle , aber das hat projektspezifische Gründe.

Ach und von HSU habe ich noch nie gehört. Sorry.

Gruß

Pucki

HSU ist glaube ich das Gleiche wie UART, weiß nicht warum das immer jeder nennt wie er will.
Wie auch immer, die Teile sind heute angekommen und ich habe alles verlötet und angeschlossen. Was soll ich sagen, es funktioniert. Ohne irgendwelche Probleme, fast schon gespenstisch wie problemlos das lief. Auf jeden Fall noch mal vielen Dank für den Tipp, der roter Reader ist super.

Ich bin vor Zeiten auch vom blauen zum roten gewechselt und habe es nie bereut. Aber komm nicht auf die Idee den roten per i2c an einem esp zu betreiben. Du wirst kläglich scheitern. Am esp gehts nur mit spi.
Etwas offtopic und dient nur als Randnotiz

Kannst du das auch per Link belegen ?
Daran glauben hilft leider keinem weiter. Und das es jeder nennt, wie er will, stimmt sicher nicht.
UART ist der übliche und bekannte Begriff für die serielle Schnittstelle des Controllers.

Das hat mich mal interessiert!

Und ich muss sagen: Das hat sofort funktioniert!
Beim ersten Versuch.
Kein Problem.

Glauben versetzt bekanntlich Berge!
Aber wer Beweise will, hier der Link zu einer Seite, da wird die Stellung HSU der Dispswitches als UART bezeichnet. Man sieht auch oben das Foto mit HSU und drunter als UART beschrieben.

Link 1

Hoffe damit bin ich aus dem Zeugenstand entlassen.

HSU(High Speed Uart)

Für wie lang / oft hast du es probiert? Für eine gewisse Zeit geht das auch. Aber plötzlich nicht mehr. Da hilft dann nur ein kompletter reset vom Modul. Per spi läuft das ganze zuverlässig

Mein Rat, bevor du nochmal solche Absolut Aussagen "Du wirst kläglich scheitern." los lässt:
Setze bitte zusätzliche Pullup ein.
Die originalen 10k sind für 3,3V ganz schnell viel zu groß.
Meine Kristallkugel sagt: Das wird deine Schaltung heilen.

Wie immer (bei 3,3V) habe ich zusätzliche 4k7 dazu gesteckt.

Oh man... ich könnte jetzt soviel schreiben, aber nein auf dein Niveau lass ich mich nicht herab.
Ich sag einfach brav Danke für den Hinweis und lass den Rest einfach für sich stehen.

Du hast Dir auch eine Kristallkugel angeschafft??? :open_mouth:

Ja, bin mittlerweile von Glaskugeln ganz weit weg.

1 Like