projekty@dakohran.cz

Internetové Wi-Fi rádio ESP 32

Internetové Wi-Fi rádio ESP 32

Internetové Wi-Fi rádio ESP 32

ESP 32, VS 1053B, I2C LCD DISPLEJ, TLAČÍTKA ( volitelné ).

Toto Internetové rádio je postaveno z výkonného modulu ESP 32, zvukové karty VS 1053B a libovolného I2C LCD displeje. Velkou předností této verze je to, že naše rádio již není potřeba připojovat k Internetu pomocí Ethernetového kabelu, tím odpadá nutnost síťové kabeláže a dále tím, že každá aktualizace projektu v našem zařízení se provádí pomocí naší domácí WiFi sítě a nemusíme projekt přehrávat pomocí USB kabelu.

Tento projekt je určen těm, kteří již se s ESP 32 seznámili a znají jeho základní funkce. Rádio je ovládané tlačítky, ( není podmínka – osobně jsem je nepoužil ). Nicméně v kódu projektu je vloženo 6 tlačítek. 2 pro hlasitost, 2 pro stanice 1+ a 1-, a pro stanice 10+ a 10-. Klidně můžete rádio ovládat DO ( příklady zde http://dakohran.cz/2020/02/15/internetove-radio-ovladane-dalkovym-ovladacem/ a zde : http://dakohran.cz/2020/02/23/internetove-radio-arduino-mega-150-stanic-dalkove-ovladani-posuv-textu-na-lcd/.

NĚKTERÉ KNIHOVNY POUŽITÉ V ARDUINO UNO ( MEGA ) NEBUDOU FUNGOVAT V ESP 32 !!! JE NUTNO POUŽÍT DANOU KNIHOVNU PRO ESP. ( NA KONCI ČLÁNKU KE STAŽENÍ )

Zapojení hardware :

---------------------------------------------
|   VS1053 |  ESP 8266 | ESP 32 | PŘIŘAZENÍ |
---------------------------------------------
|   13 SCK        D5     GPIO 18    SCK     |
|                                           |
|   12 MISO       D6     GPIO 19    MISO    |
|                                           |
|   11 MOSI       D7     GPIO 23    MOSI    |
|                                           |
|    8 XRST       RST      EN       RESET   |
|                                           |
|    6 XCS        D1      GPIO05     XCS    |
|                                           |
|    7 DCS        D0      GPIO16     DCS    |
|                                           |
|    2 DREQ       D3      GPIO04     DREQ   |
|                                           |
|                         GPIO13    Tlač.+  |
|                                           |
|                         GPIO12    Tlač.-  |
|                                           |
|                         GPIO21    I2C SDA |
|                                           |
|                         GPIO22    I2C SCL |
|                                           |
|     5 V         5V        5 V     Napájení|
|                                           |
|     GND         GND       GND     Napájení|
|                                           |
|        TLAČÍTKA SPÍNAJÍ GND !!!           |
|                                           |
---------------------------------------------

Schéma zapojení je v této tabulce, použil jsem vodiče samice – samice, pomocí kterých jsem propojil žádané piny mezi ESP 32 a VS 1053B. Kontakt spojů je vyhovující, nicméně po úspěšném vyzkoušení je vhodné vodiče napájet na piny a použít smršťovací bužírku, tím bude zajištěna maximální spolehlivost.

Jak jsem již napsal, ESP 32 je výkoný modul obsahující 2 CPU jádra, která se dají jednotlivě ovládat a nastavit jejich pracovní frekvence v rozsahu 80 až 240 MHz pracující s Flash pamětí 4 MB. Program zde nebudu celý zobrazovat, podívame se na část s funkcí OTA která nám umožňuje WiFi přenos projektu do ESP 32.

PRVNÍ NAHRÁTÍ PROJEKTU DO ESP 32 MUSÍ BÝT PROVEDENO POMOCÍ USB, ABY OTA BYLO AKTIVNÍ !!!

.
.
.

//                   Na konci SETUP :         // 


ArduinoOTA
    .onStart([]() {
      String type;
      if (ArduinoOTA.getCommand() == U_FLASH)
        type = "sketch";
      else // U_SPIFFS
        type = "filesystem";

      // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
      Serial.println("Start updating " + type);
    })
    .onEnd([]() {
      Serial.println("\nEnd");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .onError([](ota_error_t error) {
      Serial.printf("Error[%u]: ", error);
      if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
      else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
      else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
      else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
      else if (error == OTA_END_ERROR) Serial.println("End Failed");
    });

  ArduinoOTA.begin();

  Serial.println("Připraven");
  Serial.print("IP addresa: ");
  Serial.println(WiFi.localIP());
 
   char serinfo[64];
   
   // Nastavení sériového portu pro ladění
   Serial.begin(115200);
//   Serial.print(appname);
   Serial.println(" Startuji...");
   sprintf(serinfo, "Bezim na CPU %d at %dMHz, s %d volne pameti.",
           xPortGetCoreID(), ESP.getCpuFreqMHz(), ESP.getFreeHeap());
   Serial.println(serinfo);
   


   // Hotovo, dále budeme pracovat ve smyčce...
}

Tento kód na konci SETUP nám umožňuje bezdrátový přenos souborů ( projektu ) do ESP 32. Pokud ho nepoužijeme, budeme muset později „přehrávat“ ESP 32 pomocí microUSB.

Okno pro nastavení portu pomocí OTA bude vypadat nějat takto…

Zkouška funkčnosti

Samotný program je kromě OTA téměř identický s předchozími verzemi pro Arduino Uno ( MEGA ). U ESP 32 již nejme limitováni velikostí pamětí, tak si zde už můžeme vyhrát 🙂 Pokud si například setřídíte stanice podle žánrů ( 1 – 20 Rock, 21 – 40 Metal … ), můžete si předefinovanými tlačitky přepínat podle žánru a ne jednotlivě po stanicích…

Osobně jsem s tímto ESP modulem velmi spokojen, snad jedinou nevýhodou u této aplikace je potřeba dostatečně silného Wi-Fi signálu Vašeho routeru. V panelovém bytě mám odzkoušené, že tam kde je dostatečný signál pro mobil nebo notebook již není ideální pro toto rádio. Nesmíme zapomenout, že tyto rádia nemají téměř žádný vyrovnávací buffer a přehrávají nám vždy po 32 bajtech.

NEZAPOMEŇTE SI DO PROJEKTU ZADAT PŘÍSTUPOVÉ ÚDAJE K VAŠÍ WI-FI SÍTI ! 🙂

LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD na adrese 0x27, 16 znaků, 2 řádky
VS1053 MP3player(5,16,4);  // X_CS 6 pin, X_DCS 7 pin, DREQ 2 pin, X_RESET 8 pin

// Zde zadat přístupové údaje k WiFi

char ssid[] = "XXXXXXXXXXXXX";   // ZDE ZADAT JMÉNO VAŠÍ WIFI SÍTĚ
char pass[] = "YYYYYYYYYYYYY";   // ZDE ZADAT HESLO VAŠÍ WIFI SÍTĚ

Soubory ke stažení :

29 Odpovědi

  1. nefunkční napsal:

    zdravím,
    nefunguje to, mam to tež to co je v ukázce a nic , bez zvuku , nelze přepinat ….atd.
    v čem je problém?
    L.

    • David Kohout napsal:

      Dobrý den, z dotazu nemohu určit kde může být problém.

      1. Připojí se ESP 32 k Vaší domácí síti ? – zkontrolujte jméno a heslo k Vaší Wi-Fi

      char ssid[] = „XXXXXXXXXXXXX“; // MÍSTO XXX… ZADAT JMÉNO VAŠÍ WIFI SÍTĚ
      char pass[] = „YYYYYYYYYYYYY“; // MÍSTO YYY… ZADAT HESLO VAŠÍ WIFI SÍTĚ

      Pozor na uvozovky “ „, v přiloženém souboru jsem jednu nechtěně umazal v názvu sítě, brzo opravím…

      2. Pokud je nastavení sítě OK, co vypíše serial monitor ?

  2. ESP Radio napsal:

    Dobrý den,
    při nahrávání nebo ověření programu mi hlásí chybu kompilace.

    • Anonym napsal:

      Dobrý den, nenapsal jste, s jakou chybou je kompilace přerušena.
      Možné příčiny :
      1. Špatně zvolena vývojová deska, má být ESP 32 Dev Module
      2. Konflikt knihoven pro VS1053B : máte-li v katalogu i knihovnu pro VS1053B Arduino UNO,
      smažte ji a nechte pouze knihovnu VS1053B pro ESP 32.

      • ESP Radio napsal:

        Dobrý den, jako vždy máte pravdu, konflikt knihoven,
        nicméně deska mi při nahrávání programu zřejmě neodpovídá.
        Arduino: 1.8.10 Hourly Build 2019/05/21 09:33 (Windows 10), Vývojová deska: „ESP32 Dev Module, Disabled, Default 4MB with spiffs
        (1.2MB APP/1.5MB SPIFFS),
        240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None“

        Projekt zabírá 764462 bytů (58%) úložného místa pro program. Maximum je 1310720 bytů.
        Globální proměnné zabírají 44380 bytů (13%) dynamické paměti,
        283300 bytů zůstává pro lokální proměnné. Maximum je 327680 bytů.
        esptool.py v2.6
        Serial port COM4
        Connecting…….._____….._____….Nastala chyba při nahrávaní projektu.
        A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
        Děkuji

  3. David Kohout napsal:

    Při prvním nahrávání projektu ( pomocí mikro USB ) musíte stisknout obě tlačítka na vývojové desce těsně před downloadem současně. Je to docela opruz, u některých desek je musíte držet aspoň 5 vteřin, u některých stačí tak na 1 sec. stisknout a uvolnit, u některých střídavě stisknout a
    uvolnit. Je to o nervy, nicméně jakmile se Vám podaří projekt poprvé nahrát, další downloady je možné provádět pomocí WiFi 🙂
    .
    .
    // Důležité !!!!! Zde zadat přístupové údaje k WiFi

    char ssid[] = „Jméno Vaší sítě“; // ZDE ZADAT JMÉNO VAŠÍ WIFI SÍTĚ
    char pass[] = „Heslo Vaší sítě“; // ZDE ZADAT HESLO VAŠÍ WIFI SÍTĚ

    Potom si v Arduino IDE přepněte port na Ethernet…

  4. Vlasta napsal:

    Dobrý den,
    v zapojení vidím i ESP8266. To je také potřeba nebo je to alternativa pro UNO místo ESP32?
    Děkuji za vysvětlení Vlasta

    • David Kohout napsal:

      Dobrý den, tento projekt je určen pro ESP 32 nebo ESP 8266 ( starší model proti ESP 32 ). Pro Arduino UNO tento projekt není určen.

  5. Martin napsal:

    Dobrý den,
    mám problém vše se nahraje, ale nehraje zvuk a ani informace na displeji se nezobrazí.
    Když se podívám do zařízení k routeru tak vidím, že se esp32 připojí, ale neodebírá žádné data. Už nevím co by mohlo být špatně. Můžete mi prosím poradit? Děkuji.
    seriový monitor mě vypíše:
    18:11:30.700 -> ets Jun 8 2016 00:22:57
    18:11:30.700 ->
    18:11:30.700 -> rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
    18:11:30.700 -> configsip: 0, SPIWP:0xee
    18:11:30.700 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    18:11:30.700 -> mode:DIO, clock div:1
    18:11:30.700 -> load:0x3fff0018,len:4
    18:11:30.700 -> load:0x3fff001c,len:1216
    18:11:30.746 -> ho 0 tail 12 room 4
    18:11:30.746 -> load:0x40078000,len:10944
    18:11:30.746 -> load:0x40080400,len:6388
    18:11:30.746 -> entry 0x400806b4
    18:11:33.184 -> Startuji
    18:11:35.528 -> P⸮

    • David Kohout napsal:

      Dobrý den, těžko tak od pasu říct kde může být problém…
      Já bych zkusil nahrát znovu projekt do ESP pomocí USB kabelu, kabel nechat připojený a po naběhnutí
      ESP bych klikl na ikonu lupy v Arduino IDE ( vpravo nahoře ). Otevře se další okno kde by jste měl dostávat
      nějaké data od ESP při jeho náběhu a při připojovaní k routeru a serveru se streamem. V projektu jsou
      „pastičky“ – např. Serial.println(“ Startuji…“); – to by se Vám mělo zobrazit v tomto okně. Těch pastiček je tam více, takže zjistíte, kde se Vám to „kouslo“. Já bych to ale spíše viděl na špatné zapojení nebo na jinou
      verzi ESP. Pokud máte jiné než je na fotografii tohoto příkladu tak Vám nesedí piny a budete muset na Internetu pohledat pinout Vašeho ESP. Dejte vědět co jste zjistil. Ještě mě napadlo – zkuste změnit předvolbu stanice po spuštění z 27 například na 1, Star Sat dělal kejkle s linky, aktuálně je živý tento :

      http://starsat-ais-edge-3002-fra-eco-cdn.cast.addradio.de/starsat/live/mp3/high/stream.mp3

      To by ale zásadně nemělo vadit, pokud cesta ke stanici již neexistuje, na LCD by mělo aspoň svítit Předvolba :

    • Marek napsal:

      Ahoj, měl jsem stejný problém.
      1) Stačilo upravit kontrast na displaji (trimr na zadní straně) a text se objevil.
      2) Ve sketchi je v „int ID_stanice=xxx;“ nastavena „starovací“ stanice (xxx byla tuším 27=Star*Sat Radio), která shodou náhod nehraje.

    • Martin napsal:

      Podařilo se najít chybu? Mám podobný problém.

  6. Lukas napsal:

    zdravim tak sem se rozhodl ze si udelam taky internetove radio – koupil sem VS1053B shield
    a WeMos D1 R32 UNO ESP32 krasne to do sebe pasuje – ale nehraje – samozrejme sem piny prepsal aby to do sebe sedlo (reset pin teda neni propojeny ale to asi nevadi)
    skusil sem nahrat kod jen do Wemos a zapnout
    krome toho ze seriovy port ukaze ze jen startuje – zadne info o WI-FI atd.
    na LCD hodne pomalu bezi predvolena stanice ale bez napisu PREDVOLBA:
    jakmile se snazim prepnout tlacitkem tak se posun stanice na display zastavil – predpokladam ze se cely modul zaseknul

  7. Petr napsal:

    Zdravím,
    jak zařídím, aby po zapnutí hrála posledně zvolená stanice?
    Děkuji

  8. David Kohout napsal:

    To je velmi jednoduché, jakmile dojde ke změně hodnoty v proměnné Predvolba ( přepnete stanici ), tak tuto hodnotu uložte do EEPROM ESP32. Příklad zde : https://randomnerdtutorials.com/esp32-flash-memory/ Mějte ale na paměti, že každé přepnutí stanice přepíše EEPROM, nicméně měla by zvládnout cca 100 000 – 1 000 000 zápisů. ( u Arduino Uno to bude do 100 000 ). Dále upravte kód na začátku programu aby se proměnné Predvolba nenastavila na pevně danou hodnotu po spuštění ESP ( například Predvolba = 27 ), ale aby se načetla hodnota z EEPROM.

  9. Zdenek napsal:

    Zdravím, nainstaloval jsem na ESPDUINO32 a program proběhne a na výpise mám Startuji-Připraven a IP adresu ale když se na ni chci připojit tak hlásí chybu. VS1053 jsem zatím nepřipojoval jen zkouším jestli to spolu bude fungovat melo by to pasovat ale ještě jsem nekontroloval piny. Ale i tak bych měl tu IP adresu otevřít ne? Děkuji za radu.

    • David Kohout napsal:

      Dobrý den, tak s tímto boardem jsem ještě neměl možnost se seznámit. Zcela určitě bude mít jinak rozmístěné piny než Arduino Uno ( Mega ), takže shield VS1053 určitě po zasunutí do tohoto boardu v lepším případě nebude fungovat. V horším ho odpálíte. Chce to řádně proštudovat manuál k této desce a teprve potom se pouštět do experimentů. Bohužel neporadím, hodně zdaru.

  10. Pavel napsal:

    Dobrý den. Měl bych dotaz ohledně adres: kde najdu MP3 adresu rádia Evropa2. Děkuji

  11. David Kohout napsal:

    Co takhle zkusit stryca Googla ?
    http://ice.actve.net/fm-evropa2-128
    10 vteřin hledání 🙂

  12. Tibor napsal:

    Zdravim, skusam nahrat Vas projekt do ESP32. Nedari sa mi a vyhadzuje nejaku chybovu hlasku, ktorej nerozumiem. Viete mi pomoct? Dakujem.

    Arduino: 1.8.19 (Windows 7), Vývojová doska:“ESP32 Dev Module, Disabled, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 115200, Core 1, Core 1, None, Disabled“

    Projekt zaberá 768065 bytov (58%) pamäte pre program. Maximum je 1310720 bytov.

    Globálne premenné zaberajú 44700 bytov (13%) dynamickej pamäti, 282980 bytov zostáva pre lokálne premenné. Maximum je 327680 bytov.

    java.io.IOException: Cannot run program „___REMOVE___/esptool.exe“: CreateProcess error=2, Systém nemôže nájsť zadaný súbor

    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)

    at processing.app.helpers.ProcessUtils.exec(ProcessUtils.java:26)

    at cc.arduino.packages.Uploader.executeUploadCommand(Uploader.java:129)

    at cc.arduino.packages.uploaders.SerialUploader.runCommand(SerialUploader.java:383)

    at cc.arduino.packages.uploaders.SerialUploader.uploadUsingPreferences(SerialUploader.java:197)

    at cc.arduino.UploaderUtils.upload(UploaderUtils.java:77)

    at processing.app.SketchController.upload(SketchController.java:732)

    at processing.app.SketchController.exportApplet(SketchController.java:703)

    at processing.app.Editor$UploadHandler.run(Editor.java:2061)

    at java.lang.Thread.run(Thread.java:748)

    Caused by: java.io.IOException: CreateProcess error=2, Systém nemôže nájsť zadaný súbor

    at java.lang.ProcessImpl.create(Native Method)

    at java.lang.ProcessImpl.(ProcessImpl.java:386)

    at java.lang.ProcessImpl.start(ProcessImpl.java:137)

    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)

    … 9 more

    Nastala chyba pri nahrávaní projektu

    Táto správa by mala mať viac informácií v
    „Zobrazenie podrobného výstupu pri kompilácii“
    podľa zapnutá voľba v Súbor -> Nastavenia.

  13. Ivan Goga napsal:

    Dobrý deň.
    Čo vravíte na tento vynález: https://elektro.turanis.de/html/prj466/index.html ???
    Môže to hrať bez mp3 dekodéra? Okrem toho je tam zle nakreslený reproduktor. Nie som až taký znalec, ale pripadá mi to super jednoduché.
    Ďakujem za odpoveď.

    • David Kohout napsal:

      Dobrý den, ano SW emulace MP3 dekodéru je mi známa. Rádio Vám bude hrát, ale pouze mono, dynamika zvuku nic moc a můžou se projevovat rušivé signály od oscilátoru CPU. Ale hraje to, nenáročný posluchač může být spokojen. Jinak opravdu zapojení na odkazu je špatné ( napájení jde přímo do reproduktoru ).

Napsat komentář: Martin Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna.