Zugangmonitoring

hey zusammen,

ich bin auch neu bei der Minirechnerprogrammierung, habe allerdings schon Assembler und Java, C,etc Erfahrung. Nun möchte ich ich ein kleines Projekt realisieren und würde mich freuen wenn ihr mal über die Komponenten schauen könntet, die ich rausgesucht hab.

Zu der Problemstellung:
Erkennen wer zu welcher Zeit kommt bzw geht, erfasste Daten monatlich senden und das alles natürlich so lange wie möglich auf Akkubetrieb :smiling_imp: .
Dabei existiert natürlich weder Lan noch Wlanzugang.

Als Board hab ich mir das überlegt:
board

Gründe dafür:
geringer Stromverbrauch im Sleepmodus
Aufladen des Akkus über Usb mithilfe des Batterie Charger --- hab ich so richtig verstanden?

Rfid zur Benutzererkennung
rfid Modul

da brauche ich kein extra Shield dafür oder?

GSM Modul
um Daten per SMS zu versenden

daswird bei einem Arduino ja vmtl nicht funktionieren?

und zum Schluss noch einen Taster und ein I2c Display

Also Stromquelle wäre meine Idee ein Lipo Akku, allerdings wäre ne Powerbank mit 26800mAh vmtl. doch die bessere Wahl.

Meine Grundidee war, alles bis auf Timer Interrupt und Taster Interrupt in Sleep Modus zu setzen, falls Taster Interrupt RFid kurz anschalten, scannen, verarbeiten -> Sleep Modus

Timmer Interuppt: Gsm Modul anschalten und Daten über Sms zu versenden

Könntet ihr mal bitte über die Konfiguration schauen und mir sagen ob es zu Konflikten kommt.
Danke schon mal im voraus :slight_smile:

saano:

Könntet ihr mal bitte über die Konfiguration schauen und mir sagen ob es zu Konflikten kommt.

Hey…tolle Teile, die du da rausgesucht hast.
Aber von welcher Konfiguration schreibst du ?
Ich sehe kein Schaltbild und auch keinen Sketch.
Wie sollen wir da etwas herausfinden ?

Es gibt imho jede Menge “Fertige” Projekte als Anhaltspunkt. So auf die schnelle:

https://github.com/alexwhittemore/RFID-Door
https://github.com/omersiar/RFID522-Door-Unlock
https://github.com/omersiar/RFID522-Door-Unlock/tree/master/EEPROM

Als Kartenleser würder ich keinen PN522 nehmen sondern einen PN532. Und zwar montiert auf einem Board von Elechouse.
https://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2242
Nicht eine Fälschung vom Chinesen, sondern das Original. Lieferung klappt da in gut einer Woche. Un der Preisunterschied ob 5 oder 15 Dollar ist den Ärger echt nicht wert. Der PN532 weil der auch problemlos “NFC” Karten liest, und warum soll man nicht eine bestehende Karte als Zutrittskarte verwenden.

Schwierig stelle ich mir die Übertragung von einen Zutrittslog via SMS vor.
Wenn ich mir da mein eigenes Log ansehe, Datum/Uhrzeit RFID (vieleicht sogar 2x Long), und noch ein Marker ob Zutritt gewährt oder abgelehnt, dann wirst du in den 160 Zeichen eines SMS nicht viele Zutritte übermitteln können.
rfid_leser.png
(ich habe schon gelesen du willst kein WLAN, mir geht es beim Screenshot nur um die Menge der Daten die so ein Log haben könnte…)

dickes danke schön :slight_smile:

werde mir das andere NFC Modul holen. Die Datengröße ist auch kein Problem da ich nicht den kompletten Log senden will sondern nur die gesamte Anzahl, sprich 1-2 Integer pro User.

ich brauche noch ein mal starthilfe :smiley:

hab versucht ein Beispielprogramm des Rfid Readers pn532 zu starten und bekomme die Fehlermeldung dass er das Board nicht finde, denke mal dass ich im Programm die Ports ändern muss, allerdings hab ich keine Ahnung wo? Hat die Wire Datei damit was zu tun?

Kippschalter des pn532 habe ich auf auf I2c umgestellt.

Verbunden habe ich:
vcc ->5v
gnd ->gnd
sda ->port 21
scl ->port 22

ein LCD Display konnte ich auf jeden Fall erfolgreich über I2C mit den Ports anschließen.
Habe die Pins und Belegungen mal im Anhang hinzugefügt.

board
rfid reader

äh ja, das besagte Programm mit Bibliothek sollte ich vllt. auch noch hinzufügen.

Beispielprogramm: iso14443a-uid

Ich gege davon aus, dass die Lib noch nicht auf den ESP32 portiert wurde.
Schaue Dir mal in den ESP32-Libs die Wire.h an. Die braucht einige Aufrufe anders, als beim Arduino. Das ist in der PN532-Lib nicht berücksichtigt.

Gruß Tommy

