projekty@dakohran.cz

Nejjednodušší Internetové rádio

Nejjednodušší Internetové rádio

ARDUINO UNO, ETHERNET SHIELD W5100, AUDIO SHIELD VS 1053 B

Zde Vám předvedu asi nejjednodušší Internetové rádio jak z hlediska zapojení, tak i samotného programu. Jak je vidět na fotografii, tento projekt je po stránce zapojení velmi jednoduchý, na vývojovou desku Arduino UNO nasuneme Ethernet Shield a na něho audio Shield VS 1053B. Není zapotřebí žádných vodičů, napájení a signály Shieldů je pomocí jejich pinů. Samotné Arduino je napájené pomocí USB nebo napájecího konektoru.

Potřebné komponenty zakoupené v českém E-shopu, cena do 1 000 Kč.

Takže elektrické zapojení je otázkou několika vteřin, pouze začátečníci by měli být zpočátku opatrní a s citem pracovat se Shieldy, aby nedošlo špatným zacházením k mechanickému poškození pinů, desky by měly jít zlehka zasunout do sebe.

Funkce rádia :

  • Je pevně předvolena jedna stanice ( přepínání stanic bude v dalším projektu )
  • Po připojení Ethernetového kabelu a napájení začne rádio hrát.

Tak, nyní jdeme na program : ( program a knihovny ke stažení na konci článku )

/* Internetové rádio AURUINO UNO verze MINI
*  
* Autor :  David Kohout 11 / 2019
*
*
* V tomto projektu jsou k dispozici 3 stanice. Tu kterou chceme poslouchat odremujeme
* ( // smazat ), zbývající dvě se musí zaremovat ( // vložit ).
*

*/

//   Standartní knihovny

#include  ˂VS1053.h˃    // Standartní knihovna VS1053  ( Funguje i pod naším Shieldem, originál knihovnu SFEMP3Shield nepožívat ! ) 

#include  ˂Ethernet.h˃    // Standartní knihovna Ethernet

VS1053 MP3player(6,7,2,8);  // X_CS 6 pin, X_DCS 7 pin, DREQ 2 pin, X_RESET 8 pin

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Přiřazení MAC adresy síťovce - možno změnit

EthernetClient client;  // Ethernet jako klient
//--------------------------------------------------------------------------------------------------------//
//  Výběr Internetových rádií :
//  stanici kterou chceme poslouchat odremujeme
// ( // smazat ), zbývající dvě se musí zaremovat ( // vložit ).

  const char *host = "ice.abradio.cz";           // Hitrádio 80 
  const char *path = "/hit80128.mp3";
  int httpPort = 80;

//  const char *host = "icecast6.play.cz";       // Dance rádio 
//  const char *path = "/dance-radio128.mp3";
//  int httpPort = 80;

//  const char *host = "stream.funradio.sk";     // Fun rádio SK 
//  const char *path = "/dance128.mp3";
//  int httpPort = 8000;

//---------------------------------------------------------------------------------------------------------//
uint8_t mp3buff[32];       // Velikost bufferu 32 Byte

void setup() {
 Serial.begin(9600);       // Inicializace COM portu

 Ethernet.begin(mac);      // Start Ethernetového spojení, IP adresu přiřadí router
 
 MP3player.begin();        // Start zvukové karty VS1053B Shield
 MP3player.setVolume(10);  // Nižší číslo vyšší hlasitost

 Serial.println("\n\nInternetové rádio ARDUINO UNO verze MINI");         // Výpis na COM název rádia
 Serial.println("");
 Serial.println("IP adresa Ethernet Shieldu od DHCP : ");
 Serial.println(Ethernet.localIP());                                     // Výpis na COM IP adresa rádia
 Serial.println("");
 Serial.print("Připojuji se k : ");  Serial.println(host);               // Výpis na COM připojení k serveru s MP3 streamem

if (!client.connect(host, httpPort)) {
      Serial.println("Připojení selhalo");                               // Výpis na COM o chybě připojení na server
      return;
    }

    Serial.print("Požadovaný stream: ");                                 // Výpis na COM připojeno k :
    Serial.println(path);
    
    client.print(String("GET ") + path + " HTTP/1.1\r\n" +               // Adresa serveru se streamem - 1 požadavek
                  "Host: " + host + "\r\n" + 
                  "Connection: close\r\n\r\n");
                  
}

void loop() {                                                             // Hlavní program - smyčka

    if(!client.connected()){
    
      if(client.connect(host, httpPort)){                                 // Adresa serveru se streamem - ve smyčce
       client.print(String("GET ") + path + " HTTP/1.1\r\n" +
                  "Host: " + host + "\r\n" + 
                  "Connection: close\r\n\r\n");
      }
     }
  
    if(client.available() > 0){                                          // Pokud je server dostupný, tak :
      uint8_t bytesread = client.read(mp3buff,32);                       // ulož přijatá data do bufferu
    MP3player.playChunk(mp3buff,bytesread);                              // a přehraj na VS1053B Shield

   }

}

