ESP32 NodeMCU / Devkit C mit SD_MMC und PN5180 als RFID-Leser

Sowas mit Gehäuse schwebt mir ja auch noch vor, da insbesondere so ein runder Neopixel, den ich hier ja maßgeblich propagiere, gar nicht so leicht in ein Gehäuse zu integrieren ist. Dafür muss ich aber erstmal ins Thema CNC einsteigen. Ne eigene CNC zu haben reizt mich auf jeden Fall - schon immer :smiley:.

Das kann ich nicht beurteilen. Es sei an der Stelle nur angemerkt, dass die Idee ja gar nicht von mir kam :thinking:. Naja, wir werden sehen; vielleicht kommt ja noch was.

Schau dir mal die mpcnc an oder uncle phil. So eine Fräse der 2. Generation hat ein Freund, das Ding macht Spaß. Anmerkung am Rand das Tillboard von den ist opensource und in der Community entwickelt :slight_smile:
Ich denke aber den Ausschnitt für den Ring bekommt man auch mit ner oberfräse gut hin

Das ist grundsätzlich richtig, ich habe ja auch zwei hier. Nur so ein Ring ist auch nicht unendlich schön, also decke ich ihn mit einem folierten Plexiglasring ab. Auf einer cnc fräst man den Ring halt aufs Zehntel genau - den muss man dann nicht mal einkleben sondern man kann ihn reindrücken in die Kavität.
Auch für den Schallaustritt habe ich eine Bohrmatrix vorgesehen, die aus einer dreistelligen Anzahl an Löchern besteht. Da wirst mit einer Standbohrmaschine bekloppt :grin:.

Also es hätte schon Vorteile…

Die Tonuinojungs gehen mit einem Taster an den On und Schalten das Ganze durch den arduino am Off aus.
Das hat den Nachteil, wenn das Programm klemmt, dann ist kein reset möglich.
Unterm Strich sollte das Teil eine Selbsthaltung mit 2 Mosfet sein. Über die Ladekurve eine Kondensator sollte man da theoretisch das Ausschalten auch verzögern können.

Mir ist noch eingefallen, dass ein Laden des Akkus nur bei eingeschalteter Box möglich - das müsste bei @compactflash aber nicht anders sein.

Doch, das ist bei ihm anders. Das wird auch bei meiner neuen Platine anders sein. Der Ansatz ist aber auch anders: Man steuert ja nur EN an und stellt nicht Strom auf das ganze Develboard bereit. Aber gut, das geht hier sicher auch, wenn man an EN einen Pulldown hängt und der Pololu diesen dann auch ansteuert. Allerdings wird man das mit einem Spannungsteiler machen müssen, da ja sonst bis zu 5V reinkommen.

Zur Selbsthaltung: Genau, so kam ich dann ein Stück weit auch auf FlipFlop.

1 „Gefällt mir“

Warum verwende ich den LTC2954 ?
Meine ersten Versuche waren eine Eigenentwicklung, später dann der fast baugleiche Tonuino . Alles war ok bis auf die leidige Geschichte Akku laden und Ein-Ausschalten. Was da alles im anderen Forum probiert worden ist … Mosfets , Polulu , Flip-Fops etc. Ich weiß nicht wie es auf der All-in-One beim Tonuino gemacht worden ist.
Ich hatte mich damals schon sehr früh für ein eigenes Lade/Netzteil entschieden , weil mir keine der Lösungen gefallen hat. Es funktioniert problemlos und das habe ich auch im anderen Forum beschrieben. Hat aber keinen interessiert. Im Gegenteil, es gab Debatten wie man Bauteile verwenden kann und das auch entgegen der Empfehlungen des Herstellers. Habe mich dann zurückgezogen. Auf meinem Netzteil hatte ich einen Einschaltcontroller Power Switch - Mikrocontroller.net mit einem ATTiny ausprobiert. Hat eigentlich gut funktioniert bis auf den Umstand dass alle paar Wochen der ATTiny nicht mehr reagiert hat und es dann nur noch half die Box zu öffnen und den Akku zu trennen (Softwarefehler ?, da es mit verschiedenen Chips passierte). Daraufhin habe ich nach fertigen Bausteinen gesucht. Es gibt zahllose von vielen bekannten Herstellern und ich denke das hat auch einen guten Grund. Nach langer Recherche habe ich mich für den LTC2954 entschieden. Dieser war gut erhältlich und von der Baugröße noch zu Löten . Die meisten anderen Chips sind noch winziger.
Das damit entstandene neue Netzteil funktioniert seit fast 3 Jahren mit dem Tonuino einwandfrei .


Also war für mich sonnenklar , Espuino auch mit LTC. Vielleicht hat jemand Lust, für ein neues complete, herauszufinden ob ein alternativer Controller bei JLCPCB verfügbar ist. Ich habe jetzt 4 Boxen plus einem Satz fertiger PCB´s als Ersatzteil fertig und bin da in ca. 2 Wochen erstmal raus. Ich habe noch andere Ideen die ich endlich verwirklichen will.

Ansonsten an dieser Stelle nochmals vielen Dank an @biologist , @Wolle und pschatzmann . Alle haben mir viel geholfen und sind auch auf meine Wünsche, wenn machbar, eingegangen. Ebenso vielen Dank an die zahlreichen Entwickler die zur Perfektionierung beigetragen haben, beispielsweise für WebGui , Tastenabfrage, Refactoring, Bluetooth und , und , und… die Liste ist lang.