danke schon ein mal :slight_smile:

die esp32 lib hab ich für die ide installiert und für mein Projekt hab ich die esp wire datei zu den libs hinzugefügt.

Soweit ich es verstanden habe, gibt es nen aufruf mit wire.begin() und diesen muss ich zu wire.begin(21,22) ändern? Auf jeden Fall hat es mit dem LCD Display so funktionert, allerdings ist es durch die verschachtelung der Header wesentlich komplizierter.

Genau wire.begin braucht die Pins. Du wirst nicht umhin kommen, die Lib anzupassen.

Gruß Tommy

Ich würde zunächst mal einen I2C Scanner laufen lassen um sicherzusellen, dass das Board im Bus erkannt wird und welche Adresse es haben könnte.

Solange der Scanner nichts findet, wirst du auch mit der 532 Lib nicht viel Freude haben.

Wenn der Scanner nicht speziell auf den ESP32 ausgelegt ist, wird er nichts finden. Der ESP32 hat z.B. 2 mal I2C.

Gruß Tommy

habe den hier benutzt und auch ein Gerät gefunden, aber das war es dann auch :smiley:

Noch mal zum Verständnis:

  • es reicht wenn ich die esp wire datei in hardware/espressif... habe?
  • um die Lib anzupassen, muss ich doch nur die wire.begin aufrufe anpassen?

hab in der code Datei von PN532_I2C.cpp

die Funktion gefunden und angepasst

void PN532_I2C::begin()
{
_wire->begin(21,22);
}

allerdings findet er das Board mit dem Programm nicht und weiter weiß ich jetzt nicht mehr.

Gruß Stefan

Probiere mal wire etwas spezieller zu nutzen:

// alt
PN532_I2C pn532i2c(Wire);
// Neu Den I2C-Kanal 0 einstellen
PN532_I2C pn532i2c(Wire(0));
// oder Neu Den I2C-Kanal 1 einstellen
PN532_I2C pn532i2c(Wire(1));

Gruß Tommy

Ich habe mir das Problem jetzt noch mal genauer angesehen und alles fest verlötet um sicherzugehen.

Mit dem Scanner und dem rfid testprogramm mit auskommentiertem loop bekomme ich stabil das board angezeigt.

Wenn ich allerdings den loop aktiveren wird aktiv am rfid nach einer karte gepoolt und ich schätze das ist der Grund warum er danach das board nicht mehr erkennt?

Sprich Programm wird mit Loop ausgeführt, läuft auch, erkennt allerdings die Karte noch nicht... wenn ich dann aber eine neues Programm uploaden will, erkennt er das rfid port nicht mehr, auch nicht der Scanner. Gibt es so ne Mechanic das er die Ports abschaltet oder wird durch das Polling einfach der Befehl verschluckt?

Gruß Stefan

Ablauf:
Scanner:

Link

Testprogramm ohne Loop:

Link

Testprogramm mit Loop:

Link

nochmals das Testprogramm:

Link

an den ersten Zeilen kann man vmtl erkennen das auf dem Rfid Chip noch im alten Loop hängt bzw. ein anderer Part?

nochmals der Scanner:

Link

die erste Zeile mit den umgedrehten ? ist vom Verbindungsaufbau oder?

Abhilfe danach hilft nur ein Power Off, Power On

iso14443a_uid.pde (2.96 KB)

i2c_scanner.ino (929 Bytes)

weniger arbeit wäre ein Strg-C/STRG-V gewesen :wink:

die Platine hat auch einen Reset Eingang. Hast den schon mal probiert.
Wobei ich den zwar mit SPI noch nie benötigt habe aber vieleicht ist das bei I2C anders.

ja, aber der Reset hat auch nichts gebracht :smiley:

erst den Scanner, dann das RFID - Testprogramm und dann zum Testen ob er das Bauteil am I2C Bus noch erkennen kann - wieder den Scanner

äh ja :D, das Testprogramm heißt iso14443a_uid

welches RFID Testprogramm … wenn es welche von Github/elechouse sind… da sind ja mind. 10 drauf!

was ich so an deinem Serial sehe, der loop läuft doch ganz normal durch, man sieht ja laufend die Ausgabe vom
Serial.println("Timed out waiting for a card");

eigentlich sollte es doch genau so aussehen. Was ist also dein wirkliches Problem?

konnte nur den Beitrag nur vor dem Ablauf der 5min Sperre editieren :(, aber das Programm heißt iso14443a_uid und oben habe ich es angehängt.

Ja ich kann den Loop ausführen - allerdings nur 1Mal und wenn ich danach einen neuen Code aufspielen will, erkennt er das Board nicht mehr und ich muss die Stromversorgung kappen und was mir zu denken gibt, ist das auch der Scanner das Board dann nicht mehr erkennen will und ich versteh nicht wieso oder ist das RFID Board einfach nur mit Pollen beschäftigt dass er den neuen Code gar nicht mehr mitbekommt?