{"id":6212,"date":"2022-12-21T23:52:21","date_gmt":"2022-12-21T22:52:21","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=6212"},"modified":"2023-03-13T09:27:49","modified_gmt":"2023-03-13T08:27:49","slug":"reproductor-multimedia-con-arduino-y-esp32","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/","title":{"rendered":"Reproductor multimedia con Arduino y ESP32"},"content":{"rendered":"\n<p>Por Alejandro Vargas Lugo y Agust\u00edn Triguero Noriega<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen.png\" alt=\"\" class=\"wp-image-6259\" width=\"251\" height=\"135\"\/><figcaption class=\"wp-element-caption\">El nombre \u00abDuoTone\u00bb lo decidimos por el sonido est\u00e9reo. Y porque \u00absonaba\u00bb bien (no pun intended), para qu\u00e9 enga\u00f1arnos \ud83d\ude09<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p>Nuestro sistema consiste en un reproductor multimedia que incorpora dos altavoces peque\u00f1os, permitiendo as\u00ed la reproducci\u00f3n de sonido est\u00e9reo mediante el uso de los pines PWM en la placa Arduino, y una pantalla OLED de 1,3 pulgadas, monocrom\u00e1tica y con una resoluci\u00f3n de 128&#215;64 p\u00edxeles, situado entre los dos altavoces, y que debido a sus caracter\u00edsticas, se utiliza solo para mostrar en texto la informaci\u00f3n de la canci\u00f3n en reproducci\u00f3n en ese momento, adem\u00e1s de una car\u00e1tula en baja resoluci\u00f3n y <em>pixel art<\/em>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1-1024x745.jpg\" alt=\"\" class=\"wp-image-6260\" width=\"246\" height=\"179\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1-1024x745.jpg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1-300x218.jpg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1-768x559.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1-1536x1117.jpg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1-2048x1490.jpg 2048w\" sizes=\"auto, (max-width: 246px) 100vw, 246px\" \/><figcaption class=\"wp-element-caption\">Nuestro primer prototipo, \u00a1qu\u00e9 l\u00edo de cables!<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Evoluci\u00f3n de nuestro proyecto<\/h2>\n\n\n\n<p>Nuestra intenci\u00f3n inicial era el de hacer un \u00abreproductor\u00bb de melod\u00edas simples utilizando speakers piezoel\u00e9ctricos, al estilo de los tonos de llamada de los Nokia antiguos. Sin embargo, pronto nos dimos cuenta de que no solo nos consum\u00eda mucho trabajo realizar cada melod\u00eda (ya que ten\u00edamos que especificar las notas y la duraci\u00f3n de cada una, b\u00e1sicamente hacer toda la partitura sin tener ni idea de an\u00e1lisis musical) sino que supusimos que nadie querr\u00eda estar escuchando tonos que parecen sacados de una Atari 2600 durante mucho tiempo.<\/p>\n\n\n\n<p>Por tanto, nos decidimos por hacer un reproductor de m\u00fasica normal y corriente, ya que iba a resultar m\u00e1s atractivo, y adem\u00e1s encajaba mejor con la idea de un reproductor multimedia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Programas utilizados<\/h2>\n\n\n\n<p>En cuanto a programas, hemos hecho uso de un buscador de car\u00e1tulas que usa el motor de iTunes para obtener las im\u00e1genes (<a href=\"https:\/\/bendodson.com\/projects\/itunes-artwork-finder)\">https:\/\/bendodson.com\/projects\/itunes-artwork-finder<\/a>), adem\u00e1s de programas de escritorio como GIMP (<a href=\"https:\/\/www.gimp.org\">https:\/\/www.gimp.org<\/a>) para adaptar las car\u00e1tulas a las limitaciones de la pantalla, Audacity (<a href=\"https:\/\/www.audacityteam.org\/\">https:\/\/www.audacityteam.org<\/a>) para cambiar la frecuencia de muestreo, entre otros par\u00e1metros, de las canciones agregadas, y Notepad++ (<a href=\"https:\/\/notepad-plus-plus.org\">https:\/\/notepad-plus-plus.org<\/a>) para dar formato a los archivos resultantes de imagen que admite la librer\u00eda de gr\u00e1ficos (hablaremos de ello m\u00e1s adelante).<\/p>\n\n\n\n<p>Para programar, hemos usado la IDE de Arduino.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Librer\u00edas<\/h2>\n\n\n\n<p>Para la gesti\u00f3n de la pantalla OLED hemos usado U8g2 (<a href=\"https:\/\/github.com\/olikraus\/u8g2\">https:\/\/github.com\/olikraus\/u8g2<\/a>) y para la generaci\u00f3n de tonos hemos usado TMRpcm (<a href=\"https:\/\/github.com\/TMRh20\/TMRpcm\">https:\/\/github.com\/TMRh20\/TMRpcm<\/a>).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-1.png\" alt=\"\" class=\"wp-image-6261\" width=\"609\" height=\"163\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-1.png 1014w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-1-300x80.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-1-768x205.png 768w\" sizes=\"auto, (max-width: 609px) 100vw, 609px\" \/><figcaption class=\"wp-element-caption\">Como se puede apreciar, la librer\u00eda de gr\u00e1ficos requiere una cantidad importante de memoria RAM, algo que result\u00f3 ser un problema m\u00e1s adelante.<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Listado e implementaci\u00f3n de hardware<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-2-1024x320.png\" alt=\"\" class=\"wp-image-6262\" width=\"640\" height=\"200\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-2-1024x320.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-2-300x94.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-2-768x240.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-2-1536x479.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-2.png 1676w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"534\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-3-1024x534.png\" alt=\"\" class=\"wp-image-6263\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-3-1024x534.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-3-300x156.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-3-768x400.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-3-1536x801.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-3.png 1694w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Desaf\u00edos y problemas<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Gesti\u00f3n de memoria<\/h3>\n\n\n\n<p>La placa Arduino cuenta con 2 kB de memoria RAM. Solo las librer\u00edas mencionadas arriba utilizan conjuntamente un 125% de la memoria disponible, por lo que el proyecto resultaba imposible llevarlo a cabo bajo estas circunstancias. Nuestra soluci\u00f3n fue utilizar una placa ESP32, adem\u00e1s del Arduino Uno, y que cada uno se encargase de una parte del proyecto: la ESP32 maneja la librer\u00eda de la pantalla, y el Arduino maneja todo lo relacionado con audio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Legibilidad de las car\u00e1tulas<\/h3>\n\n\n\n<p>La resoluci\u00f3n de la pantalla admite un m\u00e1ximo de 64&#215;64 p\u00edxeles en formato cuadrado. Y \u00fanicamente dos colores (B\/N). Hacer que una car\u00e1tula se vea bien bajo estas circunstancias requiere tiempo para hacerlas reconocibles, y no basta con hacer una conversi\u00f3n directa a una imagen monocrom\u00e1tica usando tramado (dithering).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"319\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-4-1024x319.png\" alt=\"\" class=\"wp-image-6265\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-4-1024x319.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-4-300x94.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-4-768x239.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-4.png 1488w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Formato de las im\u00e1genes<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"295\" height=\"171\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-5.png\" alt=\"\" class=\"wp-image-6266\"\/><\/figure>\n<\/div>\n\n\n<p>A\u00fan teniendo las im\u00e1genes ya en sus caracter\u00edsticas adecuadas, la librer\u00eda utilizada no puede procesar im\u00e1genes en formatos comunes como PNG, JPG o GIF, ya que estos requieren cierto poder de c\u00f3mputo para ser decodificadas. Lo mejor es usar un formato sin compresi\u00f3n y quesea f\u00e1cil de procesar por una placa de prop\u00f3sito general. \u00bfLa soluci\u00f3n? El formato XBM (X-BitMap), que apareci\u00f3 en los a\u00f1os 80 y se encuentra en desuso, pero que debido a sus caracter\u00edsticas es perfecto para un sistema como el nuestro.<\/p>\n\n\n\n<p>Las im\u00e1genes se almacenan en un array hexadecimal de C, donde cada valor contiene la informaci\u00f3n de 8 p\u00edxeles. Dos variables adicionales, el alto y el ancho, permiten saber cu\u00e1ndo dejar de \u00abdibujar\u00bb una l\u00ednea y pasar a la siguiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">S\u00edntesis de m\u00fasica<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-6.png\" alt=\"\" class=\"wp-image-6267\" width=\"259\" height=\"179\"\/><\/figure>\n<\/div>\n\n\n<p>Ya que no cont\u00e1bamos con un procesador de se\u00f1ales digitales de suficiente rendimiento, ni con un conversor digital-anal\u00f3gico de buena calidad, optamos por generar la se\u00f1al anal\u00f3gica de sonido por medio de la librer\u00eda TMRpcm, que permite reproducir audio por medio de los pines PWM de Arduino. La Modulaci\u00f3n por Ancho de Pulsos permite \u00abimitar\u00bb una se\u00f1al anal\u00f3gica con una fidelidad media usando \u00fanicamente se\u00f1ales digitales que fluct\u00faan de manera rapid\u00edsima.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Organizaci\u00f3n de los scripts<\/h3>\n\n\n\n<p>Al haber realizado la practica en dos placas distintas hemos tenido que desarrollar un script por cada una de las placas. En la placa Arduino se ha desarrollado todo lo relacionado con la reproducci\u00f3n de audio mientras que en la placa ESP32 se ha implementado todo lo relacionado con la muestra de la imagen por el display. Es importante destacar que se ha tenido que utilizar l\u00f3gica de 3.3 voltios debido a que la placa ESP32 solo soporta hasta esa cantidad de voltios, los cuales a su vez son suficientes para que el Arduino sea capaz de detectar los cambios.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"597\" height=\"229\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-7.png\" alt=\"\" class=\"wp-image-6268\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-7.png 597w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-7-300x115.png 300w\" sizes=\"auto, (max-width: 597px) 100vw, 597px\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Arduino<\/h3>\n\n\n\n<p>Lo primero que nos encontramos en el script del Arduino son las implementaciones de las librer\u00edas necesarias, junto a la ya mencionada TMRpcm, necesaria para la reproducci\u00f3n de audio por los altavoces. Tras eso nos encontramos con la declaraci\u00f3n de variables, tanto del pin usado para el bot\u00f3n como de las variables relacionadas con los altavoces.<\/p>\n\n\n\n<p>Tras eso ya entramos en el setup, donde establecemos el modo del pin del bot\u00f3n (INPUT) y los pines utilizados para los altavoces (9 y 10). Tras eso nos encontramos con un breve mensaje de error en caso de que diera alg\u00fan tipo de error al leer la SD y la configuraci\u00f3n de los par\u00e1metros de los altavoces, en este \u00fanicamente el volumen.<\/p>\n\n\n\n<p><p class=\"MsoNormal\">Por \u00faltimo, entramos en la parte en la que se van leyendo las pistas de audio y reproduciendo. El funcionamiento es el siguiente: cada vez que se pulsa el bot\u00f3n se reproducen las pistas correspondientes (una por altavoz al ser est\u00e9reo) y se muestra el titulo de la canci\u00f3n. Si vuelves a pulsar el bot\u00f3n otra vez pasa a la siguiente canci\u00f3n, y as\u00ed hasta que se acaben las canciones y uno reinicie el dispositivo. Por cada canci\u00f3n deseada repetir\u00edamos el siguiente fragmento de c\u00f3digo cambiando las fuentes de audio y el texto:<\/p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"433\" height=\"143\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-8.png\" alt=\"\" class=\"wp-image-6269\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-8.png 433w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-8-300x99.png 300w\" sizes=\"auto, (max-width: 433px) 100vw, 433px\" \/><\/figure>\n\n\n\n<p> <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-9.png\" alt=\"\" class=\"wp-image-6270\" width=\"431\" height=\"171\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-9.png 431w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-9-300x119.png 300w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-10.png\" alt=\"\" class=\"wp-image-6271\" width=\"429\" height=\"160\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-10.png 459w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-10-300x112.png 300w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">ESP32<\/h3>\n\n\n\n<p>La estructura del ESP32 es muy similar a la del Arduino. Primero nos encontramos con las librer\u00edas y la declaraci\u00f3n de las variables, en este caso el pin utilizado para el bot\u00f3n. Tras eso utilizamos la librer\u00eda para declarar que display vamos a utilizar, el ancho y el alto, y los pines utilizados y conectados a dicho display.<\/p>\n\n\n\n<p>Tras eso ya pasamos al setup, donde declaramos el bot\u00f3n como input e inicializamos el display. Tras eso entramos en la muestra de las im\u00e1genes. De forma muy similar al Arduino con la reproducci\u00f3n de audio, se muestra una portada de \u00e1lbum cuando se pulsa el bot\u00f3n y una vez vuelto a pulsar se cambia a la siguiente que tengamos a\u00f1adida. En este caso la muestra de las portadas se realiza dentro de un m\u00e9todo \u00fanico por portada.<\/p>\n\n\n\n<p>Los m\u00e9todos de las portadas son todos iguales, con la diferencia de que la fuente tanto de BMP como de los textos es distinta por \u00e1lbum. Para cada canci\u00f3n necesitamos declarar un array donde, mediante lenguaje hexadecimal, se establecen el estado de cada p\u00edxel de pantalla. Este array lo usaremos dentro del m\u00e9todo para mostrarlo por pantalla, junto con el t\u00edtulo de la canci\u00f3n, el a\u00f1o y el artista. Por \u00faltimo, se env\u00eda todo al buffer, mostr\u00e1ndose por pantalla.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"212\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-11.png\" alt=\"\" class=\"wp-image-6272\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-11.png 660w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-11-300x96.png 300w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"174\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-12.png\" alt=\"\" class=\"wp-image-6273\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-12.png 679w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-12-300x77.png 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"307\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-13.png\" alt=\"\" class=\"wp-image-6274\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-13.png 698w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/imagen-13-300x132.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Casos de uso<\/h2>\n\n\n\n<p>Aunque nuestro dispositivo no cubre ninguna necesidad que ya no haya sido inventada (no deja de ser un reproductor de m\u00fasica con gr\u00e1ficos sencillos, algo que ya exist\u00eda desde finales de los 90), mejorando la calidad del sonido e implementando m\u00e1s funciones en la pantalla (visualizadores, ecualizador gr\u00e1fico, etc.) podr\u00eda llegar a ser un reproductor con suficiente \u00abencanto\u00bb como para poder llegar a ser un producto comercial. Pero por el momento, hay mejores alternativas para escuchar m\u00fasica, \u00a1Incluso un Walkman!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por Alejandro Vargas Lugo y Agust\u00edn Triguero Noriega Introducci\u00f3n Nuestro sistema consiste en un reproductor multimedia que incorpora dos altavoces peque\u00f1os, permitiendo as\u00ed la reproducci\u00f3n de sonido est\u00e9reo mediante el uso de los pines&#46;&#46;&#46;<\/p>\n","protected":false},"author":64,"featured_media":6260,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[136,141,140,139],"class_list":["post-6212","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-dse_gic_mostoles_2022-23","tag-esp32","tag-multimedia","tag-musica"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reproductor multimedia con Arduino y ESP32 - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reproductor multimedia con Arduino y ESP32 - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Por Alejandro Vargas Lugo y Agust\u00edn Triguero Noriega Introducci\u00f3n Nuestro sistema consiste en un reproductor multimedia que incorpora dos altavoces peque\u00f1os, permitiendo as\u00ed la reproducci\u00f3n de sonido est\u00e9reo mediante el uso de los pines&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-21T22:52:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-13T08:27:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2180\" \/>\n\t<meta property=\"og:image:height\" content=\"1586\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Reproductor multimedia con Arduino y ESP32\",\"datePublished\":\"2022-12-21T22:52:21+00:00\",\"dateModified\":\"2023-03-13T08:27:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/\"},\"wordCount\":1490,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/20221204_175951-1.jpg\",\"keywords\":[\"DSE_GIC_Mostoles_2022-23\",\"ESP32\",\"Multimedia\",\"M\u00fasica\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/\",\"name\":\"Reproductor multimedia con Arduino y ESP32 - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/20221204_175951-1.jpg\",\"datePublished\":\"2022-12-21T22:52:21+00:00\",\"dateModified\":\"2023-03-13T08:27:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/20221204_175951-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/20221204_175951-1.jpg\",\"width\":2180,\"height\":1586},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/reproductor-multimedia-con-arduino-y-esp32\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reproductor multimedia con Arduino y ESP32\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reproductor multimedia con Arduino y ESP32 - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/","og_locale":"es_ES","og_type":"article","og_title":"Reproductor multimedia con Arduino y ESP32 - Proyectos con Arduino.","og_description":"Por Alejandro Vargas Lugo y Agust\u00edn Triguero Noriega Introducci\u00f3n Nuestro sistema consiste en un reproductor multimedia que incorpora dos altavoces peque\u00f1os, permitiendo as\u00ed la reproducci\u00f3n de sonido est\u00e9reo mediante el uso de los pines&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2022-12-21T22:52:21+00:00","article_modified_time":"2023-03-13T08:27:49+00:00","og_image":[{"width":2180,"height":1586,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/"},"author":{"name":"","@id":""},"headline":"Reproductor multimedia con Arduino y ESP32","datePublished":"2022-12-21T22:52:21+00:00","dateModified":"2023-03-13T08:27:49+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/"},"wordCount":1490,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1.jpg","keywords":["DSE_GIC_Mostoles_2022-23","ESP32","Multimedia","M\u00fasica"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/","name":"Reproductor multimedia con Arduino y ESP32 - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1.jpg","datePublished":"2022-12-21T22:52:21+00:00","dateModified":"2023-03-13T08:27:49+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/20221204_175951-1.jpg","width":2180,"height":1586},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/reproductor-multimedia-con-arduino-y-esp32\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Reproductor multimedia con Arduino y ESP32"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=6212"}],"version-history":[{"count":4,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6212\/revisions"}],"predecessor-version":[{"id":6315,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6212\/revisions\/6315"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/6260"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=6212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=6212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=6212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}