2 „Gefällt mir“

@compactflash Danke für deine Ausführungen und danke für deine Entwicklungen + Feedback! Vor allem die Sache mit dem ATTiny fand ich interessant, weil das wusste ich gar nicht (oder hatte ich vergessen).

@Rest: Das o.g. Projekt, von dem ich dachte, dass es „tot“ sei, geht jetzt doch weiter. Aufgrund des Halbleitermangels sieht es aktuell jedoch bissl schwierig aus und es können keine (terminlichen) Zusagen getroffen werden. Es geht auf jeden Fall weiter und wenn es da irgendwann konkrete Pläne gibt, dann werde ich mich dazu natürlich melden.

1 „Gefällt mir“

Also irgendwas ist mit dem GPIO13 mysteriös :thinking:. Ich hatte für den Lolin D32 pro noch eine Platine gemacht mit sdmmc und pn5180, die jedoch nicht in SMD-Technik aufgebaut ist. Habe wieder genau das gleiche Problem: Steckt man einen Kopfhörer ein, so geht die Musik nicht aus auf dem Lautsprecher. Wie gewohnt stürzt der ESP32 jedoch ab, wenn man im laufenden Betrieb. Eine LED hängt auf GPIO13 nicht drauf laut Schaltplan von Wemos. Auf jeden Fall verweilt auch hier die Spannung bei 0,7 V und das reicht nicht, um den SD auszuschalten. Brücke ich SD auf GND, so geht er sofort aus.

Ich warte jetzt erstmal die Rev ab von dem Board oben. Gerade scheitern alle meine Boards irgendwie an solchen Kleinigkeiten :person_shrugging:. Super ärgerlich.

Im Nachbarforum hat jmd noch gepostet, wie man mit einer 2stufigen-Mosfet-Schaltung ebenfalls eine komplette Spannungslosigkeit des ESP32 erreicht. Ist natürlich auch eine Möglichkeit, da müsste man aber ein paar (wenige) Zeilen Code anpassen.

Was ich zur Vollständigkeit noch einfügen würde, ist ein Pulldown-Widerstand am N-Mosfet, auch wenn es hier wohl keine Auswirkungen hätte.

Die EIN-Taste wird man vermutlich bissl länger drücken müssen, aber wäre schon auch ein gangbarer Weg :+1:.

Streng genommen wohl auch einen Gate Widerstand.

Man könnte vielleicht auch mit dem Schalter direkt den nmos steuern und ggf. mit einem Kondensator kurz die Spannung halten. Dann dauert es auch bei Abschaltung immer etwas länger bis der Controller (ESP/Arduino) keinen Strom mehr bekommt.
Andererseits möchte man vielleicht sogar versehentliches auslösen vermeiden und verzögert das einschalten des nmos absichtlich noch ein wenig. Zum Beispiel wenn der „komplett-aus“ Zustand nur bei längerer nicht-Benutzung verwendet wird.

Stimmt, das hatte ich übersehen.

Ja, diesen Gedankengang hatte ich auch.

Wie auch immer: Für heute hat sich der Lolin D32 pro-PCB mit LTC2954-Integration angekündigt. Ich hoffe mal, dass das endlich mal wieder ein PCB ist, der komplett funktioniert :sunglasses:.

Hallo zusammen,

ich bin leider nicht so der Schaltplan-Guru, aber ihr könnt das bestimmt sofort beantworten:
Ich würd das Board gern mit einem WROVER nutzen, der Pinkompatibel zum AZ-Delivery WROOM ist. Wegen des PSRAM wären ja dann ja die GPIOS16+17 tabu.

Da das ganze bei mir eh am Dauerstrom laufen soll, würd ich die Mosfets überbrücken (=>GPIO17 wäre dann frei?!).

Um GPIO16 frei zu bekommen kann ich doch dann einfach einen RC522 verwenden, oder?! Alternativ (falls GPIO33 das kann), könnte man den GPIO33 statt GPIO16 nutzen für einen PN5180? Ich kann bei GPIO16 ja das Beinchen bei der Buchsenleiste einfach herausziehen (so dass der Pin vom Dev-Borad ins Leere greift) und per Kabel den GPIO33 mit der Bohrung für GPIO16 verbinden?
Oder macht es mehr Sinn GPIO 39 (gedacht für den IRQ vom PN5180) umzuwidmen? Dann müsste ich nur was an der Verkabelung zum PN5180 ändern (Pin mit Beschritgung IRQ → BUSY auf PN5180)? Wakeup per RFID brauch ich nicht unbedingt :slight_smile:

Warum das ganze? Weil ich noch ein Board von Torsten hier liegen hab und es gern mit dem WROVER bestücken würde :slight_smile:

Bei der Beschritrung bezüglich GAIN sind übrigens imo zwei Fehler drin:
6dB und 12dB sind laut Beschriftung inhaltlich identisch
3dB und 15dB ebenfalls
richtig wäre wohl:
12dB => R1(0Ohm) + no R2
15dB => R1(100k) + no R2

Vielen Dank vorab
Benni