// To je vše, příjemnou zábavu !                 David Kohout 11 / 2019

Do vývojového prostředí Arduino IDE si nainstalujeme knihovny pro Ethernet a VS 1053B. S knihovnou VS 1053B jsem se trochu natrápil, na stránkách výrobce je jeho oficiální knihovna určena primárně pro práci se čtečkou SD karet ( přehrávání MP3 souborů ), nepodařilo se mi ale rozjet dekódování audia ze streamu. Použil jsem tedy standartní knihovnu VS1053 která „neumí“ SD karty, ale dokáže dekódovat stream.

Samotný program není moc velký, takže si trošku rozebereme kód…

VS1053 MP3player(6,7,2,8); // X_CS 6 pin, X_DCS 7 pin, DREQ 2 pin, X_RESET 8 pin

„Zvuková karta VS1053“ bude v projektu deklarována jako MP3player, k přenosu dat probíhá na pinech 6,7,2,8. Pořadí je dáno strukturou knihovny VS1053, takže první číslo MUSÍ být přiřazeno X_CS, druhé X_DCS, třetí DREQ a poslední je X_RESET.

byte mac[ ] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Přiřazení MAC adresy síťovce – možno změnit

„Síťová karta“ bude mít IP adresu přiřazenou automaticky routerem, nicméně musíme zadat MAC adresu která MUSÍ BÝT JEDINEČNÁ V NAŠÍ DOMÁCÍ SÍTI ! To znamená například, že pokud bychom chtěli mít doma 2 tyto rádia, u jednoho z nich musíme změnit MAC adresu např. na : 0xDD, 0xAD, 0xBE……

const char *host = „ice.abradio.cz“; // Hitrádio 80
const char *path = „/hit80128.mp3“;
int httpPort = 80;

Tady je důležitá část kódu, zde definujeme, jakou stanici chceme poslouchat. Známe například URL adresu streamu Hitrádia 80 ( http://ice.abradio.cz/hit80128.mp3 ). V programu Arduina máme standartní kód pro připojení k serveru. Tento kód pracuje se 3 proměnnýma – HOST (adresa serveru ), PATH ( cesta k souboru mp3 ) a httpPort ( číslo portu streamu ). Adresu si rozdělíme takto zleva do prava ( http:// nezadáváme ). ice.abradio.cz ( tam, kde je značka národní domény – zde .cz – ) je proměnná HOST. Za prvním lomítkem ( zde /hit80128.mp3 ) je cesta k souboru – proměnná PATH. A jako poslední je číslo portu se streamem ( zde 80 ) – proměnná httpPort. Číslo portu bývá většinou 80 a není zobrazeno v URL odkazu. Může se stát, že najdeme tento odkaz rádia : http://stream.funradio.sk:8000/dance128.mp3. Za ukazatelem národní domény ( .sk ) je :8000 – to je číslo portu se streamem. Na Internetu lze najít spoustu odkazů na linky Internetových rádií, popřípadě na konci článku je link pro stažení aktuální databáze rádií z celého světa ( cca 70 MB )..

if(client.available() > 0){ // Pokud je server dostupný, tak :
uint8_t bytesread = client.read(mp3buff,32); // ulož přijatá data do bufferu
MP3player.playChunk(mp3buff,bytesread); // a přehraj na VS1053B Shield

No a ve smyčce ( LOOP ) konečně pošleme přijatá data k dekódování na MP3 Shield. Přijatá data se posílají na VS 1053B naráz po 32 Bytes, protože z důvodu 32bajtové bezpečnostní oblasti může odesílatel odesílat až 32 bajtů SDI dat najednou, aniž by zkontroloval stav DREQ, což usnadňuje řízení VS1053b pro mikropočítače s nízkou rychlostí.Z toho vyplývá, že si Arduino docela „mákne“ když při datovém toku 128kb / s má 1 minuta MP3 hudby průměrně 1 MB. Při tomto datovém toku je zvuk kvalitní, nejsou výpadky. Při vyšším datovém toku nebo poslechu exotických stanic již nastávají problémy, zvuk je nekvalitní nebo dochází k častým výpadkům. Experimentoval jsem se streamem v místní síti, tam toto rádio v pohodě zvládalo datový tok 320kb / s ! Takže je důležitá ani ne tak rychlost, ale kvalita síťového připojení.

Zkouška funkčnosti

Soubory ke stažení :

2 Odpovědi

  1. Zapojení rádia napsal:

    A jak to mám zapojit ? Není tu schéma !

    • Anonym napsal:

      Dobrý den, hned na začátku článku je psáno, že žádné vodiče nejsou potřeba.
      Na Arduino UNO nasunete Ethernet Shield a na něho VS 1053B. Viz foto.

      Celá sestava se napájí z Arduina USB nebo napájecím Jackem.

      Do Ethernet Shield se připojí síťový kabel, do konektoru SPK zvukovky repráčky nebo sluchátka 🙂

Napsat komentář

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