Bernhard hatte das ESP32 Audio Kit hier vorgestellt:
ESP32 Boards für Internetradio und Audioanwendungen
und ich hatte bemerkt dass ich auch welche bestellt habe und mich damit beschäftigen wolle.
Dass ich heute erste Erfolge damit vermelden kann verdanke ich vor allem
einer Diskussion zwischen verschiedenen Programmierern (u.a.
Wolle/Schreibfaul) und einem Entwickler/Distributor (?) aus ShenZhen.
hier nachzulesen:
Ai-Thinker-Open / ESP32-A1S-AudioKit
dabei klärten sich all meine Probleme für eine erste Tonausgabe. Das
erste Problem ist dass der verwendete DAC, der nicht einsichtbar unter
der ESP32-Haube steckt, sich bei neueren boards bei gleicher Rev.Nr. 2.2
von einem AC101 auf einen ES8388 geändert hat und daher eine andere
library benötigt. Dann gibt es bei den boards unterschiedliche pinouts.
Und letztendlich gibt es auch noch einen Aktivierungs-Pin um die NF aus
dem "deep sleep" zu holen.
hier beschreibe ich mal speziell meine boards, andere build-Nummern können abweichen!
meine boards tragen die Bezeichnung "ESP32 Audio Kit V2.2 / 3318" Wobei
die 3318 massgeblich für eine eindeutige Indentifizierung ist.
Hersteller des board ist AI Thinker. Die genaue Bezeichnung des
ESP-Modules lautet "ESP32-A1S", wobei der Zusatz A1S nur aussagt dass
ein per I2S angesteuerter DAC eingebaut ist, aber nicht welcher chip
dafür verwendet wurde. In meinem Fall ein ES8388. Der ESP ist eine
WROVER Ausführung, was bedeutet dass er mit 4 MB SPI RAM und 8 MB PSRAM
ausgestattet ist. Das ist wichtig bei der Baustein-Definition in der
Entwicklungsumgebung und bringt den Vorteil eines Puffers bei
streaming-Anwendungen. Der chip ist weiterhin mit bluetooth und
2,4GHz-WLAN ausgestattet.
Hier das Pinout:
#define SD_CS 21
// GPIOs for SPI
#define SPI_MOSI 13
#define SPI_MISO 12
#define SPI_SCK 14
// I2S GPIOs
#define I2S_SDOUT 26
#define I2S_BCLK 5
#define I2S_LRCK 25
ausser der boot- und reset-Taste gibt es noch 6 weitere programmierbare
Microtasten. Dabei ist es wichtig zu wissen dass diese mit Kondensatoren
zur Entprellung versehen sind, was zu berücksichtigen ist wenn man die
dazugehörigen gpio's zweckentfremden will.
Das board beinhaltet weiterhin 2 Mikrofone, einen line-out, einen
line-in, 2 Stück Class D Audio Amplifier vom Typ NS4150, einen SD-card
reader und eine Ladeschaltung für eine 3,7 Lithium Zelle. Ein 5fach
Dip-Schalter ist zwar per Platinenaufdruck näher spezifiziert, aber eine
richtige Erklärung über den Zweck konnte ich noch nicht finden.
Ladebuchse und UART-Buchse (beides Micro-USB) laden ein zum Verwechseln!
Die boards sind bei ebay unter dem Suchbegriff "Audio Kit ESP32 Audio
Entwicklungs Platine" für unter 20 Euro/Stk. zu bekommen inkl.
kostenlosem Versand aus China.
Software:
erste Versuche, um das board kennenzulernen, habe ich mit einem Sketch
von Schreibfaul unter der Arduino IDE und deren seriellem Monitor
erfolgreich durchgeführt. Schreibfaul gibt im Quellcode auch die links
für die benötigten libraries an. Bzw. mein erster erfolgreicher Sketch
ist ein example einer library. Hier zu finden:
schreibfaul1 / es8388
es wird einfach nur ein webradio-stream abgespielt. Jetzt wo ich die hardware kenne will ich demnächst weitermachen mit dem Audio Development Framework (ESP-ADF) und der toolchain.
Zitat Bernhard:
Das ist halt ein typischer uC mit WiFi an dem für Audiozwecke ein paar
unterschiedliche Codecs + Class D Verstärker adaptiert wurden. Das ist
ein typisches Bastelboard der Maker- und IoT Szene (offenes Design, die
PCB kann man sich selbst herstellen (lassen), das Design ist im Netz) .
Vergleichbares gibt es auch für andere Anwendungsbereiche als Audio. Als
Grundlage gar für industrielle Internetradios waren diese Bord nicht
gedacht. Was die Maker-Szene mit diesen Boards eher im Sinn hat, sind
diese Dienste die auch von SDKs unterstützt werden: Voice recognition
and integration with online services such as Alexa, DuerOS, ... + KI
Integration in Audioanwendung. Da spielt die Musik, nicht bei
"popeligem" Internetradio mit denen wir uns beschäftigen. Das ist fast
schon eine "Abfallanwendung".
Klar das bei solchen offenen Projekten die Chinesen mit verschiedenen
fertigen Boards den Markt überschwemmen. Das findet man auch in der
Arduinowelt wieder.
Alles was irgendwie auf Arduino (ATmega) war wird nochmal auf ESP32 aufgewärmt und selbiges nochmal für STM32.
Zitat-Ende
ich hab festgestellt dass meine obige pinout-Tabelle nur für den
I2S-Bereich passt. Mehr hab ich ja auch für die einfache Ausgabe eines
webstreams nicht gebraucht.
Nun wollte ich das Abspielen von SD-Karte testen. Ich stellte dann fest
dass die pin's für MISO, MOSI, CD_CS und PA_EN nicht stimmten.
Mit dieser Kombination funktioniert sowohl Radio als auch SD-card. I2C
hab ich mal noch weggelassen weil noch nicht gegengeprüft:
#define SD_CS 13
// GPIOs for SPI
#define SPI_MOSI 15
#define SPI_MISO 2
#define SPI_SCK 14
// I2S GPIOs
#define I2S_SDOUT 26
#define I2S_BCLK 5
#define I2S_LRCK 25
was jetzt auch funktioniert ist das Vorlesen eines Textes mit der connecttospeech-Funktion:
Zitat Norbert:
nach viel Lesen, ausgiebigem Programmieren / Testen und letztendlich
auch Löten, ist es mir gelungen ein TFT_Display zum Mitspielen zu
bewegen.
Als Vorlage dienen Programme und Bibliotheken von Wolles GitHub - Seiten, speziell sein Simple Webradio und sein ES8388 Beispielprojekt.
Danke für die sehr gute Arbeit!
Aufgrund der o. a. Dokumentation habe ich in einem ersten Schritt ein
Webradio "nachgebaut", bei welchem mit den 4 Tasten KEY3 bis KEY6 eine
Senderwahl bzw. Verstellung der Lautstärke möglich ist.
Es stellte sich ausserdem heraus, dass es Unterschiede bei gleicher
Platinen V2.2 und Revisionsnummer 3378 für die GPIO Belegung des I2C Bus
gibt.
Jupps Version benutzt GPIO 18 und 23 während GPIO 32 und 33 bei meiner Version zum Einsatz kommen.
Es ist also Vorsicht beim Nachbau (besser Messen / Testen) angesagt.
Im zweiten Schritt ging es an den Anschluß eines TFT-Displays. Hier habe
ich mich ebenfalls an Wolles Vorgehensweise orientiert, da sie
plausibel ist.
Im Unterschied zu dessen Projekt kommt hier ein Display mit ILI9341 Controller zum Einsatz.
Anbei ein paar Bilder:
Zitat-Ende
ich fasse mal den aktuellen Stand zusammen.
Aufgrund der unterschiedlichen gpio-Belegungen hat sich eine Tabelle als
sehr hilfreich erwiesen. Die erste Spalte zeigt die Belegung meiner
beiden Platinen, die 2. Spalte die Belegung der Platinen von Norbert.
Die weiteren Spalten zeigen die Belegung von unterschiedlichen fertigen
templates von Karadio. Keine davon passt zu unseren Platinen. Also mit
Karadio kommen wir nur weiter wenn wir selbst boards definieren können.
So weit bin zumindest ich immer noch nicht.
audiokit-karadio.pdf (Größe: 35,75 KB / Downloads: 28)
meine Versuche mit Edzelf, der in der Version V2.0 ja mittlerweile
I2S-Unterstützung eingebaut hat, verliefen stumm. Möglich dass unser
DAC, der ES8388, von der Helix-Library nicht unterstützt wird.
Zitat Edzelf:
Zitat:..Works with MAX98357A (3 Watt amplifier with DAC), connected three lines (DOUT, BLCK, LRC) to I2S. For stereo are two MAX98357A necessary. AudioI2S works with UDA1334A (Adafruit I2S Stereo Decoder Breakout Board) and PCM5102A. Other HW may work but not tested. Plays also icy-streams and GoogleTTS..
Ich fand aber auch keine Möglichkeit bei Edzelf V2.0 die I2S-gpios zu
definieren. Trotzdem an der Stelle noch ein Hinweis wie man das
webinterface ins spiffs lädt, wenn man so wie ich immer noch die Arduino
IDE benutzt:
Arduino ESP32 filesystem uploader
Was funktioniert bis jetzt überhaupt?
zum Laufen hatte ich bis jetzt nur einen schreibfaul Beispielcode
sowie den weiter oben gezeigten code von Norbert. Beide aktuell noch
mit fest eincodierter Radiostation und Lautstärke. Die Umlöterei auf ein
SPI-Display erspare ich mir. Meine Variante des Audio-Kit hat zumindest
noch die I2C-Ports zugänglich, die Variante von Norbert leider nicht.
Noch Hinweise zum upload des code aus der IDE. Als board sollte ein
wrover Modul definiert sein, und falls zu wenig Speicherplatz gemeldet
wird als partition scheme: Huge App
Danke an Norbert, alleine hätte ich das nicht so erarbeiten können.
Zitat Norbert:
Hallo Josef, Jupp und Mitleser,
Wolfgang entwickelt in den letzten Wochen/Monaten sehr aktiv an der Software und hat so "Einiges" geändert.
Die neueste Version eines Testprogramms findet man hier.
Ich würde als Erstes Wolle's Sketch mit dem Board Typ 3378 ausprobieren.
Halt - noch etwas:
aktuell benutzt Du Pin 23 und 18 für den I2C
#define IIC_CLK 23
#define IIC_DATA 18
während in "meinem" Sketch Pin 32 / 33 verwendet werden
I2C GPIOs
#define IIC_CLK 32
#define IIC_DATA 33
Teste das bitte.
Zutat Ende
wir wissen dass es trotz gleicher Bezeichnung mindestens 2 Hardware-Varianten gibt:
Norbert und Bernhard haben die 32/33-Variante und ich und Josef die 18/23 Version. Beide Platinenausführungen nennen sich 3378.
Keine Kommentare:
Kommentar veröffentlichen