Oh, danke für den Hinweis mit der Beschriftung. Da habe ich offenbar einen schönen Dreher eingebaut.

Zu deinen Fragen:
a) Ja, du kannst einfach einen rc522 verwenden. Das spart dir GPIO 16. Hätte ich das vorher gewusst, dass man das auch mit einem WROVER verwendet, dann hätte ich 33 mit 16 getauscht. Womit ich eine zweite Frage beantworte: Statt 16 kann man sicher auch 33 verwenden. 39 aber nicht (34 bis 39 können nur Input).

b) Lötest einfach eine Brücke von 3.3 V am Develboard auf z.B. 3.3 V am SD-Reader, Neopixel oder MAX. Dann brauchst keine Mosfets.

1 „Gefällt mir“

Jemand ne Idee, warum ich folgende Fehlermeldung nach dem Flashen bekomme?

E (18817) sdmmc_sd: sdmmc_init_sd_scr: send_scr (1) returned 0x109
[E][SD_MMC.cpp:85] begin(): Failed to initialize the card (265). Make sure SD card lines have pull-up resistors in place.

Zur Info: Das Board hat schon mal funktioniert. Erst nach einem Update tritt dieser Fehler auf. Hardwareseitig wurde nichts geändert.

Hast du mal die Spannung am SD-Reader oder MAX nach GND gemessen? Ich vermute mal, dass die Mosfet-Ansteuerung nicht passt.
Vielleicht postest du mal deine Settings-Files.

Mittlerweile habe ich herausgefunden, dass es am esp32 selbst liegt. Es gibt wohl zwei Versionen (leider kann ich kein Bild hochladen). Bei dem einen ist die Schrift am Chip senkrecht, beim anderen waagrecht, mit dem einen gehts, mit dem anderen nicht (habs mit jeweils zwei probiert um sicher zu gehen, dass es wirklich daran liegt).
Am MAX liegen 3,313 V an, sollte also passen.
Jetzt habe ich allerdings ein neues Problem:
Immer wenn der PN5180 angeschlossen ist kommt ca. alle zwei Sekunden

Kontroll-Kommando empfangen via Queue: 6
Playmode kann nicht verändert werden, wenn keine Playlist aktiv ist.

Settings.h

#ifndef ESPUINO_SETTINGS_H
#define ESPUINO_SETTINGS_H
#include „Arduino.h“
#include „values.h“
#if __has_include(„settings-override.h“)
#include „settings-override.h“
#else
//######################### INFOS ####################################
// This is the general configfile for ESPuino-configuration.

//################## HARDWARE-PLATFORM ###############################
/* Make sure to also edit the configfile, that is specific for your platform.
If in doubts (your develboard is not listed) use HAL 1
1: Wemos Lolin32                        => settings-lolin32.h
2: ESP32-A1S Audiokit                   => settings-espa1s.h
3: Wemos Lolin D32                      => settings-lolin_D32.h
4: Wemos Lolin D32 pro                  => settings-lolin_D32_pro.h
5: Lilygo T8 (V1.7)                     => settings-ttgo_t8.h
6: ESPuino complete                     => settings-complete.h
7: Lolin D32 pro SDMMC Port-Expander    => settings-lolin_d32_pro_sdmmc_pe.h
8: AZDelivery ESP32 NodeMCU             => settings-azdelivery_sdmmc.h
99: custom                              => settings-custom.h
more to come...
*/
#ifndef HAL             // Will be set by platformio.ini. If using Arduini-IDE you have to set HAL according your needs!
    #define HAL 1       // HAL 1 = LoLin32, 2 = ESP32-A1S-AudioKit, 3 = Lolin D32, 4 = Lolin D32 pro; ... 99 = custom
#endif


