ESPMuse

Platine inkl. Gehäuse fertig :wink:
https://raspiaudio.com/muse

…interessant was es alles so gibt.

Wäre mal spannend zu wissen, welchen ESP32 die verwendet haben und welche Hardware die da so verbauen.
Wobei mir mein Neopixel-Ring schon fehlen würde :smiley:

Es gibt ein paar Bilder auf Instagram von der Platine. Zumindest der ESP32 scheint wohl ein WROVER-Modul zu sein.

Wenn man in den Quell-Code schaut, ist ein ES8388 verbaut.

…und die LIB von Wolle wird verwendet.

ja, also…man müsste natürlich noch nen LED Ring einbauen :slight_smile:

Der Extension-Port hat 4 Pins - in dem Youtube-Beispiel sind das: GND, VCC, SCL & SDA
Es sollte also möglich sein einen RFID-Reader per I2C anzubinden.
Das ist nur leider nicht ganz einfach:

Es wurde nachgelegt.

Ich hatte mal probiert Kontakt aufzunehmen- bisher ohne Erfolg.

Lieferbar ist wohl noch nichts.

Update zur Box:

Scheint jetzt weiter zu gehen.

Ich habe mich das gerade nochmal angeschaut. Was mir aufgefallen ist:

  • Die schreiben was von SPI für SD, die Pins würden allerdings schon zu SD_MMC passen.
  • GPIOs 18, 19, 4, 12, 32, 36 und 39 sind frei. Auf die ersten vier PINs würde man vermutlich SPI für RFID hängen können.
  • Die Flashgröße des WROVER ist leider nicht dokumentiert.
  • Steht irgendwo, welche Akkus man da laden kann? Nen GPIO zum Messen der Spannung gibts ja offenbar.
  • Mich würde ja mal interessieren, warum es da einen Schalter für GPIO0 gibt. Möglicherweise gibt’s kein Autoflash sondern man muss hier GPIO0 auf GND ziehen, damit man im Programming Mode landet.

Interessant auf jeden Fall :+1:.

Edit:
Mir fällt gerade ein: Die Buttons/Drehencoder würden noch fehlen für ESPuino. Das wird hier vermutlich alles bisschen eng, so dass es dann vermutlich i2c bräuchte, an das man dann RFID + Port-Expander hängt.

Gibt es dazu schon etwas neues?
Ich habe so ein Teil und würde das gerne für die Kinder herrichten.

Gibt’s denn da irgendwo ein Dokument, in dem die ganze GPIO-Belegung drinsteht? Hab’s die Tage nicht gefunden. Also dann könnte ich vielleicht nochmal was dazu sagen.

Ein komplettes Dokument nicht, allerdings hier ein Teil des Schaltplans: ESP MUSE LUXE Bluetooth speaker - ESPMUSE - Raspiaudio
Und hier ist ein Demoprojekt: Simple_Bluetooth_Speaker_ESP32/speaker.ino at master · RASPIAUDIO/Simple_Bluetooth_Speaker_ESP32 (github.com)

Der ES8388 muss wohl noch initialisiert werden.
Ich versuch mich gerade daran eine eigene CustomAudio-Klasse zu bauen, die die Funktionen der Audio-Klasse überschreibt und die entsprechenden Befehle für den ES8388 vorher und nacher sendet falls nötig.

Für ES8388 gibt’s hier Democode mit der Lib, die ESPuino verwendet: ESP32-audioI2S/ESP32_ES8388.ino at e48c95805a9dd6e006860569d5b4b20d01a568d6 · schreibfaul1/ESP32-audioI2S · GitHub
Ich würde da eigentlich erwarten, dass das gar nicht so viel Arbeit ist, das in ESPuino zu integrieren. Letztlich ist der ES8388 ein DAC, der mittels i2c gesteuert wird. Es ist halt nur unklar, wie gut sich Port-Expander und ES8388 vertragen :slight_smile:

Danke für den Link.
Ich hab das jetzt mal provisorisch eingebaut, aber es kommt immer noch nichts raus.
In dem Beispiel, wird auch audio.i2s_mclk_pin_select(I2S_MCLK); gesetzt.
Allerdings kann ich diesen Pin nicht wirklich zuordnen.
Vielleicht weißt du ja welcher das sein könnte.

