Construir un receptor de web radio o streaming mp3 es muy fácil y barato con cualquier placa ESP8266. Son muchas las ventajas de armar este receptor ya que podemos escuchar emisoras con la música de nuestra preferencia, menos comerciales y en algunos casos son nulos.
A pesar de su montaje simple, es un ejemplo de lo poderosos que pueden ser los ESP8266, y como puede generar audio usando la modulación delta-sigma. Con solo unos pocos componentes externos podemos adecuar la señal enviarla a un parlante activo o sistema de sonido domestico.
Esta es la versión mas minimalista y funcional del web radio ya que las demás versiones presentes en otras paginas no corren correctamente, y el sonido se torna intermitente lo que lo hace imposible de usar en una aplicación real.
Espero que todos puedan replicar este proyecto sin ningun problema en las placas económicas basadas en el ESP8266. En este caso voy a usar la Wemos D1 mini para hacer mas didáctico y fácil de montar.Ustedes pueden usar cualquier ESP8266.
Materiales:
Materiales:
Placa de desarrollo ESP8266 (Wemos D1 mini, nodemcu etc )
3 Resistencias de 330ohm
2 Capacitores de 10uf a 6.3v o superior
Cable usb
Cable de audio estéreo o mono
Parlante activo, amplificadorde audio, parlantes de pc o lo que tengas a mano.
El esquema:
La alimentación la podemos tomar de una fuente de 5v directamente a la placa, o usar el puerto USB con un cable de smartphone. Basta con usar los 5v de un cargador, un power bank o como hice en mi caso aproveché el puerto USB del parlante portatil.
La salida de audio que obtendremos será monofonica pues solo tenemos un canal disponible para generar el sonido a partir de la modulación delta sigma.
Es necesario instalar la librería https://github.com/earlephilhower/ESP8266Audio muy útil para generar audio, ya sea usando un convertidor digital analógico externo o como en este caso usando el pin RX como salida modulando el audio por software, esta es la opción mas minimalista y por tanto la calidad es básica. Sin embargo tuve que añadir un filtro a la salida para desacoplar la señal DC y eliminar ruidos y frecuencias indeseables.
Este proyecto es una adaptación de https://create.arduino.cc/projecthub/earlephilhower/esp8266-digital-radio-ee747f
Como siempre nuestro viejo amigo el Arduino IDE va a ser nuestra herramienta para programar este maravilloso radio.
IMPORTANTE
Antes de subir nuestro código debemos verificar que este seleccionada la velocidad la placa en 160Mhz y desconectar el pin RX del resto de circuito para que no interfiera durante la programación ya que este se ocupa para reprogramar el micro.
Código:
/* Ejemplo de como construir un receptor de Web-Radio Wifi Basado en el proyecto: https://create.arduino.cc/projecthub/earlephilhower/esp8266-digital-radio-ee747f y en el ejemplo llamado "WebRadio" de la libreria ESP8266Audio que debes instalar disponible en: https://github.com/earlephilhower/ESP8266Audio Este ejemplo es de dominio publico hagan lo que quieran con el :D Es necesaria una conexion medianamente estable con el punto de acceso wifi de tu casa. Se debe debe seleccionar la frecuencia de la CPU en 160Mhz para que funcione correctamente. */ #include <ESP8266WiFi.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" const int LED_RED = D0; const int LED_BLUE = D5; // Enter your WiFi setup here: const char *SSID = "dorime"; const char *PASSWORD = "wesdx1235"; const char *URL="http://allclassical-ice.streamguys.com/ac32kmp3"; AudioGeneratorMP3 *mp3; AudioFileSourceICYStream *file; AudioFileSourceBuffer *buff; AudioOutputI2SNoDAC *out; // Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc. void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string) { const char *ptr = reinterpret_cast<const char *>(cbData); (void) isUnicode; // Punt this ball for now // Note that the type and string may be in PROGMEM, so copy them to RAM for printf char s1[32], s2[64]; strncpy_P(s1, type, sizeof(s1)); s1[sizeof(s1)-1]=0; strncpy_P(s2, string, sizeof(s2)); s2[sizeof(s2)-1]=0; Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2); Serial.flush(); } // Called when there's a warning or error (like a buffer underflow or decode hiccup) void StatusCallback(void *cbData, int code, const char *string) { const char *ptr = reinterpret_cast<const char *>(cbData); // Note that the string may be in PROGMEM, so copy it to RAM for printf char s1[64]; strncpy_P(s1, string, sizeof(s1)); s1[sizeof(s1)-1]=0; Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1); Serial.flush(); } void setup() { Serial.begin(115200); pinMode(LED_RED, OUTPUT); pinMode(LED_BLUE, OUTPUT); digitalWrite(LED_RED, HIGH); digitalWrite(LED_BLUE, LOW); delay(1000); Serial.println("Conectno WiFi"); WiFi.disconnect(); WiFi.softAPdisconnect(true); WiFi.mode(WIFI_STA); WiFi.begin(SSID, PASSWORD); // Try forever while (WiFi.status() != WL_CONNECTED) { Serial.println("...Conectando Wifi"); delay(1000); } Serial.println("Conectado"); audioLogger = &Serial; file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, 8192); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); } void loop() { static int lastms = 0; if (mp3->isRunning()) { digitalWrite(LED_RED, LOW); digitalWrite(LED_BLUE, HIGH); if (millis()-lastms > 1000) { lastms = millis(); Serial.printf("Running for %d ms...\n", lastms); Serial.flush(); } if (!mp3->loop()) mp3->stop(); } else { Serial.printf("MP3 done\n"); digitalWrite(LED_RED, HIGH); digitalWrite(LED_BLUE, LOW); delay(1000); } }
Pueden cambiar la URL del streaming y para que funcione correctamente debe ser máximo a 32kbps. Puedes disfrutar de mucha música con total libertad de implementarla en tu proyecto.
Espero que sea de ayuda déjenme sus comentarios.
Este proyecto fue patrocinado por NextPCB. Aprovechemos estos descuentos para llevar nuestros proyectos a otro nivel:
Regístrate y obtén un cupón de $5 dólares
Fabricación confiable de placas de circuito multicapa:
10 placas de circuito impreso de 4 capas por solo $12 dolares:
20% de descuento en pedidos de PCB y 15 % en SMT:
2 Comentarios
Excelente, muito bom, boa qualidade, obrigado por compartilhar, única dificuldade que as rádios que quero escutar, não são MP3, são m3u8 e essas não abrem
ResponderEliminarSó funciona para mp3
Eliminar