//########################## MODULES #################################
//#define PORT_EXPANDER_ENABLE          // When enabled, buttons can be connected via port-expander PCA9555 (https://forum.espuino.de/t/einsatz-des-port-expanders-pca9555/306)
//#define I2S_COMM_FMT_LSB_ENABLE       // Enables FMT instead of MSB for I2S-communication-format. Used e.g. by PT2811. Don't enable for MAX98357a, AC101 or PCM5102A)
#define MDNS_ENABLE                     // When enabled, you don't have to handle with ESPuino's IP-address. If hostname is set to "ESPuino", you can reach it via ESPuino.local
#define MQTT_ENABLE                     // Make sure to configure mqtt-server and (optionally) username+pwd
#define FTP_ENABLE                      // Enables FTP-server; DON'T FORGET TO ACTIVATE AFTER BOOT BY PRESSING PAUSE + NEXT-BUTTONS (IN PARALLEL)!
#define NEOPIXEL_ENABLE                 // Don't forget configuration of NUM_LEDS if enabled
//#define NEOPIXEL_REVERSE_ROTATION     // Some Neopixels are adressed/soldered counter-clockwise. This can be configured here.
#define LANGUAGE DE                     // DE = deutsch; EN = english
//#define STATIC_IP_ENABLE              // Enables static IP-configuration (change static ip-section accordingly)
#define HEADPHONE_ADJUST_ENABLE       // Used to adjust (lower) volume for optional headphone-pcb (refer maxVolumeSpeaker / maxVolumeHeadphone) and to enable stereo (if PLAY_MONO_SPEAKER is set)
#define PLAY_MONO_SPEAKER               // If only one speaker is used enabling mono should make sense. Please note: headphones is always stereo (if HEADPHONE_ADJUST_ENABLE is active)
#define SHUTDOWN_IF_SD_BOOT_FAILS       // Will put ESP to deepsleep if boot fails due to SD. Really recommend this if there's in battery-mode no other way to restart ESP! Interval adjustable via deepsleepTimeAfterBootFails.
//#define MEASURE_BATTERY_VOLTAGE         // Enables battery-measurement via GPIO (ADC) and voltage-divider
//#define MEASURE_BATTERY_MAX17055      // Enables battery-measurement via external fuel gauge (MAX17055)
//#define SHUTDOWN_ON_BAT_CRITICAL      // Whether to turn off on critical battery-level (only used if MEASURE_BATTERY_XXX is active)
//#define PLAY_LAST_RFID_AFTER_REBOOT   // When restarting ESPuino, the last RFID that was active before, is recalled and played
//#define USE_LAST_VOLUME_AFTER_REBOOT  // Remembers the volume used at last shutdown after reboot
#define USEROTARY_ENABLE                // If rotary-encoder is used (don't forget to review WAKEUP_BUTTON if you disable this feature!)
#define BLUETOOTH_ENABLE                // If enabled and bluetooth-mode is active, you can stream to your ESPuino via bluetooth (a2dp-sink).
//#define IR_CONTROL_ENABLE             // Enables remote control (https://forum.espuino.de/t/neues-feature-fernsteuerung-per-infrarot-fernbedienung/265)
#define CACHED_PLAYLIST_ENABLE          // Enables playlist-caching (infos: https://forum.espuino.de/t/neues-feature-cached-playlist/515)
//#define PAUSE_WHEN_RFID_REMOVED       // Playback starts when card is applied and pauses automatically, when card is removed (https://forum.espuino.de/t/neues-feature-pausieren-wenn-rfid-karte-entfernt-wurde/541)
//#define SAVE_PLAYPOS_BEFORE_SHUTDOWN  // When playback is active and mode audiobook was selected, last play-position is saved automatically when shutdown is initiated
//#define SAVE_PLAYPOS_WHEN_RFID_CHANGE // When playback is active and mode audiobook was selected, last play-position is saved automatically for old playlist when new RFID-tag is applied


//################## select SD card mode #############################
#define SD_MMC_1BIT_MODE              // run SD card in SD-MMC 1Bit mode (using GPIOs 15 + 14 + 2 is mandatory!)
//#define SINGLE_SPI_ENABLE             // If only one SPI-instance should be used instead of two (not yet working!)


//################## select RFID reader ##############################
//#define RFID_READER_TYPE_MFRC522_SPI    // use MFRC522 via SPI
//#define RFID_READER_TYPE_MFRC522_I2C  // use MFRC522 via I2C
#define RFID_READER_TYPE_PN5180       // use PN5180 via SPI

#ifdef RFID_READER_TYPE_MFRC522_I2C
    #define MFRC522_ADDR 0x28           // default I2C-address of MFRC522
#endif

#ifdef RFID_READER_TYPE_PN5180
    //#define PN5180_ENABLE_LPCD        // Wakes up ESPuino if RFID-tag was applied while deepsleep is active. Only ISO-14443-tags are supported for wakeup!
#endif

#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(RFID_READER_TYPE_MFRC522_SPI)
    constexpr uint8_t rfidGain = 0x07 << 4;      // Sensitivity of RC522. For possible values see reference: https://forum.espuino.de/uploads/default/original/1X/9de5f8d35cbc123c1378cad1beceb3f51035cec0.png
#endif


//############# Port-expander-configuration ######################
#ifdef PORT_EXPANDER_ENABLE
    constexpr uint8_t expanderI2cAddress = 0x20;  // I2C-address of PCA9555 (0x20 is true if PCA's pins A0+A1+A2 are pulled to GND)
#endif

//################## BUTTON-Layout ##################################
/* German documentation: https://forum.espuino.de/t/das-dynamische-button-layout/224
Please note the following numbers as you need to know them in order to define actions for buttons.
Even if you don't use all of them, their numbers won't change
    0: NEXT_BUTTON
    1: PREVIOUS_BUTTON
    2: PAUSEPLAY_BUTTON
    3: ROTARYENCODER_BUTTON
    4: BUTTON_4
    5: BUTTON_5

Don't forget to enable/configure those buttons you want to use in your develboard-specific config (e.g. settings-custom.h)

Single-buttons [can be long or short] (examples):
    BUTTON_0_SHORT => Button 0 (NEXT_BUTTON) pressed shortly
    BUTTON_3_SHORT => Button 3 (ROTARYENCODER_BUTTON) pressed shortly
    BUTTON_4_LONG => Button 4 (BUTTON_4) pressed long

Multi-buttons [short only] (examples):
    BUTTON_MULTI_01 => Buttons 0+1 (NEXT_BUTTON + PREVIOUS_BUTTON) pressed in parallel
    BUTTON_MULTI_12 => Buttons 1+2 (PREV_BUTTON + PAUSEPLAY_BUTTON) pressed in parallel

Actions:
    To all of those buttons, an action can be assigned freely.
    Please have a look at values.h to look up actions available (>=100 can be used)
    If you don't want to assign an action or you don't use a given button: CMD_NOTHING has to be set
*/
// *****BUTTON*****        *****ACTION*****
#define BUTTON_0_SHORT    CMD_NEXTTRACK
#define BUTTON_1_SHORT    CMD_PREVTRACK
#define BUTTON_2_SHORT    CMD_PLAYPAUSE
#define BUTTON_3_SHORT    CMD_MEASUREBATTERY
#define BUTTON_4_SHORT    CMD_SEEK_BACKWARDS
#define BUTTON_5_SHORT    CMD_SEEK_FORWARDS