Im Beispiel von Raspiaudio werden ja nur folgende für I2S definiert

#define I2S_DOUT      26
#define I2S_BCLK      5
#define I2S_LRC       25
#define I2S_DIN       35

Folgende Pins habe ich in der custom-config.h angepasst

// I2S (DAC)
    #define I2S_DOUT                        26          // Digital out (I2S)
    #define I2S_BCLK                        5          // BCLK (I2S)
    #define I2S_LRC                         25          // LRC (I2S)

// Amp enable (optional)
    #define GPIO_PA_EN                      21         // To enable amp for loudspeaker (GPIO or port-channel)

// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
    #define NEXT_BUTTON                      19         // Button 0: GPIO to detect next
    #define PREVIOUS_BUTTON                  32          // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
    #define PAUSEPLAY_BUTTON                 12          // Button 2: GPIO to detect pause/play

// (optional) Neopixel
    #define LED_PIN                         22          // 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                   27          // GPIO that detects, if there's a plug in the headphone jack or not
    #endif

EDIT: Es kommt schon was raus, nur total leise.

Hast du die Volume für den ES8388 gesetzt?

Das musst du dann in die AudioPlayer.cpp integrieren.
@Wolle hat es in seinem Beispiel auf 80 gesetzt. Die Anpassung der Lautstärke von 0 bis 21 kommt dann quasi noch an top, aber die ist in ESPuino ja integriert.

Das ist ein Takteingang. Ich glaube üblicherweise nimmt man dafür GPIO 0 am ESP32.

Ja.

Ich hab das erstmal am Anfang des AudioPlayer Tasks eingebaut:

void AudioPlayer_Task(void *parameter) {
    
    #ifdef BOARD_HAS_PSRAM
        AudioCustom *audio = new AudioCustom();
    #else
        static Audio audioAsStatic;         // Don't use heap as it's needed for other stuff :-)
        Audio *audio = &audioAsStatic;
    #endif

    #ifdef I2S_COMM_FMT_LSB_ENABLE
        audio->setI2SCommFMT_LSB(true);
    #endif

    ES8388 es;

    while (not es.begin(18, 23))
    {
        Serial.printf("Failed!\n");
        delay(1000);
    }
    snprintf(Log_Buffer, Log_BufferLength, "%s", "ES8388 OK");
    Log_Println(Log_Buffer, LOGLEVEL_NOTICE);

    es.volume(ES8388::ES_MAIN, 100);
    es.volume(ES8388::ES_OUT1, 100);
    es.volume(ES8388::ES_OUT2, 100);
    es.mute(ES8388::ES_OUT1, false);
    es.mute(ES8388::ES_OUT2, false);
    es.mute(ES8388::ES_MAIN, false);

    uint8_t settleCount = 0;
    audio->setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);

    audio->i2s_mclk_pin_select(0);

Und es ist auch dann ganz leise, wenn du die Lautstärke bis 21 hochdrehst?

Genau, das hab ich schon auf 21 stehen.

Hast Du das auch probiert? Das ist ja wohl pin 21 beim Muse.

Ja klar, hab ich ja in der Settingsdatei definiert.
Ohne das kommt garnichts raus.
Ich werd nacher mal den Beispielsketh drauf machen, nicht dass da noch ein Fehler ist.
Aber eigentlich war der bei der Auslieferung schon drauf und die Box hat funktioniert.

Hab auch schon die Register verglichen die gesetzt werden zwischen dem Demosketch und der Lib.

EDIT: Ich hab da noch was von 15db Gain gelesen wenn der GPIO 23 auf low gezogen wird. Muss ich mir mal anschauen. Hab die Box jetzt auch offen und kann mir die Platine mal genauer anschauen.

EDIT2: Das mit dem GPIO23 trifft wohl nur auf das Muse Proto zu.

Mit der Demo Firmware läuft alles, also auch die Lautstärke.
Musste allerdings die fertige bin-Datei nehmen, da der Sketch nicht so recht compilern will.
Was mir noch aufgefallen ist, ist dass die Wiedergabe nur aus einem Lautsprecher kommt.