ESP32 Audio Kit (ESP32-A1S)

Hallo @biologist
In der settings-espa1s.h ist der Pin 33 für #define VOLTAGE_READ_PIN 33 definiert . Laut Schaltung ist der Pin nicht aufgeführt und laut Datenblatt für intern I2C des AC101 benutzt . Ist das ein Fehler ? oder hast du noch eine andere Info zum A1S ?
VG

Es ist beim A1S-Devel Board nicht möglich die Batterie Spannung zu messen.
Der Pin ist primär in der Konfig enthalten, wenn z.B. der A1S auf einem angepassten Board verwendet wird.

Kann der a1s gar kein analogRead()? Ich hab’s einfach mal reingelassen, weil vielleicht bastelt sich ja jmd was dran.
Klar, die 33 muss dann angepasst werden. Also man kann es löschen, aber es frisst da auch kein Heu :grin:

Das Evaluations-Board ist dafür nicht vorgesehen . Ich hatte es auf meinem Breakout schon implementiert . Heute war es mir bei der finalen Kontolle meines complete aufgefallen und ich habe deshalb nachgefragt um ganz sicher zu gehen .

Ja das Audiokit kann das nicht. Das ist mir bewusst. Tja, ist jetzt die Frage, ob noch ein Audiokit in den Namen müsste, wenn jetzt auch angefangen wird, mit dem a1s fern vom Audiokit ESPuinos zu bauen :grin: Aber ich denke ich würde es erstmal so lassen.

Der Pin 33 ist beim A1S von außen nicht zugänglich. Ich hatte versucht den internen Pullup zu aktivieren um so die Betriebsspannung des ESP32 zu ermitteln. Das funktioniert nicht, wahrscheinlich ist der Pullup kein ohmscher Widerstand sondern eher eine Art hochohmige Spannungsquelle. Was man machen kann ist die Spannung über Pin 36 zu ermitteln. Selbst wenn die Entprell RCs der Tasten ausgelötet sind liegt dort die Betriebsspannung über einen anderen Weg an. Der ADC zeigt für Pin 36 den Wert 4095. In der 12 Bit Welt ist das der obere Anschlag und bedeutet eine Spannung >= 3,3 Volt. Tatsächlich habe ich 3.41V an Pin36 gemessen.

Die Pins 34-39 haben keinen PullUp . Deshalb nehme ich die auch gerne für Rotary , da der KY-040 PullUps an Board hat .Ich habe auf meinem Board auch Pin 36 verwendet . Ich habe die gleichen Werte ermittelt . Ich will ja so wenig zusätzliche Hardware wie möglich verwenden . Mit meinem momentanen Stand bin ich zufrieden . Kann im Moment nicht weiter weil ich noch auf Aliexpress warte .

Hi @Wolle

Ich habe meine „Forschungen“ in Richtung A1S complete aufgegeben . Der Grund ist : Ich habe leider ein fehlerhaftes Datenblatt zum A1S benutzt . Dort stand Flash 8MB und ich habe das nie überprüft und erst spät in der Konsole gesehen . Da es nur 4MB sind ist das mir wichtige OTA erledigt und ich bin zurück zum Wrover . Der Fehler hat mich ein paar Euro gekostet und viel Zeit . Aber ich habe auch wieder viel gelernt , deshalb nicht so schlimm .
Du hast ja mal auf meinen Wunsch den PT8211 implementiert . Habe den heute mal wieder hervorgekramt und zufällig etwas entdeckt , bin total verwundert . Wenn ich im Setup die Zeile audio.setI2SCommFMT_LSB(true);
einsetze funktioniert auch der PCM5201A ohne es auszukommentieren . Das ging früher nicht . Ich habe dazu etwas vom 10.4.2021 gefunden , kann es aber nicht interpretieren . Gibt es jetzt ein „autodetect“ zur Erkennung des Datenformats ?
VG

Hallo @compactflash,
das ist schon eigenartig, ich habe mienen PCM5102A mit LSB gefüttert und es geht. Ein „autodetect“ habe ich nicht eingebaut, aber vielleicht ist der DAC in der Lage anhand der Taktflanken zwischen MSB und LSB zu unterscheiden. Mein Logic-Analyzer kann das LSB Protokoll nicht auswerten, aber ich kann erkennen, dass der ESP32 das I2S Format von MSB auf LSB ändert. Wieder was dazugelernt :smiley:
vG