#define BUTTON_0_LONG     CMD_LASTTRACK
#define BUTTON_1_LONG     CMD_FIRSTTRACK
#define BUTTON_2_LONG     CMD_PLAYPAUSE
#define BUTTON_3_LONG     CMD_SLEEPMODE
#define BUTTON_4_LONG     CMD_NOTHING
#define BUTTON_5_LONG     CMD_NOTHING

#define BUTTON_MULTI_01   CMD_NOTHING   //CMD_TOGGLE_WIFI_STATUS (disabled now to prevent children from unwanted WiFi-disable)
#define BUTTON_MULTI_02   CMD_ENABLE_FTP_SERVER
#define BUTTON_MULTI_03   CMD_NOTHING
#define BUTTON_MULTI_04   CMD_NOTHING
#define BUTTON_MULTI_05   CMD_NOTHING
#define BUTTON_MULTI_12   CMD_TELL_IP_ADDRESS
#define BUTTON_MULTI_13   CMD_NOTHING
#define BUTTON_MULTI_14   CMD_NOTHING
#define BUTTON_MULTI_15   CMD_NOTHING
#define BUTTON_MULTI_23   CMD_NOTHING
#define BUTTON_MULTI_24   CMD_NOTHING
#define BUTTON_MULTI_25   CMD_NOTHING
#define BUTTON_MULTI_34   CMD_NOTHING
#define BUTTON_MULTI_35   CMD_NOTHING
#define BUTTON_MULTI_45   CMD_NOTHING

//#################### Various settings ##############################

// Serial-logging-configuration
#define SERIAL_LOGLEVEL LOGLEVEL_DEBUG              // Current loglevel for serial console

// Static ip-configuration
#ifdef STATIC_IP_ENABLE
    #define LOCAL_IP   192,168,2,100                // ESPuino's IP
    #define GATEWAY_IP 192,168,2,1                  // IP of the gateway/router
    #define SUBNET_IP  255,255,255,0                // Netmask of your network (/24 => 255.255.255.0)
    #define DNS_IP     192,168,2,1                  // DNS-server of your network; in private networks it's usually the gatewy's IP
#endif

// Buttons (better leave unchanged if in doubts :-))
constexpr uint8_t buttonDebounceInterval = 50;                // Interval in ms to software-debounce buttons
constexpr uint16_t intervalToLongPress = 700;                 // Interval in ms to distinguish between short and long press of previous/next-button

// RFID-RC522
#define RFID_SCAN_INTERVAL 100                      // Interval-time in ms (how often is RFID read?)

// Automatic restart
#ifdef SHUTDOWN_IF_SD_BOOT_FAILS
    constexpr uint32_t deepsleepTimeAfterBootFails = 20;      // Automatic restart takes place if boot was not successful after this period (in seconds)
#endif

// FTP
// Nothing to be configured here...
// Default user/password is esp32/esp32 but can be changed via webgui

// ESPuino will create a WiFi if joing existing WiFi was not possible. Name can be configured here.
constexpr const char accessPointNetworkSSID[] PROGMEM = "ESPuino";     // Access-point's SSID
constexpr const char nameBluetoothDevice[] PROGMEM = "ESPuino";        // Name of your ESPuino as Bluetooth-device

// Where to store the backup-file for NVS-records
constexpr const char backupFile[] PROGMEM = "/backup.txt"; // File is written every time a (new) RFID-assignment via GUI is done
constexpr const char playlistCacheFile[] PROGMEM = "playlistcache.csv"; // Filename that is used for caching playlists

//#################### Settings for optional Modules##############################
// (optinal) Neopixel
#ifdef NEOPIXEL_ENABLE
    #define NUM_LEDS                    24          // number of LEDs
    #define CHIPSET                     WS2812B     // type of Neopixel
    #define COLOR_ORDER                 GRB
#endif

#if defined(MEASURE_BATTERY_VOLTAGE) || defined(MEASURE_BATTERY_MAX17055)
    #define BATTERY_MEASURE_ENABLE                 // Don't change. Set automatically if any method of battery monitoring is selected.
    constexpr uint8_t s_batteryCheckInterval = 10; // How often battery is measured (in minutes) (can be changed via GUI!)
#endif

#ifdef MEASURE_BATTERY_VOLTAGE
    // (optional) Default-voltages for battery-monitoring via Neopixel; can be changed later via WebGUI
    constexpr float s_warningLowVoltage = 3.4;                      // If battery-voltage is <= this value, a cyclic warning will be indicated by Neopixel (can be changed via GUI!)
    constexpr float s_warningCriticalVoltage = 3.1;                 // If battery-voltage is <= this value, assume battery near-empty. Set to 0V to disable.
    constexpr float s_voltageIndicatorLow = 3.0;                    // Lower range for Neopixel-voltage-indication (0 leds) (can be changed via GUI!)
    constexpr float s_voltageIndicatorHigh = 4.2;                   // Upper range for Neopixel-voltage-indication (all leds) (can be changed via GUI!)
