Hallo liebe uC Programmierer,
ich habe folgendes Problem an dem ich langsam verzweifle. Ich habe mir
aus reinem Bastelvergnügen folgendes Board im Inernet bestellt:
-(Google translate notwendig) http://wiki.ai-thinker.com/esp32-audio-kit
-(Schematic)
http://wiki.ai-thinker.com/_media/esp32-audio-kit_v2.2_sch.pdf
Mittels der IDF und ADF von espressif lässt sich eigentlich alles soweit
umsetzen wie ich es für meine Zwecke benötige (Music abspielen, Wifi,
Bluetooth etc.pp). Nun war meine nächste Idee über SPI den bekannten
RFID Leser RC522 anzschließen. Auf Github konnte ich folgende Bib finden
die eigentlich perfekt funktioniert:
https://github.com/abobija/esp-idf-rc522
Das Problem ist aber, das ich für ein funktionierendes Auslesen eines
Tags unter Verwendung der Bib eine Pinbelegung von MISO -> 12, MOSI ->
13, SCK -> 14 und SDA -> 15 vornehmen muss. Das wiederum führt zu einem
Konflikt, da auf dem Board der SDMMC Leser genau über diese Ports
angeschlossen ist ("HS2_*" Belegung). Bei einem Stream einer Musikdatei
von der SD-Karte, bekomme ich daher Probleme.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/sdmmc_host.html
Aus der IDF Docu
(https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/spi_master.html)
kann ich ablesen, dass es theoretisch noch eine SLOT3 SPI-Pinbelegung
mit MISO -> 19, MOSI -> 23, SCK -> 18 und SDA -> 5 gibt. Diese Pins
wären laut Datenblatt des ESP32-audio-kit boards auch verfügbar. Nur
leider kann ich nicht einfach die Pinbelegung auf diese Pins ändern.
Hätte vielleicht jemand, der sich mit Datenblätter und der Verschaltung
des ESP32 auskennt, kurz Zeit über die recht dürftige Doku des ESP32
Audio Kits drüber zu sehen? Ich befürchte nämlich, dass diese Pins wohl
einfach nicht für den SPI Bus verwendet werden können bei diesem Board.
Falls dem so wäre, müsste man doch auch softwareseitigen SPI verwenden
können?
Vielen Lieben Dank vorab!
Grüße
Chris
Hallo,
vorweg: ich nutze das IDF nicht, nur die ArduinoIDE.
Mich verwirrt: MISO -> 12, MOSI ->
13, SCK -> 14 und SDA -> 15
Was ist SDA? Kenne ich nur von I2C, bei SPI ist das üblicherweise /CS.
Die Pinbelegung stammt wohl von einem ESP8266, da ist das der Standard
(15 ist eben /CS).
SPI ist ein BUS, nur /CS wird zur Unterscheidung der Geräte genutzt,
MOSI, MISO, SCK gehen an alle parallel und jeder bekommt seinen /CS.
Wie man das dem IDF klarmacht, weiß ich nicht.
Danke für den Link zum Schaltplan, den hatt ich noch nicht (hier auch
die v2.2 des Kits.
Ich will da auch noch einen RC522 ranhängen, nur wenig Zeit im Moment...
Alles aber unter der ArduinoIDE, dazu die I2SAudio-Lib:
https://github.com/schreibfaul1/ESP32-audioI2S
und die AC101-Lib für den Codec:
https://github.com/Yveaux/AC101
Spielt von SD-Card oder Webstream problemlos, muß nur noch weitermachen.
PS: ich habe hier aber folgende Belegung für mein Board rausgefunden?
1
// SPI GPIOs
2
#define SD_CS 13
3
#define SPI_MOSI 15
4
#define SPI_MISO 2
5
#define SPI_SCK 14
6
7
// I2S GPIOs die Pinnamen beziehen sich auf den AC101
Hi,
ich bin auf die Pinbelegung über den Schaltplan gekommen. Wenn man die
DIP Schalter umlegt, hat man an der JTAG Schnittstelle nochmal IO_12,
IO_13, IO_14 und IO_15 vorhanden, welche ich für den SPI des RC522 dann
verwenden wollte. Leider überlappen diese Pins natürlich mit denen der
SD/MMC Card und dort konnte ich aus dem Schaltplan folgendes ablesen
IO12 -> SD_DATA2,
IO13 -> SD_DATA3,
IO15 -> SD_CMD,
IO14 -> SD_CLK,
IO2 -> SD_DATA0,
IO4 -> SD_DATA1
( was auch perfekt zur Belegung Slot1 HS2_* passt
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/sdmmc_host.html
)
Laut
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/spi_master.html
wäre SPI2 über
IO15 -> CSO,
IO14 -> SCLK,
IO12 -> MISO,
IO13 -> MOSI
und funktioniert auch, wenn ich die SD-Card nicht verwendet wird.
Da es noch den SPI3 gibt hätte ich gehofft auf die Pins
IO5 -> CSO,
IO18 -> SCLK,
IO19 -> MISO,
IO23 -> MOSI
auszuweichen, welche auch vorhanden sind auf dem A1S v2.2 board (wobei
diese auch Mehrfach belegt sind da LEDs und Taser über diese Pins
erreichbar sind z.b. IO19 addressiert Taster und LED). Nur leider
passiert da garnichts wenn ich diese Pins auswählen und mein RC522
anstecke und momentan habe ich auch keinen funktionierenden
Logic-Analyzer hier.
Arbeitest du auch mit dem Audio Kit von AI-Thinker v2.2? Konnte ich aus
dem Git nicht genau ablesen?
Hallo,
Chris schrieb:> Arbeitest du auch mit dem Audio Kit von AI-Thinker v2.2? Konnte ich aus> dem Git nicht genau ablesen?
Ich hatte das vor einiger Zeit bestellt, als es noch als v2.1 angeboten
wurde und auch auf den Bildern so gezeigt wurde.
Bekommen habe ich dann aber die v2.2 wie aus dem Link:
https://www.amazon.de/Vaorwne-Seriell-Esp32-Aduio-Entwicklung-Esp32-A1S-schwarz/dp/B0858YCMJ1/ref=sr_1_12?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=esp32+audio+kit&qid=1584953577&sr=8-12
Den Rest habe ich mir dann zusammengesucht bzw. ausgeprüft. Zumindest
spielt es hier so, liegt aber eben schon länger nur rum...
Mal schauen, ob ich mir da jetzt mal wieder Zeit für nehmen.
Habe es gerade mal rausgekramt und den Sktech geflasht, aus dem meine
Pinbelegung stammt: spielt zumindest meinen Webstream und auch von
SD-Card noch.
Gruß aus Berlin
Michael
Hallo,
ich arbeite auch seit einiger Zeit mit dem Board und hatte auch schon
einige Probleme damit ;)
RC522: ich hab ihn nicht zum Laufen bekommen und habe mich viel zu lange
damit rungeärgert! ich habe dann auf den PN532 gewechselt; den kann man
über UART ansteuern => braucht daher auch nur 2 IOs von denen bei dem
Board nicht viele rausgeführt sind.
BTW: I2C läuft bei PN532 nicht, da der ESP32 kein Clock Stretching
unterstützt.
ciao
danny
Hi,
ich habe noch eine weitere Bib/Component gefunden für den RC522
https://github.com/binh8994/rc522-esp-idf aber gleiches Problem. Ich
kann die GPIO_NUM_19, GPIO_NUM_23, GPIO_NUM_18, GPIO_NUM15 nicht
verwenden. Addressieren kann ich aber auf alle Fälle diese Ports, da
eine einfache LED Blinkschaltung funktioniert (ja leider ist mein logik
analyzer kaputt).
Ich vermute langsam, dass AI Thinker diesen SPI Bus, der normalerweise
bei einem ESP32 dort verfügbar wäre, irgendwie entfernt hat. Ein
Hinweise darauf liefert vielleicht auch die Tatsache, dass einige Taster
sowie Leds auf dem Board auch auf diese IOs laufen.
Hi,
ich nochmal, kann den RFID reader und das ESP32 Audio-Ki A1s von AI
Thinker jetzt gleichzeitig laufen lassen. Ich nutze dafür folgende
Library als component:
https://github.com/binh8994/rc522-esp-idf
Folgende PINS
1
#define PIN_NUM_MISO GPIO_NUM_12
2
#define PIN_NUM_MOSI GPIO_NUM_13
3
#define PIN_NUM_CLK GPIO_NUM_18
4
#define PIN_NUM_CS GPIO_NUM_5
5
#define PIN_NUM_RST GPIO_NUM_4 //Unnötig muss aber gesetzt sein
und folgenden source code, wobei ich .clock_speed_hz stark reduziert
habe um den IO_18 Pin verwenden zu können
1
voidspi_init(uint8_tclk,uint8_tmosi,uint8_tmiso)
2
{
3
esp_err_tret;
4
spi_bus_config_tbuscfg={
5
.miso_io_num=miso,
6
.mosi_io_num=mosi,
7
.sclk_io_num=clk,
8
.quadwp_io_num=-1,
9
.quadhd_io_num=-1,
10
.max_transfer_sz=1024,
11
};
12
spi_device_interface_config_tdevcfg={
13
.command_bits=0,
14
.address_bits=0,
15
.dummy_bits=0,
16
.duty_cycle_pos=128,
17
.cs_ena_pretrans=0,
18
.cs_ena_posttrans=0,// Keep the CS low 3 cycles after transaction, to stop the master from missing the last bit when CS has less propagation delay than CLK
19
.clock_speed_hz=10*1000,//Clock out: !!! Hier habe ich den Clock reduziert um GPIO_NUM_18 verwenden zu können
20
.mode=0,//SPI mode 0
21
.spics_io_num=-1,//CS pin
22
.queue_size=8,//We want to be able to queue transactions at a time
23
.pre_cb=spi_pre_transfer_callback,//Callback to be called before a transmission is started, handle CS pin
24
.post_cb=spi_post_transfer_callback,//Callback to be called after a transmission has completed, handle CS pin
25
};
26
//Enable pull-ups on SPI lines so we don't detect rogue pulses when no master is connected.
Hallo zusammen
Vorweg: Ich arbeite mit dem Arduino IDE.
Habe das Board dank https://github.com/schreibfaul1/ESP32-audioI2S zum
Laufen bekommen. Musste aber ebenfalls vom RC522 auf den PN532 mit UART
wechseln (Library: PN532_HSU.h), wegen bekanntem SPI Problem.
Nun habe ich aber das Problem, dass mp3 Streaming von der SD Karte und
parallel RFID Lesen (noch) nicht funktioniert bzw. der Stream abbricht.
Wenn ich die RFID Funktion mittels TaskScheduler ausbremse (z.B. wird
dann nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0],
&uidLength) nur alle 3 Sekunden ausgeführt), klappt es zwar mit dem
Stream. Aber dafür ist dann alle 3 Sekunden ein Klicken auf dem
Audiosignal zu hören.
Hat jemand von euch eine bessere Idee als den TaskScheduler? Evt. den
einen Prozess vom Core0 auf den Core1 verschieben? Oder muss ich mich
mal mit FreeRTOS auseinandersetzen, um das irgendwie hinzubekommen?
Danke für euren Input und beste Grüsse
Lukas
Hallo,
ich hatte mich die letzten Tage auch mit dem ESP32 Audio Kit V2.2
gequält. Es scheint aber möglich zu sein, alle buttons zu verwenden und
trotzdem die GPIO's für SPI oder anderes frei zu bekommen. Die buttons
können über IO36 ausgewertet werden. Ich habe im Rahmen eines anderen
Projekts ein kleines Video gemacht: https://youtu.be/r0af0DB1R68
Vielleicht hilft es ja dem einen oder anderen weiter.