Hi @Wolle , ich habe das Datenblatt nochmals durchgelesen und finde dazu nichts , auch im Netz nicht . Ich bin bei Texas Instruments registriert und könnte da , wenn Interesse besteht , mal anfragen .
Vielleicht könnt ihr @biologist und @Wolle euch noch an diesen Beitrag erinnern . Ich habe das jetzt nochmal im Zusammenhang mit der LSB-Geschichte nachvollzogen . Das mein Espuino mit MAX98357 nur Mono Links gespielt hat lag an meiner Kopfhörerplatine und tritt deshalb nur in diesem Zusammenhang auf . Ich invertiere ja mit dem Mosfet Q1 die Funktion der Klinkenbuchse und habe damit bei gezogener Klinke 3.3V an Pin SD des MAX98357 . Damit ist dieser fest auf Kanal links gelegt . Dies jetzt nachträglich anzupassen ( Spannungsteiler ?? ) werde ich nicht mehr machen , weil es ja wegen der Softwareänderung nicht mehr erforderlich ist und auf meiner geplanten complete so auch nicht mehr erforderlich sein wird . Die Kopfhörerlatine wird es so nicht mehr geben .
VG

@Wolle
Gerade per Zufall festgestellt dass MAX98357 auch mit LSB spielt .

Hey Leute,

ich habe einen A1S 2.2 und bekomme ihn einfach nicht dazu den Audio Decoder zu erkennen.
Im log sehe ich nur:

rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
Maximale Inaktivitätszeit wurde aus NVS geladen: 10
RFID-Tags koennen jetzt gescannt werden...
Unterer Spannungslevel (Batterie) fuer Neopixel-Anzeige aus NVS geladen: 3.00 V
Oberer Spannungslevel (Batterie) fuer Neopixel-Anzeige aus NVS geladen: 4.20 V
Spannungslevel (Batterie) fuer Warnung via Neopixel aus NVS geladen: 3.40 V
Zyklus für Spannungsmessung (Batterie) fuer Neopixel-Anzeige aus NVS geladen: 10 Minuten
Initiale Lautstärke wurde aus NVS geladen: 3
Maximale Lautstärke für Lautsprecher wurde ins NVS geschrieben.
Maximale Lautstärke für Kopfhörer wurde ins NVS geschrieben.
Maximale Lautstärke wurde gesetzt auf: 21
Neuer Modus: mono
AC101 Failed!
AC101 Failed!
AC101 Failed!
AC101 Failed!
AC101 Failed!

Ich bin mir auch nicht sicher wie ich die Schalter auf dem Board einstellen soll. Haben die Einfluss auf den Audio Treiber?

Wäre über Hilfestellung sehr dankbar :smiley:

Hi,
schau mal hier: ESPuino/Hardware-Plaforms/ESP32-A1S-Audiokit at master · biologist79/ESPuino · GitHub

Da habe ich damals einiges aufgeschrieben.

Ansonsten würde ich erstmal schauen, das Minimalbeispiel zum Laufen zu kriegen:

Danke für die schnelle Antwort! Leider steht in der Readme nichts über die Schalter auf dem Board, aber ich werde es erstmal mit dem Minimalbeispiel versuchen. :slight_smile:

Ich habe von meinem Board mal ein Bild gemacht:

Da kannst du die Jumper sehen.

1 „Gefällt mir“

Vielen Dank! Auch für die ganze Arbeit, die du ins Projekt gesteckt hast! :slight_smile:

1 „Gefällt mir“

So, nachdem ich das Board ja jetzt lange quasi ignoriert habe, obwohl es in meiner Schublade liegt, habe ich es heute mal rausgekramt und getestet. In der ersten Iteration war ich zu faul, einen RFID-Reader anzuschließen. Dabei fiel mir auf, dass man ESPuino nicht kompilieren kann, wenn keine der drei RFID-Optionen (RC522-SPI, RC522-I2C, PN5180) gesetzt wurden. Das habe ich nun angepasst.

Das habe ich mal getestet und kam (für mich) zu dem Schluss, dass die Lautstärke für den Lautsprecher ok ist, jedoch für den Kopfhörer viel zu leise. Daher habe ich ac.SetVolumeHeadphone(80) gesetzt. Damit passt das für mich.