#endif

#ifdef MEASURE_BATTERY_MAX17055
    constexpr float s_batteryLow = 15.0;            // low percentage
    constexpr float s_batteryCritical = 5.0;        // critical percentage

    constexpr uint16_t s_batteryCapacity = 6000;    // design cap of battery (mAh)
    constexpr uint16_t s_emptyVoltage = 300;        // empty voltage in 10mV
    constexpr uint16_t s_recoveryVoltage = 360;     // recovery voltage in 10mV
    constexpr uint8_t  s_batteryChemistry = 0x60;   // 0 = Li-Ion, 0x20 = NCR, 0x60 = LiFePO4
    constexpr float s_resistSensor = 0.01;          // current sense resistor, currently non-default values might lead to problems
    constexpr bool s_vCharge = false;                   // true if charge voltage is greater than 4.275V
#endif

// enable I2C if necessary
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE) || defined(MEASURE_BATTERY_MAX17055)
    #define I2C_2_ENABLE
#endif

// (optinal) Headphone-detection (leave unchanged if in doubts...)
#ifdef HEADPHONE_ADJUST_ENABLE
    constexpr uint16_t headphoneLastDetectionDebounce = 1000; // Debounce-interval in ms when plugging in headphone
#endif

// Seekmode-configuration
constexpr uint8_t jumpOffset = 30;                            // Offset in seconds to jump for commands CMD_SEEK_FORWARDS / CMD_SEEK_BACKWARDS

// (optional) Topics for MQTT
#ifdef MQTT_ENABLE
    constexpr uint16_t mqttRetryInterval = 60;                // Try to reconnect to MQTT-server every (n) seconds if connection is broken
    constexpr uint8_t mqttMaxRetriesPerInterval = 1;          // Number of retries per time-interval (mqttRetryInterval). mqttRetryInterval 60 / mqttMaxRetriesPerInterval 1 => once every 60s
    #define DEVICE_HOSTNAME "ESP32-ESPuino"         // Name that is used for MQTT
    constexpr const char topicSleepCmnd[] PROGMEM = "Cmnd/ESPuino/Sleep";
    constexpr const char topicSleepState[] PROGMEM = "State/ESPuino/Sleep";
    constexpr const char topicRfidCmnd[] PROGMEM = "Cmnd/ESPuino/Rfid";
    constexpr const char topicRfidState[] PROGMEM = "State/ESPuino/Rfid";
    constexpr const char topicTrackState[] PROGMEM = "State/ESPuino/Track";
    constexpr const char topicTrackControlCmnd[] PROGMEM = "Cmnd/ESPuino/TrackControl";
    constexpr const char topicLoudnessCmnd[] PROGMEM = "Cmnd/ESPuino/Loudness";
    constexpr const char topicLoudnessState[] PROGMEM = "State/ESPuino/Loudness";
    constexpr const char topicSleepTimerCmnd[] PROGMEM = "Cmnd/ESPuino/SleepTimer";
    constexpr const char topicSleepTimerState[] PROGMEM = "State/ESPuino/SleepTimer";
    constexpr const char topicState[] PROGMEM = "State/ESPuino/State";
    constexpr const char topicCurrentIPv4IP[] PROGMEM = "State/ESPuino/IPv4";
    constexpr const char topicLockControlsCmnd[] PROGMEM ="Cmnd/ESPuino/LockControls";
    constexpr const char topicLockControlsState[] PROGMEM ="State/ESPuino/LockControls";
    constexpr const char topicPlaymodeState[] PROGMEM = "State/ESPuino/Playmode";
    constexpr const char topicRepeatModeCmnd[] PROGMEM = "Cmnd/ESPuino/RepeatMode";
    constexpr const char topicRepeatModeState[] PROGMEM = "State/ESPuino/RepeatMode";
    constexpr const char topicLedBrightnessCmnd[] PROGMEM = "Cmnd/ESPuino/LedBrightness";
    constexpr const char topicLedBrightnessState[] PROGMEM = "State/ESPuino/LedBrightness";
    constexpr const char topicWiFiRssiState[] PROGMEM = "State/ESPuino/WifiRssi";
    constexpr const char topicSRevisionState[] PROGMEM = "State/ESPuino/SoftwareRevision";
    #ifdef BATTERY_MEASURE_ENABLE
        constexpr const char topicBatteryVoltage[] PROGMEM = "State/ESPuino/Voltage";
        constexpr const char topicBatterySOC[] PROGMEM     = "State/ESPuino/Battery";
    #endif
#endif

// !!! MAKE SURE TO EDIT PLATFORM SPECIFIC settings-****.h !!!
#if (HAL == 1)
    #include "settings-lolin32.h"                       // Contains all user-relevant settings for Wemos Lolin32
#elif (HAL == 2)
    #include "settings-espa1s.h"                        // Contains all user-relevant settings for ESP32-A1S Audiokit
