An der Stelle noch ein Hinweis: Der oberste der vier Widerstände (R3, 100 kOhm) wird benutzt, um die Verstärkung auf 3 dB herabzusetzen. Wem der ESPuino zu leise ist, der kann das auch weglassen. Ich habe es deswegen gemacht, weil meine Kinder zum Einschlafen gerne was hören und ich der Meinung bin, dass ohne diesen Widerstand im unteren Lautstärkebereich die Abstufung zu grob ist. Ansonsten mal einen Blick ins Datenblatt werfen (Seite 28, Gain Selection). Nachfolgend ein Auszug:
Features
Passend für Wemos Lolin32 (Lolin D32, Lolin D32 pro oder Lolin32 lite passen nicht!)
Die Außenmaße sind 56 x 93mm (das Lochmaß ist identisch zu dem hier
Es werden JST-PH 2.0-Konnektoren für Taster, Drehencoder, Neopixel, RFID und Batterieanschluss verwendet. Wichtig: Es handelt sich hier um 2mm-Abstand und NICHT das klassische 2,54mm-Lochraster!
Die Anschlüsse für MAX98357a und das µSD-Board besitzen dagegen einen normalen Lochrasterabstand, so dass das Ganze zu den beiden Breadboards passt. Achte drauf, die Pinleisten auf die richtige Seite zu löten, so dass Pin-Kompatibilität gewährt ist.
Ein Mosfet-Schaltkreis schaltet die Spannung von MAX98357a, Kopfhörerplatine (optional), RFID, Neopixel und µSD-Board ab, um Strom zu sparen, wenn der ESP32 im Deepsleep ist.
Sämtliche Peripherie wird mit 3.3 V betrieben! Bedenke das bei der Auswahl des µSD-Baords. Den Neopixel betreibt man damit streng genommen außerhalb seiner Spezifikation, aber er funktioniert dennoch.
Falls die Kopfhörerplatine #1 oder Kopfhörerplatine #2 verwendet werden, so wird der MAX98357a auf lautlos gestellt, wenn ein Kopfhörer eingesteckt ist und umgekehrt.
Falls HEADPHONE_ADJUST_ENABLE einkompiliert wurde, erkennt der ESPuino das Einstecken und kann, sofern über die WebGUI entsprechend konfiguriert, die Lautstärke begrenzen. Dies macht deshalb Sinn, da der als Verstärker verwendete TDA1308 die Musik auf dem Kopfhörer recht laut machen kann.
PN5180 kann, sofern er mit einer neuen FW-Version (4.1) verwendet werden, den ESPuino auch aufwecken. Damit er das kann, braucht er einerseits einen weiteren Pin (IRQ) und andererseits dauerhaft Spannung. Ich habe die Platine jetzt so designed, dass man über einen 3Pin-Jumper einstellen kann, ob der PN5180 dauerhaft mit Spannung versorgt werden soll oder nicht. D.h. ist der obere Pin mit dem mittleren Pin gebrückt, so wird die Versorgungsspannung im Deepsleep ausgeschaltet. Ist der mittlere Pin mit dem unteren gebrückt, so ist auf dem PN5180 dauerhaft Spannung, was dann für LPCD notwendig ist. Hierfür muss PN5180_ENABLE_LPCD aktiviert sein. WICHTIG: Vergesst nicht diesen Jumper zu stecken!
Üblicherweise haben die PN5180, wenn sie aus China kommen, die FW-Version 3.5. Um 4.1 drauf zu bringen, muss man sie flashen. Wie das geht steht hier.
2Pin-Header für Reset (EN/GND) - hier kann man z.B. einen Mikroschalter anlöten und halb-versteckt außen am ESPuino-Gehäuse platzieren
3Pin-Header für seriellen Anschluss (TX/RX/GND).
Vorraussetzungen
Ist keine Kopfhörerplatine angeschlossen, so muss HEADPHONE_ADJUST_ENABLE deaktiviert werden.
Zum Messen der Batteriespannung muss MEASURE_BATTERY_VOLTAGE aktiviert sein. Zusätzlich ist ein Spannungsteiler notwendig, da die Spannung von max. 4,2 V für den ESP32 sonst zu hoch wäre. Ich habe zwei 130 kOhm-Widerstände benutzt, die das Multimeter mit jeweils 129 kOhm vermessen hat. Diese Werte werden in der Develboard-spezifischen Konfiguration settings-lolin32.h als Rdiv1 und und Rdiv2 konfiguriert. Sollte die gemessene Spannung systematisch falsch sein, so kann man sie mittels offsetVoltage korrigieren. Auch referenceVoltage lässt sich anpassen. Suuuuper genau ist es nicht, aber 0,1 V Genauigkeit ist aus meiner Sicht mehr als ausreichend.
In settings.hmuss HAL=1 gesetzt sein.
Aktiviere SD_MMC_1BIT_MODE und SINGLE_SPI_ENABLE.
Aktiviere RFID_READER_TYPE_PN5180. Wenn dein ESPuino auch aus dem Schlaf mittels Karte aufgeweckt werden soll, dann zusätzlich auch PN5180_ENABLE_LPCD.
Deaktiviere auf jeden Fall RFID-Reader-Optionen, die NICHT PN5180 sind.
Achte beim oben verlinkten SD-Board darauf, dass der PullUp-Widerstand an GPIO 2 (MISO) entfernt wird, da der ESP32 sonst nicht mehr in den Flashmodus geht (siehe nachfolgendes Bild).
Gleiche deine Konfiguration nun mit nachstehender Tabelle ab. Spoiler: Hier und da hat sich ein GPIO geändert.
ESP32 (GPIO)
Hardware
Pin
Kommentar
MFET 3.3V
SD-Board
3.3V
GND
SD-Board
GND
xx
SD-Board
CS
entfällt bei SD_MMC!
15
SD-Board
MOSI
2
SD-Board
MISO
14
SD-Board
SCK
MFET 3.3V
RFID-Leser
5V
Ja, 3.3V muss an 5V angeschlossen werden
MFET 3.3V
RFID-Leser
3.3V
Obwohl 3.3V schon an 5V hängt, muss es hier auch dran
GND
RFID-Leser
GND
21
RFID-Leser
NSS
23
RFID-Leser
MOSI
19
RFID-Leser
MISO
18
RFID-Leser
SCK
22
RFID-Leser
RST
16
RFID-Leser
BUSY
39 (VN)
RFID-Leser
IRQ
MFET 3.3V
MAX98357
VIN
GND
MAX98357
GND
25
MAX98357
DIN
27
MAX98357
BCLK
26
MAX98357
LRC
—
MAX98357
SD
Info: liegt hier GND an so schaltet MAX auf lautlos
—
MAX98357
GAIN
PullUp mit 100k auf 3.3V bewirkt weniger Verstärkung
34
Drehencoder
CLK
Tausche CLK mit DT, wenn du die Drehrichtung anpassen möchstest
35
Drehencoder
DT
Tausche CLK mit DT, wenn du die Drehrichtung anpassen möchstes
32
Drehencoder
BUTTON
3.3 V
Drehencoder
+
GND
Drehencoder
GND
4
Taster (next)
GND
Taster (next)
36 (VP)
Taster (previous)
GND
Taster (previous)
5
Taster (pause/play)
GND
Taster (pause/play)
MFET 3.3V
Neopixel
V
GND
Neopixel
G
12
Neopixel
DI
17
N-channel Mosfet
Gate
33
Spannungsteiler / BAT
Optional: Spannungsteiler zur Batteriespannungsmessung
13
Kopfhörerbuchse
Optional: wenn auf GND gezogen, dann wird Kopfhörerlautstärke aktiviert
Anmerkungen
Der JST-PH-Stecker für den PN5180 ist 10 Pins breit.
Im Unterschied zum Lolin D32 besitzt Lolin32 keinen integrierten Spannungsteiler zur Spannungsmessung. Am unteren Konnektor auf dem PCB wird der Akku angeschlossen. Auf dem PCB werden dann zwei Drähte aufgelötet, die mittels JST-PH in den Lolin32 gesteckt werden (siehe Bilder oben). Es ist dabei immer darauf zu achten, unabhängig von Farben, dass (+) immer links und (-) immer rechts ist!
Löte den Lolin32 nicht direkt auf den PCB auf, sondern verwende weibliche Konnektoren als Sockel. Die Kontaktierung funktioniert gut.
Falls du einen LiPo-Akku verwendest, dann stelle sicher, dass dieser einen integrierten Tiefeentladeschutz besitzt. Dies ist GANZ GANZ GANZ wichtig! Nutze z.B. einen Solchen.
PN5180 scheint es aktuell ausschließlich in China zu geben. Kostet etwa 5€ und ist damit etwas teurer als RC522.
Benötigte Teile
Herz dieses PCBs ist der ESP32 auf einem Wemos Lolin32 development-board. Wichtig: Bevor dieser genutzt werden kann, muss zuerst der passende Treiber installiert werden für den USB/seriell-Chip darauf (CH2102).
1x IRL3103 (N-channel MOSFET) [anstelle von IRF530NPbF, da IRL3103 eine niedrigere Vgs besitzt]
1x NDP6020P (P-channel MOSFET)
1x 1k Widerstand
2x 10k Widerstand
2x 100k Widerstand
2x 130k Widerstand (kann auch durch 2x100k ersetzt werden)
5x JST-PH2.0-Konnektor (2 Pins)
1x JST-PH2.0-Konnektor (3 Pins)
1x JST-PH2.0-Konnektor (5 Pins)
1x JST-PH2.0-Konnektor (10 Pins)
Weibliche Verbinder zum Sockeln des Lolin32 (2,54 mm)
Männliche Pinheader für Jumper und seriellem Anschluss (2,54 mm)
1x Jumper (2, 54mm)
1x Kondensator 10µF (optional)
Wo bestellen?
Hab’s auch mal bei Aisler hochgeladen. Die fertigen in Deutschland.
Du möchtest gerne sofort loslegen und nicht warten, bis die PCBs produziert sind? Kein Problem! Schreibe mir eine private Nachricht - ich kann aushelfen
Ich habe mir ja kürzlich solche Boards in China bestellt, 10 Stk. (1Pcs Micro SD Speicher Expansion Board Mini Micro SD TF Karte Memory Shield Modul Mit Pins für Arduino|Integrated Circuits| - AliExpress). Kamen gestern an, sieht auch ok aus. Problem ist nur, dass die tatsächlich den Pinheader schon aufgelötet haben. An für sich ja toll, nur ist er auf der falschen Seite und damit passen die Pins nicht mehr. Kann ich alle umlöten oder meine Platinen umdesignen. Kann auch sein, dass die in meinem ebay-Link von oben schon falsch rum aufgelötet sind.
Denke dran, den einen Widerstand dort auszulöten, sonst kriegst du den Lolin32 nicht mehr geflasht. Welcher das ist, steht hier lokal bei mir im Artikel.
Hallo @biologist
Du schreibst in der Readme PN5180 muss mit 3,3V und 5V versorgt werden . Ich habe mir gestern mal die Schaltung angesehen . Das Board sollte auch mit 3,3V gehen . Die 5V sind auf einen internen Spannungsregler geschaltet , welcher daraus dann 3,3V macht . Die meisten 3,3V Verbindungen sind nicht beschaltet ( siehe Foto eines PN5180 , die Brücken fehlen ), bis auf die zu VBAT und PVDD. Dort ist ein interner LDO der dann 1,8V macht . Laut Datenblatt von NXP arbeitet der Chip mit 3,3V . Hast du , oder jemand anderes , das mal ausprobiert ? Also entweder 3,3V oder 5 V nicht beides gleichzeitig beschalten. Wenn es nicht geht evtl. die Brücken R14 aus und R15 einlöten .
Dann muss ich die Beschreibung wohl verständlicher anpassen. Also es war tatsächlich so gemeint, dass man die 3.3V an 5V UND 3.3V hängen muss. So macht es mein PCB auch.
Mich hat es auch irritiert muss ich zugeben. @tueddy hat das Ganze ja ins Laufen gebracht und mich mit dem PN5180 „bemustert“. Irgendwie lief es nicht und dann meinte er zu mir, dass man beide Pins mit 3.3V beschalten müsse.
Ja, das ist schon komisch . Es gibt ein Evaluation board von NXP , auch da ist der Jumper per default auf 3,3V , nix gleichzeitig . Der Ausgang des 3,3V LDO_OUT ist ja auch garnicht beschaltet , R10 fehlt . Für mich funktioniert das Board alleine mit 5V nicht , erst wenn man R10 beschaltet . Ich habe auch schon länger gegoogelt , finde aber nichts .
Bei mir läuft der Leser komplett mit 3,3V. Der 5V Anschluss muss aber in jedem Fall auch mit Strom versorgt werden, Also Anschlüsse 3,3V & 5V beide an 3,3V
Ich habe in den letzten Tagen diese Platine bestückt und in Betrieb genommen. Leider gab es erst mal keine Tonausgabe, obwohl in der Debug-Ausgabe das Abspielen einer Sound-Datei angezeigt wurde. Ich habe keine Kopfhörer-Platine, die entsprechenden Kontakte auf dem PCB sind daher einfach offen.
Das Problem war letztendlich, dass am MAX98357 am Pin SD eine zu geringe Spannung anlag. Mein MAX98357 ist nicht von Adafruit [1], sondern von AliExpress. Gemessen habe ich an dem Pin eine Spannung von ca. 0,05 V, was laut [2] eben ein Shutdown des Amps bewirkt (" If SD is connected to ground directly (voltage is under 0.16V) then the amp is shut down"). Die Spannung sollte ja eigentlich höher sein, da auch auf diesem Breakout-Board ein 1 MOhm Widerstand nach VCC geht, und intern im Chip ein 100 kOhm Widerstand nach GND geht (SD_MODE Pulldown Resistor).
Ich habe dann mit verschiedenen Widerständen auf dem PCB-Board zwischen HP_Detect (ist mit SD des Amps verbunden) und 3,3 V am Ausgang für die Kopfhörer-Platine experimentiert, und ein 100 kOhm Widerstand hat die Spannung an SD auf 0,48 V gebracht (für den „(Left + Right)/2“ Modus). Damit kam dann endlich zuverlässig der Sound am Lautsprecher an. (Größere Widerstände, die nach der Berechnungsformel im Datenblatt eigentlich passender wären, haben nicht zuverlässig funktioniert).
@biologist : Evtl. sollte man den Hinweis oben („Info: liegt hier GND an so schaltet MAX auf lautlos“) und auf Github noch ergänzen, dass hier ein zusätzlicher Pull-Up-Widerstand erforderlich sein könnte, zumindest wenn es Probleme mit dem Sound gibt. Die Spannung muss > 0,355 V sein, sonst geht der Amps auf Shutdown.
Insgesamt ist dieser SD Pin ja schon recht merkwürdig. Vier Funktionen auf einen Anschluss zu legen - zu aktivieren mit festen Spannungsbereichen - führt sicherlich öfters mal zu Problemen.
Ich hatte das gleiche Problem, allerdings war es ausreichend einfach HEADPHONE_ADJUST_ENABLE zu aktivieren, damit HP_DETECT auf Input geschaltet wird, auch wenn man die Kopfhörer-Platine nicht verwendet.
Aha - danke für den Hinweis. Dann zieht der nicht initialisierte Port bei mir die Spannung so weit runter? (Ich hatte die Spannung tatsächlich nur auf dem PCB komplett aufgesteckt gemessen.)
Laut dem ESP32 Pin List Dokument ist GPIO13 nach dem Reset auf Input und Pulldown. Das erklärt auch das Verhalten. Mit dem HEADPHONE_ADJUST_ENABLE wird dann der Pulldown deaktiviert.
Zitat von oben. Also den Jumper musst du auf jeden Fall setzen.
EDIT: Im einen Fall wird dauerhaft der PN5180 mit Spannung versorgt „3.3 V“ und im anderen Fall wird er durch die Mosfets abgeschaltet, wenn der ESP im Deepsleep ist „M_SW3.3“.
Ah super danke! Das hatte ich schon gesucht. Hast du mal gemessen was der PN5180 an Strom im standby zieht?
The PN5180 supports an external silicon system-power-on switch by using the energy
of the RF field generated by an NFC phone to switch on the system, like it is generated
during the NFC polling loop. This unique and new Zero-Power-Wake-up feature allows
designing systems with a power consumption close to zero during standby.
vom datasheet https://www.nxp.com/docs/en/data-sheet/PN5180A0XX-C1-C2.pdf
Finde leider kaum Informationen darüber.
Hänge leider beim Update fest. Habe die REQ mit dem next button verbunden und kann auch auslesen das ich die Firmware 3.5 am laufen habe.
Habe es geschafft dieses NFC Cockpit zu installieren. Dafür musste man sich bei NXP anmelden und es ist erschreckend was die alles wissen wollen. Meine Unsinnsdaten hat das Ding aber geschluckt. Die Firmware findet sich dann unter nxp\NxpNfcCockpit_v5.9.0.0\firmware\PN5180_SFWU im Installationsverzeichnis.
Wo kommt dann das ganze Hex zeug hin? Die Anleitung sagt ich soll das in einem header speichern.
Edit: Okay ich bin blind. Das wird in #define PN5180_FIRMWARE in firmware.h deklariert. Man muss also doch nicht das ganze geraffel mit NXP machen.
Allerdings bekomme ich folgende Fehlermeldung beim compilen:
Arduino: 1.8.13 (Windows 10), Board: "WEMOS LOLIN32, 80MHz, Default, 240MHz (WiFi/BT), 921600"
FirmwareUpdate:24:1: error: 'PN5180_Firmware' does not name a type
PN5180_Firmware Pn5180(PN5180_RST_PIN, PN5180_BUSY_PIN, PN5180_REQ_PIN, PN5180_NSS_PIN, STM32_MOSI_PIN, STM32_MISO_PIN, STM32_SCK_PIN);
^
C:\Users\Braindance\Documents\PN5180_Updater_ESP32-master\FirmwareUpdate\FirmwareUpdate.ino: In function 'void setup()':
FirmwareUpdate:30:3: error: 'Pn5180' was not declared in this scope
Pn5180.Begin();
^
C:\Users\Braindance\Documents\PN5180_Updater_ESP32-master\FirmwareUpdate\FirmwareUpdate.ino: In function 'void loop()':
FirmwareUpdate:47:3: error: 'Pn5180' was not declared in this scope
Pn5180.End();
^
exit status 1
'PN5180_Firmware' does not name a type
Ignorier die Anleitung. In den Github wurde das schon gemacht und die Firmware liegt schon im passenden Format vor. Du musst es nur aufspielen und die Boards passend angebunden haben.