TonUINO auf dem Esp32 Nano

Hallo @HaSch ,

Danke für die Rückmeldung. Dann liegt es vermutlich an meinen selbst gelöteten Platinen (Kopfhörer und/oder Tonuino). Für mich kein Problem das im Code via html anzupassen für meine „Lötkünste“.

Wegen der Web GUI: Das war nicht meine Frage. Selbstverständlich kann man die anpassen und das klappt auch wunderbar; - allerdings sind die max Werte in der WEB GUI anders als im „manuellen“ Admin Menü. Wollte nur darauf hinweisen und fände es cool, wenn die „30“ auch in der Weg GUI machbar wären. (Wo sind eigentlich diese max. Werte im Code hinterlegt?)

Die Erkennung ob ein Kopfhörer eingesteckt ist, erfolgt über ein Signal, das mit Hilfe der Kontakte in der Kopfhörerbuchse erzeugt wird. Dieses Signal wird an einen Eingang des Prozessorboards gelegt. Die Software erledigt den Rest. Wenn diese spezielle Beschaltung nicht vorhanden ist, wird unabhängig davon ob ein KH gesteckt ist oder nicht , ein gesteckter KH als Zustand erkannt. In der Constants,hpp ist das der Part Jackdetekt. Hier muss die Einstellung auf Lowaktiv umgestellt werden. Dadurch geht das Signal auf Lautsprecher (KH nicht gesteckt .

1 „Gefällt mir“

Nein, kann man nicht, da der Wandlerchip vom DF-Player (alle Chipsätze) nur Abstufung von 0 - 30 zulässt.

Du solltest das aber nicht im html Part anpassen, sondern unbedingt in der Datei constants.hpp wie @Thomas-Lehnert das oben beschrieben hat.

1 „Gefällt mir“

Hallo @Darnok
ich hänge hier mal den Schaltplan dran, auf dem du sehen kannst< wie die Umschaltung Kopfhörer/Lautsprecher funktioniert. Bei mir ist das auf der Traegerplatine integriert. Man kann sich das aber auch auf einer kleinen Universalplatine extern aufbauen.
Schaltung_V4.pdf (2,9 MB)

Falls du keine smd Bauteile verwenden kannst/willst, musst du bei der Auswahl der Mosfet darauf achten, dass sie eine möglichst niedrige Schwellenspannung UGSth und einen möglichst gerinegen Durchgangswiderstand R DS ON haben.
UGSth < 2V RDS On < 100 milli Ohm. Und du musst N-Fet nehmen.
Diese Schaltung erfüllt 3 Aufgaben. Stummschaltung des Lautsprechers beim Start zur Unterdrückung des Einschaltgeräusches vom DF-Player.
Erkennung des Kopfhörers und Stummschaltung des Lautsprechers bei gestecktem Kopfhörer
Stummschaltung des Lautsprechers bei aktiver Bluetoothverbindung mit einer Bluetoothbox.

Danke @Thomas-Lehnert

Folgende Änderung wurde gemacht (auch schon vorher) in der constants.hpp:

Leider immer noch die Kophörerzuordnung in der WebGUI bei Lautsprecher und umgekehrt.
Die Schaltung von Lautsprecher zu Kophörer funktioniert hardwaremäßig.
Kopfhörerstecker rein: Lautsprecher stumm
Kopfhörerstecker raus: Lautsprecher an

Oder habe ich jetzt einen vollkommen verdrehten Kopf?

Danke auch für den Schaltplan, den ich mal in Ruhe lesen muss.
Meine Variante hier ist die selbst gelötete Platine, die ich auf Arduino Nano Original Basis gemacht habe. Ich tausche quasi nur die Mikrokontroller aus, welche mit unterschiedlichen Codes bestückt sind (funktioniert ja auch grundsätzlich).
Gestern hatte ich noch so eine Überlegung, ob ich vielleicht auch die Pinzuordnung vom Kopfhöreranschluss an Lautsprecher / DFPlayer vertauscht habe. Könnte es das auch sein? Weil die Funktionen ja grundsätzlich soweit funktionieren.

Deswegen auch (@Boerge1) die Idee mit dem html, weil die Kopfhörervariante genauso funktioniert, wie das mit dem Kopfhörer funktionieren soll; - nur halt mit Lautsprecher Infos auf der WebGUI; - und umgekehrt (siehe oben).
ABER ich gebe Dir natürlich Recht: Schön wäre es, wenn es klappt, wie es halt klappen sollte.

Werde das mal am Wochenende checken.

Danke vorab an Euch.

Das Thema Kopfhörer an Deiner Platine beschäftigt uns ja schon seit einer Weile und ist m. M. auch hinsichtlich des Pegels noch nicht befriedigend gelöst.

In diesem Zusammenhang solltest Du nachmessen, ob bei gestecktem Kopfhörer ein sauberes Masse-Signal an D8 vom Arduino gegeben wird und ohne Kopfhörer der Anschluss auf HIGH (also fast +5 V) gezogen wird. Nicht dass Du da vielleicht einen „Dreher“ beim Buchsenanschluss gebaut hast.

Wenn irrtümlich Masse an D8 liegt, wenn kein Kopfhörer gesteckt ist, hast Du genau das beschriebene Problem.

So; - abendliche Radfahrten, bzw. Spaziergänge mit Frau tun gut.

Mir kam eine Idee und die habe ich aufgund des Hinweises von @Thomas-Lehnert und @NoBl einfach mal umgesetzt:

Einfach den gesetzten acitveLow auf activeHigh.

Effekt: Alles passt! Problem gelöst

Spricht von den Experten was dagegen?

1 „Gefällt mir“

Ja, so ist es richtig.

An Alle Experten hier (@NoBl, @Boerge1, @Thomas-Lehnert, und alle anderen hier):

Einfach super! Das Teil „wurmelt“ richtig gut und zusammen mit dem 3D Druck ein schönes Einzelstück. Mal sehen, was der Enkel sagt.

Vielen, vielen Dank!

2 „Gefällt mir“

Welche 3D-Druckvorlage hast du denn genommen?

Hi @HaSch : Alles mit freecad selbst gemacht. Exportiert in stl Dateien und gedruckt mit Hilfe von dem Cura slicer die gcode Dateien auf dem Anycubic Vyper.

Weil der Lautsprecher ein ausgeschlachtetes, wiederverwertetes Teil ist, die Platine für den Tonuino und auch die Platine für den Kopfhörer, genauso wie die Akkusachen selbst gelötet / gemacht sind und die anderen Teile teilweise vom Ali aus China (Neopixel, encoder und auch die Arcade Schaltet) in unterschiedlichen Größen oder Ausfertigungen ankommen, konnte ich keine Vorlage verwenden, -macht in so einer Situation keinen Sinn.

Mache das auch bei anderen Projekten so.

Sorry, wenn das vermutlich Dich nicht besonders hilft.

Nachtrag: Hier Bilder:

und hier die Rückseite aufgeschraubt (mit viel Heißleim und Schrauben):

Nochmals: Ohne die Teilnehmer hier wäre das nicht möglich gewesen.

1 „Gefällt mir“

Ist erledigt. Jetzt gibt ein Button zur Auswahl eines Files und ein Upgrade Button.

Version: 3.3.0 02.07.25

2 „Gefällt mir“

Das ist sehr gut so :+1:

Beim Testen habe ich zusätzlich (versuchsweise) die Dateien „webservice.cpp“ und „webservice_pages.cpp“ etwas „aufgebohrt“, so dass ich bei „System Info“ nun auch die in der „constants.hpp“ definierte Konfiguration angezeigt bekomme:

1 „Gefällt mir“

Hier sind meine Ergänzungen in der „webservice.cpp“ ab Zeile 1037

  else if(id==F("aboutver2")){
  #ifdef  TonUINO_Esp32
    p = FPSTR("Nano ESP32, ");
  #endif
  #ifdef THREEBUTTONS
    p = p + FPSTR("3 Buttons");
  #endif
  #ifdef FIVEBUTTONS
    p = p + FPSTR("5 Tasten");
  #endif
  #ifdef BUTTONS3X3
    p = p + FPSTR("3 x 3 Buttons Matrix");
  #endif

  #ifdef DFPlayerUsesHardwareSerial
    p = p + FPSTR("<br>DF-Player uses HW Serial, ");
  #endif
  #ifdef SerialInputAsCommand
    p = p + FPSTR("Serial Input as Command, ");
  #endif

  #ifdef DFMiniMp3_T_CHIP_GD3200B
    p = p + FPSTR("<br>DF-Player Chip GD3200B, ");
  #endif
  #ifdef DFMiniMp3_T_CHIP_MH2024K16SS
    p = p + FPSTR("<br>DF-Player Chip MH2024K16SS, ");
  #endif
  #ifdef DFMiniMp3_T_CHIP_LISP3
    p = p + FPSTR("<br>DF-Player Chip LISP3, ");
  #endif
  #ifdef DFMiniMp3_T_CHIP_MH2024K24SS_MP3_TF_16P_V3_0
    p = p + FPSTR("<br>DF-Player Chip MH2024K24SS, ");
  #endif
  #ifdef DFMiniMp3_T_CHIP_Mp3ChipIncongruousNoAck
    p = p + FPSTR("<br>DF-Player Chip Standard, ");
  #endif

  #ifdef DISABLE_SHUTDOWN_VIA_BUTTON
    p = p + FPSTR("DISABLE SHUTDOWN VIA BUTTON, ");
  #endif

  #ifdef ROTARY_ENCODER
    p = p + FPSTR("<br>Rotary Encoder, ");
  #endif
  #ifdef ROTARY_ENCODER_LONGPRESS
    p = p + FPSTR("+ Long Press, ");
  #endif
  #ifdef POTI
    p = p + FPSTR("<br>Potentiometer, ");
  #endif

  #ifdef NEO_RING
    p = p + FPSTR("<br>Neo-Pixel, ");
  #endif
  #ifdef NEO_RING_EXT
    p = p + FPSTR("extended Control, ");
  #endif
  #ifdef NEO_RING_2
    p = p + FPSTR("2nd Neo-Pixel, ");
  #endif

  #ifdef SPKONOFF
    p = p + FPSTR("<br>Speaker Off, ");
  #endif

  #ifdef HPJACKDETECT
    p = p + FPSTR("Jack Detection, ");
  #endif

  #ifdef DONT_ACCEPT_SAME_RFID_TWICE
    p = p + FPSTR("<br>DONT ACCEPT SAME RFID TWICE, ");
  #endif
  #ifdef RESUME_ON_SAME_RFID
    p = p + FPSTR("<br>RESUME_ON_SAME_RFID, ");
  #endif

  #ifdef REPLAY_ON_PLAY_BUTTON
    p = p + FPSTR("<br>REPLAY_ON_PLAY_BUTTON, ");
  #endif

  #ifdef QUIZ_GAME
    p = p + FPSTR("<br>Quiz Game, ");
  #endif
  #ifdef MEMORY_GAME
    p = p + FPSTR("<br>Memory Game, ");
  #endif

  #ifdef STORE_LAST_CARD
    p = p + FPSTR("<br>STORE_LAST_CARD, ");
  #endif
  #ifdef SPECIAL_START_SHORTCUT
    p = p + FPSTR("<br>SPECIAL_START_SHORTCUT, ");
  #endif

  #ifdef BT_MODULE
    p = p + FPSTR("<br>Bluetooth Support, ");
  #endif


  #ifdef BAT_VOLTAGE_MEASUREMENT
    p = p + FPSTR("<br>BAT_VOLTAGE_MEASUREMENT, ");
  #endif

  #ifdef USE_POLOLU_SHUTDOWN
    p = p + FPSTR("<br>USE_POLOLU_SHUTDOWN, ");
  #endif
  #ifdef USE_TRAEGER_PLATINE_SHUTDOWN
    p = p + FPSTR("<br>USE_TRAEGER_PLATINE_SHUTDOWN, ");
  #endif

  #if defined MRFC522_RX_GAIN
    p = p + FPSTR("<br>MFRC Gain = ,");
  #endif


  #ifdef MODIFICATION_CARD_JUKEBOX
    p = p + FPSTR("<br>Jukebox, ");
  #endif

Beim MRFC522 ist es mir nicht gelungen, den Verstärkungsfaktor aus der Variablen auszulesen/auszuwerten,

In der „webservice_pages.cpp“ sieht das dann so aus, wobei die Variable „aboutver2“ über die obigen Zeilen „zusammengebaut“ wird:

<h2>TonUINO Info</h2>
<dt>TonUINO TNG Version</dt><dd>%aboutver%</dd>
<dt>TonUINO TNG Konfiguration</dt><dd>%aboutver2%</dd>
<dt>Arduino</dt><dd>%aboutarduinover%</dd>
<dt>Build date</dt><dd>%aboutdate%</dd>

Professionell redigiert wäre es m. M. nach eine sinnvolle Erweiterung.
Leistung und Speicherplatz des Nano ESP32 geben das mit Leichtigkeit her.

1 „Gefällt mir“

Ja, das sieht doch ganz gut aus.
Ich werde das noch ein bisschen überarbeiten und übernehmen.

2 „Gefällt mir“

Ist eingearbeitet.
Wenn es dann keine weiteren Bemerkungen oder Wünsche gibt, dann würde ich noch diese Woche mergen und ein neues Release erstellen.

2 „Gefällt mir“

Die Konfiguration ist genau so ersichtlich, wie ich mir das vorgestellt habe - nun sogar mit dem Verstärkungsfaktor des Readers. :+1:

Mir persönlich würde allerdings besser gefallen, wenn die Infos aus dem „About“ Abschnitt gleich oben auf der Seite sichtbar wären, da das vermutlich für die meisten User wohl die wichtigsten Infos sein dürften.

In einer ruhigen Minute ist noch eine Frage aufgetaucht:

Kann man ev. auch noch die Anzahl der programmierten LED-Segmente der NEO-Pixels mit auslesen und anzeigen?

EDIT:
Inzwischen habe ich es bei mir so eingebaut:

    #ifdef NEO_RING
      p += "<br>Neo-Pixel (";
      p += neoPixelNumber;
      p += " x LED)";
    #endif

Ist erledigt.

V3.3.0 09.07.25

2 „Gefällt mir“