#elif (HAL == 3)
    #include "settings-lolin_d32.h"                     // Contains all user-relevant settings for Wemos Lolin D32
#elif (HAL == 4)
    #include "settings-lolin_d32_pro.h"                 // Contains all user-relevant settings for Wemos Lolin D32 pro
#elif (HAL == 5)
    #include "settings-ttgo_t8.h"                       // Contains all user-relevant settings for Lilygo TTGO T8 1.7
#elif (HAL == 6)
    #include "settings-complete.h"                      // Contains all user-relevant settings for ESPuino complete
#elif (HAL == 7)
    #include "settings-lolin_d32_pro_sdmmc_pe.h"        // Pre-configured settings for ESPuino Lolin D32 pro with SDMMC + port-expander (https://forum.espuino.de/t/espuino-minid32pro-lolin-d32-pro-mit-sd-mmc-und-port-expander-smd/866)
#elif (HAL == 8)
    #include "settings-azdelivery_sdmmc.h"              // Pre-configured settings for AZ Delivery ESP32 NodeMCU / Devkit C (https://forum.espuino.de/t/az-delivery-esp32-nodemcu-devkit-c-mit-sd-mmc-und-pn5180-als-rfid-leser/634)
#elif (HAL == 9)
    #include "settings-lolin_d32_sdmmc_pe.h"            // Pre-configured settings for ESPuino Lolin D32 pro with SDMMC + port-expander (https://forum.espuino.de/t/espuino-minid32-pro-lolin-d32-pro-mit-sd-mmc-und-port-expander-smd/866)
#elif (HAL == 99)
    #include "settings-custom.h"                        // Contains all user-relevant settings custom-board
#endif

//#define ENABLE_ESPUINO_DEBUG                            // Needs modification of platformio.ini (https://forum.espuino.de/t/rfid-mit-oder-ohne-task/353/21); better don't enable unless you know what you're doing :-)
#endif //settings_override

#endif

settings-azdelivery_sdmmc.h

#ifndef ESPUINO_SETTINGS_CUSTOM_H
#define ESPUINO_SETTINGS_CUSTOM_H
#include „Arduino.h“

//######################### INFOS ####################################
/* This is a PCB-specific config-file for *AZ Delivery ESP32 NodeMCU/Devkit C with SD_MMC and PN5180*.
PCB: https://github.com/biologist79/ESPuino/blob/4d13e93976cf07802c9cd6bce87ee85fbb88b4f1/PCBs/AZDelivery_ESP32_NodeMCU/gerber/gerber_rev2.zip
Forum: https://forum.espuino.de/t/az-delivery-esp32-nodemcu-devkit-c-mit-sd-mmc-und-pn5180-als-rfid-leser/634
Infos: https://www.amazon.de/AZDelivery-NodeMCU-Development-Nachfolgermodell-ESP8266/dp/B074RGW2VQ
Schematics PCB: https://github.com/biologist79/ESPuino/blob/4d13e93976cf07802c9cd6bce87ee85fbb88b4f1/PCBs/AZDelivery_ESP32_NodeMCU/pictures/Schematics_rev2.pdf
Caveats: Battery-monitoring is not available and SD ist SD_MMC only
Status:
    tested with PN5180 + SD_MMC (by biologist79)
*/

//################## GPIO-configuration ##############################
// Please note: GPIOs 34, 35, 36, 39 are input-only and don't have pullup-resistors.
// So if connecting a button to these, make sure to add a 10k-pullup-resistor for each button.
// Further infos: https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
#ifdef SD_MMC_1BIT_MODE
    // uSD-card-reader (via SD-MMC 1Bit)
    //
    // SD_MMC uses fixed pins
    //  (MOSI)    15  CMD
    //  (SCK)     14  SCK
    //  (MISO)     2  D0
#else
    // SPI-SD IS NOT SUPPORTED BY THIS PCB - DON'T USE INTERNAL SD-READER!
    #define SPISD_CS                    99          // GPIO for chip select (SD)
    #ifndef SINGLE_SPI_ENABLE
        #define SPISD_MOSI              99          // GPIO for master out slave in (SD) => not necessary for single-SPI
        #define SPISD_MISO              99          // GPIO for master in slave ou (SD) => not necessary for single-SPI
        #define SPISD_SCK               99          // GPIO for clock-signal (SD) => not necessary for single-SPI
    #endif
#endif

// RFID (via SPI)
#define RST_PIN                         99          // Not necessary for RC522 but has to be set anyway; so let's use a dummy-number
#define RFID_CS                         21          // GPIO for chip select (RFID)
#define RFID_MOSI                       23          // GPIO for master out slave in (RFID)
#define RFID_MISO                       19          // GPIO for master in slave out (RFID)
#define RFID_SCK                        18          // GPIO for clock-signal (RFID)

#ifdef RFID_READER_TYPE_PN5180
    #define RFID_BUSY                   16          // PN5180 BUSY PIN
    #define RFID_RST                    22          // PN5180 RESET PIN
    #define RFID_IRQ                    39          // PN5180 IRQ PIN (only needed for low power card detection)
#endif
// I2S (DAC)
#define I2S_DOUT                        25          // Digital out (I2S)
#define I2S_BCLK                        27          // BCLK (I2S)
#define I2S_LRC                         26          // LRC (I2S)

