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 |
8 | #define I2S_DSIN 25 |
9 | #define I2S_BCLK 27 |
10 | #define I2S_LRC 26 |
11 | #define I2S_MCLK 0 |
12 | #define I2S_DOUT 35 |
13 | |
14 | // I2C GPIOs |
15 | #define IIC_CLK 32 |
16 | #define IIC_DATA 33 |
17 | |
18 | // Tasten |
19 | #define KEY_WAIT 50 |
20 | |
21 | #define BUTTON_1_PIN 36 |
22 | // #define BUTTON_2_PIN 13 // shared mit SPI_CS |
23 | #define BUTTON_3_PIN 19 |
24 | #define BUTTON_4_PIN 23 |
25 | #define BUTTON_5_PIN 18 // Stop |
26 | #define BUTTON_6_PIN 5 // Play |
27 | |
28 | // Verstärker enable |
29 | #define GPIO_PA_EN 21 |
30 | |
31 | #define LED_D4 22 |
32 | #define LED_D5 19 |
33 | |
34 | // DIP-Schalter: 1-OFF, 2-ON, 3-ON, 4-OFF, 5-OFF |
Gruß aus Berlin Michael
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 | void spi_init(uint8_t clk, uint8_t mosi, uint8_t miso) |
2 | {
|
3 | esp_err_t ret; |
4 | spi_bus_config_t buscfg = { |
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_t devcfg = { |
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.
|
27 | gpio_set_pull_mode(miso, GPIO_PULLUP_ONLY); |
28 | gpio_set_pull_mode(mosi, GPIO_PULLUP_ONLY); |
29 | gpio_set_pull_mode(clk, GPIO_PULLUP_ONLY); |
30 | |
31 | //Initialize the SPI bus
|
32 | ret = spi_bus_initialize(VSPI_HOST, &buscfg, VSPI_DMA_CHANNEL); |
33 | ESP_ERROR_CHECK(ret); |
34 | if(ret != ESP_OK) { |
35 | ESP_LOGI("SPI-MFRC: ","Error Init"); |
36 | } else |
37 | ESP_LOGI("SPI-MFRC: ","Success Init"); |
38 | |
39 | //Attach the RC522 to the SPI bus
|
40 | ret = spi_bus_add_device(VSPI_HOST, &devcfg, &vspi); |
41 | ESP_ERROR_CHECK(ret); |
42 | if(ret != ESP_OK) { |
43 | ESP_LOGI("SPI-MFRC: ","Error Add"); |
44 | } else |
45 | ESP_LOGI("SPI-MFRC: ","Success Add"); |
46 | }
|
Vielleicht hilft es ja jemanden der ein ähnliches Projekt verfolgt Grüße
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
Da der ESP32 zwei Prozessorkernel hat und das Framework auf FreeRTOS basiert, könntest du den PN532-Teil als eigenen Thread/Prozess auf dem zweiten CPU-Core laufen lassen. Das geht auch in der Adruino IDE. Das ist allerdings nicht so schnell aus dem Ärmel geschüttelt. Da hilft nur - wie immer - RTFM. Oder in diesem Fall die Mehrzahl. RTFMs. Als Einstieg: - https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/ - https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html - https://freertos.org/Documentation/RTOS_book.html
Kann man die GPIO_NUM_19, GPIO_NUM_23, GPIO_NUM_18, GPIO_NUM15 für Servosteuerung verwenden? Denn PWM müssen die ja verfügen.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.