Mein Cfg-File für das Audiokit stammt noch aus einer Zeit, als ich mit SDMMC noch nichts gemacht habe. Ich habe das jetzt auf SDMMC geändert, weil was Anderes keinen Sinn macht. Den Button des Drehencoders habe ich jetzt erstmal auf 99 gesetzt, weil der vorher auf einem SDMMC-GPIO lag.

Gemäß dieses Bildes (Quelle: @Wolle weiter oben in einem Beitrag) müssten die GPIOs 0, 13,12, 21, 22, 19, 23, 18 und 5 noch verwendbar sein. Dazu habe ich spontan die Idee, vielleicht eine Breakout-Platine mit Port-Expander zu entwickeln, so dass man Buttons über diesen anbinden kann.

21: I2C-Data
22: I2C-CLK
0: PE-Interrupt
23: Drehencoder DT
18: Drehencoder CLK
19: Neopixel

Ich stelle mir diese Breakout-Platine so vor, dass man einen 14poligen (2x7) Dupont-Konnektor hat (nicht verpolungssicher!), den man auf dem Audiokit und auch auf dem Breakout-Board einsteckt. Auf dem Breakout-Board gibt es dann:

  • Port-Expander
  • 5x JST PH 2fach für max. fünf Buttons
  • 1x JST PH 2fach für RST-Button
  • 1x JST PH 2fach Drehencoder-Anschluss
  • 2x JST PH 4fach für RFID-Reader (I2C) und Reserve
  • 1x JST PH 3fach für Neopixel
  • Breakout für freie GPIOs und 3.3 V + GND

Was haltet ihr davon?
Einziges Problem ist, dass auf der rechten Seite bis auf GPIO 0 keiner RTC-fähig ist. Der muss aber RTC-fähig sein, denn sonst kann man da nix aufwecken aus dem Deepsleep. Ob das mit GPIO 0 geht, muss man testen. Könnte problematisch sein. Tja, ansonsten muss man aus dem linken GPIO-Block auch noch einen Konnektor setzen auf das Breakout-Board.

@janis Läuft das inzwischen eigentlich bei dir? Mir ist gerade aufgefallen, dass du im Bild einen PN532 als RFID-Reader hast. Den unterstützt ESPuino nicht. Ich habe ihn hier, weil ich Support mal geplant hatte, aber das wird dann einfach zu viel. Oder ist es doch ein RC522 und der sieht nur gleich aus?

An diejenigen hier, die einen RC522-I2C verwenden: Welchen könnt ihr empfehlen?

Habe das gerade nochmal runtergeschrieben. Das müsste auch mit RC522 via SPI gehen. Das finde ich insofern gut, weil der Reader ist günstig und gut verfügbar. Und ich selbst muss auch nix kaufen :slight_smile:

0 unbenutzt
5 I2C.CLK
12 Neopixel
13 I2C.DATA
14 PE-Interrupt
15 RE.DT
18 RFID.SCK
19 RFID.MISO
21 RFID.CS
22 RE.CLK
23 RFID.MOSI

Auf dem Port-Expander liegen kann:

  • Input: Bis zu fünf Buttons
  • Input: Button des Drehencoders
  • Output: Mosfet-Schaltung, um RC522 und Neopixel spannungslos zu schalten im Deepsleep

Das Breakout-Board besitzt:

  • 1x 14Pin (2x7) Dupont-Anschluss
  • 1x 4Pin Dupont-Anschluss
  • Port-Expander
  • Mosfet-Schaltung (invertiert)
  • 5x JST PH 2fach für max. fünf Buttons
  • 1x JST PH 2fach für RST-Button
  • 1x JST PH 3fach für Neopixel
  • 1x JST PH 4fach für I2C-Reserve
  • 1x JST PH 5fach Drehencoder-Anschluss
  • 1x JST PH 6fach für RC522
  • Breakout für freie GPIO 0 und 3.3 V + GND

wie wäre es mit einem Huckepack Board, sowas wie ein HAT für das Board :wink:

Inkl. der Löcher in den Ecken, dann könnte man beide zusammen schrauben…

(Ich könnte wenn es nicht allzu eiilig ist so ein Board fertigmachen bzw. dir die Arbeit abnehmen, würdest dann aber „nur“ die Gerber Daten bekommen → PN)