// Rotary encoder
#ifdef USEROTARY_ENABLE
    #define REVERSE_ROTARY                        // To reverse encoder's direction; switching CLK / DT in hardware does the same
    #define ROTARYENCODER_CLK           34          // rotary encoder's CLK
    #define ROTARYENCODER_DT            35          // (set to 99 to disable; 0->39 for GPIO)
#endif

// Amp enable (Not supported)
//#define GPIO_PA_EN                      112         // To enable amp for loudspeaker (GPIO or port-channel)
//#define GPIO_HP_EN                      113         // To enable amp for headphones (GPIO or port-channel)

// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON                     13          // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON                 36          // Button 1: GPIO to detect previous
#define PAUSEPLAY_BUTTON                 5          // Button 2: GPIO to detect pause/play
#define ROTARYENCODER_BUTTON            32          // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#define BUTTON_4                        99          // Button 4: unnamed optional button
#define BUTTON_5                        99          // Button 5: unnamed optional button

// Channels of port-expander can be read cyclic or interrupt-driven. It's strongly recommended to use the interrupt-way!
// Infos: https://forum.espuino.de/t/einsatz-des-port-expanders-pca9555/306
#ifdef PORT_EXPANDER_ENABLE
    // Not supported
#endif

// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
    // Not supported
#endif

// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
#define WAKEUP_BUTTON                   ROTARYENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.

// (optional) Power-control
#define POWER                           17          // GPIO used to drive transistor-circuit, that switches off peripheral devices while ESP32-deepsleep
#ifdef POWER
    //#define INVERT_POWER                          // If enabled, use inverted logic for POWER circuit, that means peripherals are turned off by writing HIGH
#endif

// (optional) Neopixel
#define LED_PIN                         12          // GPIO for Neopixel-signaling

// (optinal) Headphone-detection
#ifdef HEADPHONE_ADJUST_ENABLE
    //#define DETECT_HP_ON_HIGH                       // Per default headphones are supposed to be connected if HT_DETECT is LOW. DETECT_HP_ON_HIGH will change this behaviour to HIGH.
    #define HP_DETECT                    4          // GPIO that detects, if there's a plug in the headphone jack or not
#endif

// (optional) Monitoring of battery-voltage via ADC
#ifdef MEASURE_BATTERY_VOLTAGE
    #define VOLTAGE_READ_PIN            99          // GPIO used to monitor battery-voltage.
    constexpr float referenceVoltage = 3.3;         // Voltage between 3.3V and GND-pin in battery-mode (disconnect USB!)
    constexpr float offsetVoltage = 0.0;            // If voltage measured by ESP isn't 100% accurate, you can add an correction-value here
#endif

// (Optional) remote control via infrared
#ifdef IR_CONTROL_ENABLE
    #define IRLED_PIN                   33              // GPIO where IR-receiver is connected (only tested with VS1838B)
    #define IR_DEBOUNCE                 200             // Interval in ms to wait at least for next signal (not used for actions volume up/down)

    // Actions available. Use your own remote control and have a look at the console for "Command=0x??". E.g. "Protocol=NEC Address=0x17F Command=0x68 Repeat gap=39750us"
    // Make sure to define a hex-code not more than once as this will lead to a compile-error
    // https://forum.espuino.de/t/neues-feature-fernsteuerung-per-infrarot-fernbedienung/265
    #define RC_PLAY                     0x68            // command for play
    #define RC_PAUSE                    0x67            // command for pause
    #define RC_NEXT                     0x6b            // command for next track of playlist
    #define RC_PREVIOUS                 0x6a            // command for previous track of playlist
    #define RC_FIRST                    0x6c            // command for first track of playlist
    #define RC_LAST                     0x6d            // command for last track of playlist
    #define RC_VOL_UP                   0x1a            // Command for volume up (one step)
    #define RC_VOL_DOWN                 0x1b            // Command for volume down (one step)
    #define RC_MUTE                     0x1c            // Command to mute ESPuino
    #define RC_SHUTDOWN                 0x2a            // Command for deepsleep
    #define RC_BLUETOOTH                0x72            // Command to enable/disable bluetooth
    #define RC_FTP                      0x65            // Command to enable FTP-server
#endif

#endif

Muss jetzt leider weg aber schau mal, dass keine GPIOs doppelt belegt sind. Weil an sowas liegt das oft.

Kommando 6 ist FIRSTTRACK: ESPuino/src/values.h at 4d13e93976cf07802c9cd6bce87ee85fbb88b4f1 · biologist79/ESPuino · GitHub
Gemäß deiner Config liegt CMD_FIRSTTRACK auf Button 1 (PREVIOUS_BUTTON) und zwar dann, wenn man ihn lange drückt.

Ich habe kürzlich was an dieser Sache geändert. Muss das lokal nochmal testen, ob diese Änderung ggf daran schuld ist.

Hallo,
gibt es alternativen zu den beiden MOSFETS?

  • 1x IRL3103 (N-channel MOSFET)
  • 1x NDP6020P (P-channel MOSFET)

Die scheinen ja nicht mehr produziert zu werden.

Hi,

die kann ich dir für 1eur zzgl 1eur Versand schicken.
Alternativen gibt es bestimmt, aber weiß ich jetzt ad hoc nicht.

VG.