        <style>
            #donation_buttons td{
                border:medium none;
                background: inherit !important;
            }
            #donation_buttons table{               
                border:medium none;
                margin: auto;
                width: auto;
            }
        </style>
        {"id":7147,"date":"2022-12-29T02:46:10","date_gmt":"2022-12-29T02:46:10","guid":{"rendered":"https:\/\/rogerbit.com\/wprb\/?p=7147"},"modified":"2022-12-29T02:46:10","modified_gmt":"2022-12-29T02:46:10","slug":"dfplayermini-x-bluetooth","status":"publish","type":"post","link":"https:\/\/rogerbit.com\/wprb\/2022\/12\/dfplayermini-x-bluetooth\/","title":{"rendered":"Control de reproductor de mp3 DFplayermini x bluetooth"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"Control de reproductor de mp3 DFplayermini x bluetooth (Incluye circuito impreso) - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/2jY46JFuo-I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<hr \/>\n<p>En este tutorial veremos como hacer un reproductor de archivos MP3 con el m\u00f3dulo DFplayer mini, arduino y un display oled de 128&#215;32 Veremos como armar el circuito impreso, provisto por PCBWay, analizaremos el c\u00f3digo fuente, y finalmente probaremos como funciona el dispositivo.<\/p>\n<p>Si quieres reproducir tu m\u00fasica en una playa privada o en reuniones, este reproductor de MP3 con m\u00f3dulo DFplayer y Arduino es el perfecto para ti. Incluye circuito impreso para que puedas fabricarlo t\u00fa mismo.<\/p>\n<p>Si quieres reproducir tu m\u00fasica en una playa privada o en reuniones, este reproductor de MP3 con m\u00f3dulo DFplayer y Arduino es el perfecto para ti. Incluye circuito impreso para que puedas fabricarlo t\u00fa mismo. Con \u00e9l puedes reproducir MP3.<\/p>\n<p>No te pierdas ning\u00fan video m\u00e1s suscr\u00edbete a nuestro canal de telegram <a href=\"https:\/\/t.me\/carlosvolt_electronica_robotica\">https:\/\/t.me\/carlosvolt_electronica_robotica<\/a><\/p>\n<hr \/>\n<p style=\"text-align: left;\">Tal vez pueda interesarte proyectos en arduino, pic, rob\u00f3tica, telecomunicaciones, suscribete en\u00a0<a href=\"http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1\">http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1<\/a>\u00a0mucho videos con c\u00f3digo fuentes completos y diagramas<\/p>\n<p style=\"text-align: left;\"><div id=\"ubm-banners-rotation-n1\" data-interval=\"4000\" class=\"ubm_banners_rotation\" style=\"overflow: hidden; width: 200px; height: 150px;\"><div id=\"3_ubm_banner\" class=\"ubm_rotating_banner\"><a href=\"https:\/\/bit.ly\/3aXRDAu\" target=\"_blank\" rel=\"dofollow\"><img src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/useful_banner_manager_banners\/3-2-logo youtube.png\" width=\"100%\" height=\"100%\" alt=\"SUSCRIBETE A NUESTRO CANAL DE YOUTUBE, TUTORIALES GRATIS\" \/><\/a><\/div><\/div><\/p>\n<hr \/>\n<p><strong>Componentes electr\u00f3nicos<\/strong><\/p>\n<p><strong>Arduino Nano<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6034\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg\" sizes=\"(max-width: 321px) 100vw, 321px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg 650w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-600x600.jpg 600w\" alt=\"\" width=\"321\" height=\"321\" \/><\/a><\/p>\n<p>El Arduino Nano es una placa peque\u00f1a, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x).\u00a0Tiene m\u00e1s o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente.\u00a0Solo carece de un conector de alimentaci\u00f3n de CC y funciona con un cable USB Mini-B en lugar de uno est\u00e1ndar.<\/p>\n<table>\n<tbody>\n<tr>\n<td>Microcontrolador<\/td>\n<td>ATmega328<\/td>\n<\/tr>\n<tr>\n<td>Arquitectura<\/td>\n<td>AVR<\/td>\n<\/tr>\n<tr>\n<td>Tensi\u00f3n de funcionamiento<\/td>\n<td>5 V<\/td>\n<\/tr>\n<tr>\n<td>Memoria flash<\/td>\n<td>32 KB de los cuales 2 KB utiliza el gestor de arranque<\/td>\n<\/tr>\n<tr>\n<td>SRAM<\/td>\n<td>2 KB<\/td>\n<\/tr>\n<tr>\n<td>Velocidad de reloj<\/td>\n<td>16 MHz<\/td>\n<\/tr>\n<tr>\n<td>Pines anal\u00f3gicos IN<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>EEPROM<\/td>\n<td>1 KB<\/td>\n<\/tr>\n<tr>\n<td>Corriente CC por pines de E \/ S<\/td>\n<td>40 mA (pines de E \/ S)<\/td>\n<\/tr>\n<tr>\n<td>Voltaje de entrada<\/td>\n<td>7-12 V<\/td>\n<\/tr>\n<tr>\n<td>Pines de E \/ S digitales<\/td>\n<td>22 (6 de los cuales son PWM)<\/td>\n<\/tr>\n<tr>\n<td>Salida PWM<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>El consumo de energ\u00eda<\/td>\n<td>19 mA<\/td>\n<\/tr>\n<tr>\n<td>Tama\u00f1o de PCB<\/td>\n<td>18 x 45 mm<\/td>\n<\/tr>\n<tr>\n<td>Peso<\/td>\n<td>7 g<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Diagrama de pines<\/h3>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-6033\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1024x1024.png\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1024x1024.png 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-150x150.png 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-300x300.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-768x768.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-600x600.png 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-820x820.png 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1320x1321.png 1320w\" alt=\"\" width=\"1024\" height=\"1024\" \/><\/a><\/p>\n<hr \/>\n<h4>Pines hembra<\/h4>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-6689\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin.jpg\" sizes=\"(max-width: 225px) 100vw, 225px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin.jpg 225w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin-150x150.jpg 150w\" alt=\"\" width=\"225\" height=\"225\" \/><\/p>\n<hr \/>\n<p><strong>Z\u00f3calo para arduino nano<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-6895\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo.jpg\" sizes=\"(max-width: 320px) 100vw, 320px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo.jpg 320w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo-300x225.jpg 300w\" alt=\"\" width=\"320\" height=\"240\" \/><\/p>\n<hr \/>\n<p><strong>Un resistor de 1 Kohm<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6933\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/1k.jpg\" sizes=\"(max-width: 199px) 100vw, 199px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/1k.jpg 500w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/1k-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/1k-150x150.jpg 150w\" alt=\"\" width=\"199\" height=\"199\" \/><\/p>\n<hr \/>\n<p><strong>Display oled sh1106<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6148\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled.jpg\" sizes=\"(max-width: 280px) 100vw, 280px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled.jpg 809w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled-300x285.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled-768x729.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/12\/display-oled-600x570.jpg 600w\" alt=\"\" width=\"280\" height=\"266\" \/><\/a><\/p>\n<p>Se trata de un m\u00f3dulo de pantalla OLED monocrom\u00e1tica DE 128\u00d764 puntos con interface I2C .Que presenta varias ventajas en comparaci\u00f3n con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un \u00e1ngulo de visi\u00f3n m\u00e1s amplio, y bajo consumo de energ\u00eda. ES\u00a0compatible con Arduino Rasberry Pi y microcontroladores PIC entre otros. Trabaja con niveles l\u00f3gicos de\u00a03.3V a 5V tiene un angulo de visi\u00f3n mayor a los\u00a0160 grados. el\u00a0Tama\u00f1o de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de\u00a03.3V a 5V Se lo puede usar en aplicaciones como\u00a0relojes inteligentes, MP3, term\u00f3metros, instrumentos, y proyectos varios, etc.<\/p>\n<p><strong>Librer\u00eda<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2015\/11\/U8glib.rar\">U8glib<\/a><\/p>\n<p><strong>Caracter\u00edsticas<\/strong><\/p>\n<ul>\n<li>Interface: I2C(3.3V \/ 5V logic level)<\/li>\n<li>Resolution: 128 x 64<\/li>\n<li>Angle of view: &gt;160 degree<\/li>\n<li>Display color: Blue<\/li>\n<li>Display size: 1.3 inch<\/li>\n<li>Driver IC: SH1106<\/li>\n<li>Power supply: DC\u00a03.3V~5V<\/li>\n<li>Operating temperature: -20~70\u2019C<\/li>\n<li>Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.<\/li>\n<\/ul>\n<hr \/>\n<p><strong>Siete pulsaodores<\/strong><\/p>\n<p><img src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/01\/b1720b-1-300x300.jpg\" \/><\/p>\n<hr \/>\n<p><strong>Una tarjeta micro SD<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7083\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/sd.jpg\" alt=\"\" width=\"257\" height=\"257\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/sd.jpg 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/sd-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/sd-150x150.jpg 150w\" sizes=\"(max-width: 257px) 100vw, 257px\" \/><\/p>\n<hr \/>\n<h4>M\u00f3dulos hc-05<\/h4>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6688\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hc-05.jpg\" sizes=\"(max-width: 323px) 100vw, 323px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hc-05.jpg 500w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hc-05-300x227.jpg 300w\" alt=\"\" width=\"323\" height=\"245\" \/><\/p>\n<ul>\n<li>Funciona como dispositivo maestro y esclavo\u00a0 bluetooth<\/li>\n<li>Configurable mediante comandos AT<\/li>\n<li>Bluetooth V2.0+EDR<\/li>\n<li>Frecuencia de operaci\u00f3n: 2.4 GHz Banda ISM<\/li>\n<li>Modulaci\u00f3n: GFSK (Gaussian Frequency Shift Keying)<\/li>\n<li>Potencia de transmisi\u00f3n: &lt;=4dBm, Class 2<\/li>\n<li>Sensibilidad: &lt;=-84dBm @ 0.1% BER<\/li>\n<li>Seguridad: Autenticaci\u00f3n y encriptaci\u00f3n<\/li>\n<li>Perfiles Bluetooth: Puerto serie bluetooth.<\/li>\n<li>Distancia de hasta 10 metros en condiciones \u00f3ptimas<\/li>\n<li>Voltaje de Operaci\u00f3n: 3.6 VDC a 6 VDC<\/li>\n<li>Consumo Corriente: 30 mA a 50mA<\/li>\n<li>Chip: BC417143<\/li>\n<li>Versi\u00f3n o firmware: 3.0-20170609<\/li>\n<li>Baudios por defecto: 38400<\/li>\n<li>Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.<\/li>\n<li>Interfaz: Serial TTL<\/li>\n<li>Antena: Integrada en el PCB<\/li>\n<li>Seguridad: Autenticaci\u00f3n y encriptaci\u00f3n (Contrase\u00f1a por defecto: 0000 o 1234)<\/li>\n<li>Temperatura de trabajo (Max): 75\u00b0C<\/li>\n<li>Temperatura de trabajo (Min): -20\u00b0C<\/li>\n<li>Dimensiones: 4.4 x 1.6 x 0.7 cm<\/li>\n<\/ul>\n<hr \/>\n<p><strong>PCB<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7092\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/pcb.png\" alt=\"\" width=\"452\" height=\"488\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/pcb.png 452w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/pcb-278x300.png 278w\" sizes=\"(max-width: 452px) 100vw, 452px\" \/><\/p>\n<p>Descargar archivo gerber &#8212;&gt;<a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/gerbermp3dfplayer.zip\">gerbermp3dfplayer<\/a><\/p>\n<hr \/>\n<p><strong>Circuito<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-7096\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/circuito-1024x395.png\" alt=\"\" width=\"1024\" height=\"395\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/circuito-1024x395.png 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/circuito-300x116.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/circuito-768x296.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/circuito-820x316.png 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/circuito.png 1060w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<hr \/>\n<p><strong>C\u00f3digo Fuente del proyecto\u00a0<\/strong><\/p>\n<pre class=\"lang:arduino decode:true\" title=\"C\u00f3digo Fuente\">#include \"U8glib.h\"\/\/Librer\u00eda para el control del display oled\r\nU8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);\/\/ I2C \/ TWI Se habilita esta linea seg\u00fan el display a usar en este caso el driver SH1106    \r\n#include \"Arduino.h\"\r\n#include \"SoftwareSerial.h\"\r\n#include \"DFRobotDFPlayerMini.h\"\r\nString texto = \"\";\r\nint vol = 10;\r\nString cadena; \r\nSoftwareSerial mySoftwareSerial(10, 11); \/\/ RX, TX pines por software para la comunicaci\u00f3n con el m\u00f3dulo dfplayer mini\r\nDFRobotDFPlayerMini myDFPlayer;\r\nint play_d2 = 2;\r\nint pause_d9 = 9;\r\nint stop_d4 = 4;\r\nint next_d5 = 5;\r\nint prev_d6 = 6;\r\nint voltmas_d7 = 7;\r\nint volmenos_d8 = 8;\r\nint estado_pausa = 0;\r\nvoid setup()\r\n{\r\n  mySoftwareSerial.begin(9600);\r\n  Serial.begin(9600);\/\/Velocidad del m\u00f3dulo bluetooth \r\n  pinMode(play_d2, INPUT_PULLUP);\r\n  pinMode(pause_d9, INPUT_PULLUP);\r\n  pinMode(stop_d4, INPUT_PULLUP);\r\n  pinMode(next_d5, INPUT_PULLUP);\r\n  pinMode(prev_d6, INPUT_PULLUP);\r\n  pinMode(voltmas_d7, INPUT_PULLUP);\r\n  pinMode(volmenos_d8, INPUT_PULLUP);\r\n  Serial.println();\r\n  Serial.println(F(\"Inicializando DFPlayer mini\"));\r\n\r\n  if (!myDFPlayer.begin(mySoftwareSerial)) {  \/\/Usa softwareSerial para communicarte con el m\u00f3dulo mp3.\r\n    Serial.println(F(\"No es posible iniciar:\"));\r\n    Serial.println(F(\"1.Comprueba las conexiones\"));\r\n    Serial.println(F(\"2.Por favor inserte una tarjeta SD\"));\r\n    while(true);\r\n  }\r\n  Serial.println(F(\"DFPlayer Mini online.\"));\r\n\r\n  myDFPlayer.volume(vol);  \/\/Se setea el volumen\r\n  \/\/Se mostrar\u00e1 el siguente texto en el display\r\n  texto = \"NO TRACK\";\r\n  oled();\r\n}\r\n\r\nvoid loop()\r\n{\r\n   while (Serial.available()) {  \r\n    delay(3);                  \r\n    char c = Serial.read(); \r\n    cadena += c;        \r\n  }\r\n  \/\/Lectura del estado de los pulsadores\r\n  int boton_play = digitalRead(play_d2);\r\n  int boton_pause = digitalRead(pause_d9);\r\n  int boton_stop = digitalRead(stop_d4);\r\n  int boton_next = digitalRead(next_d5);\r\n  int boton_prev = digitalRead(prev_d6);\r\n  int boton_volmas = digitalRead(voltmas_d7);\r\n  int boton_volmenos = digitalRead(volmenos_d8);\r\n\/\/Si se aprieta el bot\u00f3n de play se cumple  \r\n  if(boton_play == LOW || cadena == \"play\"){\r\n    delay(100);\r\n    myDFPlayer.enableLoopAll();\r\n    myDFPlayer.play();\r\ntexto = \"PLAY\";\/\/Se mostrar\u00e1 el siguente texto en el display\r\noled();  \r\n    }\r\n\/\/Pone en pausa el track de m\u00fasica\r\n  if(boton_pause == LOW || cadena == \"pause\"){\r\n    if(estado_pausa == 0){\r\n    delay(200);\r\n    myDFPlayer.pause();\r\n    texto = \"PAUSE\";\r\n    oled();\r\n    estado_pausa = 1;\r\n    }else{\r\n    delay(200);\r\n    myDFPlayer.start();\/\/Vuelve a iniciar el tema donde qued\u00f3 la pausa\r\n    texto = \"PLAY\";\r\n    oled();\r\n    estado_pausa = 0;\r\n    }\r\n    }\r\n\/\/Para el track de m\u00fasica que se estaba repoduciendo  \r\n  if(boton_stop == LOW || cadena == \"stop\"){\r\n    delay(100);\r\n    myDFPlayer.stop();\r\n    texto = \"STOP\";\r\n    oled();\r\n    }\r\n\/\/Reproduce el pr\u00f3ximo tack de m\u00fasica  \r\n  if(boton_next == LOW || cadena == \"next\"){\r\n    delay(100);\r\n    myDFPlayer.next();\r\n    texto = \"NEXT\";\r\n    oled();\r\n    delay(500);\r\n    texto = \"PLAY\";\r\n    oled();\r\n    }\r\n\/\/Reproduce el anterior tack de m\u00fasica\r\n  if(boton_prev == LOW || cadena == \"prev\"){\r\n    delay(100);\r\n    myDFPlayer.previous();\r\n    texto = \"PREV\";\r\n    oled();\r\n    delay(500);\r\n    texto = \"PLAY\";\r\n    oled();\r\n    }\r\n\/\/Incrementa el v\u00f3lumen hasta 35 como m\u00e1ximo\r\n  if(boton_volmas == LOW || cadena == \"volmas\"){\r\n    delay(100);\r\n    if(vol &lt;35){\r\n    myDFPlayer.volumeUp();\r\n    vol = vol + 1;\r\n    oled();\r\n    }\r\n    }\r\n\/\/Decrementa el v\u00f3lumen hasta 0 como m\u00ednimo\r\n  if(boton_volmenos == LOW || cadena == \"volmenos\"){\r\n    delay(100);\r\n    if(vol &gt;0){\r\n    myDFPlayer.volumeDown();\r\n    vol = vol - 1;\r\n    oled();\r\n    }\r\n    }\r\n\/\/Habilita la reproducci\u00f3n la aleatoria\r\n    if(cadena == \"random\"){\r\n    delay(100);\r\n    myDFPlayer.randomAll();\r\n    texto = \"RANDOM\";\r\n    oled();\r\n    }\r\n\/\/Habilita la reproducci\u00f3n en bucle\r\n    if(cadena == \"eloop\"){\r\n    delay(100);\r\n    myDFPlayer.enableLoopAll();\r\n    texto = \"E.LOOP\";\r\n    oled();\r\n    } \r\n\/\/deshabilita la reproducci\u00f3n en bucle\r\n    if(cadena == \"dloop\"){\r\n    delay(100);\r\n    myDFPlayer.disableLoopAll();\r\n    texto = \"D.LOOP\";\r\n    oled();\r\n    } \r\n\/\/Funciones de equalizador\r\n\/\/Habilita Normal\r\n  if(cadena == \"normal\"){\r\n    delay(100);\r\n    myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);\r\n    texto = \"NORMAL\";\r\n    oled();\r\n    }\r\n\/\/Habilita Pop\r\n  if(cadena == \"pop\"){\r\n    delay(100);\r\n    myDFPlayer.EQ(DFPLAYER_EQ_POP);\r\n    texto = \"POP\";\r\n    oled();\r\n    }\r\n\/\/Habilita Rock\r\n   if(cadena == \"rock\"){\r\n    delay(100);\r\n    myDFPlayer.EQ(DFPLAYER_EQ_ROCK);\r\n    texto = \"ROCK\";\r\n    oled();\r\n    }\r\n\/\/Habilita Jazz\r\n    if(cadena == \"jazz\"){\r\n    delay(100);\r\n    myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);\r\n    texto = \"JAZZ\";\r\n    oled();\r\n    }\r\n\/\/Habilita Classic\r\n    if(cadena == \"classic\"){\r\n    delay(100);\r\n    myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);\r\n    texto = \"CLASSIC\";\r\n    oled();\r\n    }\r\n\/\/Habilita Bass\r\n    if(cadena == \"bass\"){\r\n    delay(100);\r\n    myDFPlayer.EQ(DFPLAYER_EQ_BASS);\r\n    texto = \"BASS\";\r\n    oled();\r\n    } \r\n if(cadena != \"\"){\r\n  cadena = \"\";\r\n }     \r\n }\r\n\r\n\r\n\/\/Func\u00edon para mostrar texto en el dislplay oled\r\nvoid oled(){\r\nu8g.firstPage();  \r\n  do {\r\n    draw();\/\/Llama a la funci\u00f3n draw\r\n  } while( u8g.nextPage() );\r\n  \/\/ Reconstruir la imagen despu\u00e9s de un tiempo\r\n  delay(50);\r\n  }\r\n\r\n void draw(void) {\r\n  \/\/Imprimimos en pantalla\r\n  u8g.setFont(u8g_font_unifont);\r\n    u8g.setPrintPos(0, 20); \r\n  u8g.print(\"REPRODUCTOR MP3\");\/\/\r\n  \/\/Muestra la palabra ESTADO\r\n  u8g.setPrintPos(0, 40); \r\n  u8g.print(\"ESTADO: \");\/\/\r\n  u8g.setPrintPos(55, 40);\r\n  u8g.print(texto);\/\/Estado de reproducci\u00f3n del track de m\u00fasica PLAY STOP PAUSE\r\n\/\/Muestra la palabra de VOLUMEN\r\n  u8g.setPrintPos(0, 60);\r\n  u8g.print(\"VOLUMEN:\"); \r\n  u8g.setPrintPos(65, 60);\r\n  u8g.print(vol);\/\/Muestra el incremento o decremento del volumen de reproducci\u00f3n\r\n  }<\/pre>\n<hr \/>\n<p><strong>Un m\u00f3dulo DFPlayermini<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7084\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/dfplayermini.jpg\" alt=\"\" width=\"257\" height=\"257\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/dfplayermini.jpg 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/dfplayermini-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/dfplayermini-150x150.jpg 150w\" sizes=\"(max-width: 257px) 100vw, 257px\" \/><\/p>\n<h1 id=\"target_0\">Introducci\u00f3n<\/h1>\n<p>El\u00a0<strong><a href=\"https:\/\/www.dfrobot.com\/product-1121.html\">DFPlayer Mini MP3 Player para Arduino<\/a><\/strong>\u00a0es un m\u00f3dulo MP3 peque\u00f1o y de bajo precio con una salida simplificada directamente al altavoz.\u00a0El m\u00f3dulo se puede usar como un m\u00f3dulo independiente con bater\u00eda, altavoz y botones conectados o se puede usar en combinaci\u00f3n con un\u00a0<a href=\"https:\/\/www.dfrobot.com\/product-610.html\"><strong>Arduino UNO<\/strong><\/a>\u00a0o cualquier otro con capacidades RX\/TX.<\/p>\n<h2 id=\"target_1\">Especificaci\u00f3n<\/h2>\n<ul>\n<li>frecuencias de muestreo admitidas (kHz): 8\/11.025\/12\/16\/22.05\/24\/32\/44.1\/48<\/li>\n<li>Salida DAC de 24 bits, soporte para rango din\u00e1mico 90dB, soporte SNR 85dB<\/li>\n<li>totalmente compatible con el sistema de archivos FAT16, FAT32, soporte m\u00e1ximo 32G de la tarjeta TF, soporte 32G de disco U, 64M bytes NORFLASH<\/li>\n<li>una variedad de modos de control, modo de control de E\/S, modo serial, modo de\u00a0control de\u00a0<a href=\"https:\/\/www.dfrobot.com\/product-2267.html\">bot\u00f3n AD<\/a><\/li>\n<li>Funci\u00f3n de espera de sonido publicitario, la m\u00fasica se puede suspender.\u00a0cuando termine la publicidad en la musica seguir sonando<\/li>\n<li>datos de audio ordenados por carpeta, admite hasta 100 carpetas, cada carpeta puede contener hasta 255 canciones<\/li>\n<li>Volumen ajustable de 30 niveles, ecualizador de 6 niveles ajustable<\/li>\n<\/ul>\n<h2 id=\"target_2\">Solicitud<\/h2>\n<ul>\n<li>Transmisi\u00f3n de voz de navegaci\u00f3n de autom\u00f3viles;<\/li>\n<li>Inspectores de transporte por carretera, avisos de voz de las estaciones de peaje;<\/li>\n<li>Estaci\u00f3n de tren, avisos de voz de inspecci\u00f3n de seguridad del autob\u00fas;<\/li>\n<li>Electricidad, comunicaciones, avisos de voz de la sala de negocios financieros;<\/li>\n<li>Veh\u00edculo dentro y fuera del canal verifique que la voz lo indique;<\/li>\n<li>Las indicaciones de voz del canal de control fronterizo de seguridad p\u00fablica;<\/li>\n<li>Alarma de voz multicanal o voz de gu\u00eda de operaci\u00f3n del equipo;<\/li>\n<li>Los avisos de voz de conducci\u00f3n segura del coche tur\u00edstico el\u00e9ctrico;<\/li>\n<li>Alarma de falla de equipos electromec\u00e1nicos;<\/li>\n<li>Indicaciones de voz de alarma contra incendios;<\/li>\n<li>El equipo de transmisi\u00f3n autom\u00e1tica, transmisi\u00f3n regular.<\/li>\n<\/ul>\n<h2 id=\"target_3\">Pin mapa<\/h2>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7085\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/pinout.png\" alt=\"\" width=\"284\" height=\"168\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/pinout.png 641w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/pinout-300x177.png 300w\" sizes=\"(max-width: 284px) 100vw, 284px\" \/><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7086\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/caracteristicas.png\" alt=\"\" width=\"697\" height=\"585\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/caracteristicas.png 697w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/caracteristicas-300x252.png 300w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><\/p>\n<h2 id=\"target_4\">Modo de trabajo<\/h2>\n<h3 id=\"1-serial-mode\">1. Modo serie<\/h3>\n<p>Compatibilidad con el modo de comunicaci\u00f3n en serie as\u00edncrono a trav\u00e9s de comandos de env\u00edo en serie de PC Est\u00e1ndar de comunicaci\u00f3n: 9600 bps Bits de datos: 1 Pago: ninguno Control de flujo: ninguno<\/p>\n<ul>\n<li>Descripci\u00f3n de la instrucci\u00f3n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7087\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/1.png\" alt=\"\" width=\"857\" height=\"429\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/1.png 857w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/1-300x150.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/1-768x384.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/1-820x410.png 820w\" sizes=\"(max-width: 857px) 100vw, 857px\" \/><\/p>\n<ul>\n<li>Comando de control en serie<\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7088\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/2.png\" alt=\"\" width=\"620\" height=\"483\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/2.png 620w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/2-300x234.png 300w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><\/p>\n<ul>\n<li>Comando de consulta en serie<\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7089\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/3.png\" alt=\"\" width=\"645\" height=\"529\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/3.png 645w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/3-300x246.png 300w\" sizes=\"(max-width: 645px) 100vw, 645px\" \/><\/p>\n<h3 id=\"2-ad-key-mode\">2. Modo CLAVE AD<\/h3>\n<p>Usamos las teclas del m\u00f3dulo AD, en lugar del m\u00e9todo tradicional de conexi\u00f3n de teclado de matriz, es para aprovechar la funcionalidad MCU AD cada vez m\u00e1s potente, nuestro m\u00f3dulo configuraci\u00f3n predeterminada 2 puertos AD, distribuci\u00f3n de resistencia de 20 teclas.<\/p>\n<ul>\n<li>Consulte el diagrama<\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-7090\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/4-1024x441.png\" alt=\"\" width=\"1024\" height=\"441\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/4-1024x441.png 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/4-300x129.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/4-768x330.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/4-820x353.png 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/4.png 1290w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><strong>nota: la pulsaci\u00f3n breve significa pre\/siguiente, y la pulsaci\u00f3n prolongada significa vol-,vol +<\/strong><\/p>\n<h2 id=\"target_5\">Diagrama de conexi\u00f3n<\/h2>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7091\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/5.png\" alt=\"\" width=\"800\" height=\"501\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/5.png 800w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/5-300x188.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/5-768x481.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Nota: Para un uso simple, el diagrama superior est\u00e1 listo, pero si encuentra que el ruido es bastante alto, puede conectar una resistencia de 1K al pin TX.<\/p>\n<h2 id=\"target_6\">Copie su mp3 en su tarjeta micro SD<\/h2>\n<p><strong>NOTA<\/strong>\u00a0: El orden en que copie el mp3 en la tarjeta micro SD afectar\u00e1 el orden en que se reproducir\u00e1 el mp3, lo que significa que la funci\u00f3n reproducir (1) reproducir\u00e1 el primer mp3 copiado en la tarjeta micro SD.<\/p>\n<h3 id=\"for-mac-user\">Para usuarios de Mac<\/h3>\n<table>\n<tbody>\n<tr class=\"odd\">\n<td><strong>NOTA<\/strong>\u00a0: Si est\u00e1 utilizando Mac OS X para copiar el mp3, el sistema de archivos agregar\u00e1 autom\u00e1ticamente archivos ocultos como: &#8220;._0001.mp3&#8221; para el \u00edndice, que este m\u00f3dulo manejar\u00e1 como archivos mp3 v\u00e1lidos.\u00a0Es realmente molesto.\u00a0Entonces puede ejecutar el siguiente comando en la terminal para eliminar esos archivos.<\/p>\n<div id=\"cb1\" class=\"sourceCode\">\n<pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><a id=\"cb1-1\" class=\"sourceLine\" data-line-number=\"1\"><\/a><span class=\"ex\">dot_clean<\/span> \/Volumes\/<span class=\"op\">&lt;<\/span>SDVolumeName<span class=\"op\">&gt;<\/span><\/code><\/pre>\n<\/div>\n<p>Por favor reemplace elal nombre del volumen de su tarjeta SD.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"target_7\">C\u00f3digo de muestra<\/h2>\n<p>Hemos creado una biblioteca Arduino para DFPlayer Mini para simplificar el m\u00e9todo para que funcione.\u00a0Conecte el hardware como se muestra en la imagen de arriba y juegue con el c\u00f3digo de muestra.\u00a0Puede descargar la biblioteca m\u00e1s reciente aqu\u00ed:\u00a0<a href=\"https:\/\/github.com\/DFRobot\/DFRobotDFPlayerMini\/archive\/1.0.3.zip\">DFRobotDFPlayerMini<\/a>\u00a0.<\/p>\n<h4 id=\"sample-code-getstarted-switching-to-next-song-every-3-seconds\">Ejemplo de c\u00f3digo &#8220;GetStarted&#8221;, cambiando a la siguiente canci\u00f3n cada 3 segundos<\/h4>\n<div class=\"code-toolbar\">\n<pre class=\"lang:default decode:true \">\/***************************************************\r\nDFPlayer - A Mini MP3 Player For Arduino\r\n &lt;https:\/\/www.dfrobot.com\/index.php?route=product\/product&amp;product_id=1121&gt;\r\n\r\n ***************************************************\r\n This example shows the basic function of library for DFPlayer.\r\n\r\n Created 2016-12-07\r\n By [Angelo qiao](Angelo.qiao@dfrobot.com)\r\n\r\n GNU Lesser General Public License.\r\n See &lt;http:\/\/www.gnu.org\/licenses\/&gt; for details.\r\n All above must be included in any redistribution\r\n ****************************************************\/\r\n\r\n\/***********Notice and Trouble shooting***************\r\n 1.Connection and Diagram can be found here\r\n &lt;https:\/\/www.dfrobot.com\/wiki\/index.php\/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram&gt;\r\n 2.This code is tested on Arduino Uno, Leonardo, Mega boards.\r\n ****************************************************\/\r\n\r\n#include \"Arduino.h\"\r\n#include \"SoftwareSerial.h\"\r\n#include \"DFRobotDFPlayerMini.h\"\r\n\r\nSoftwareSerial mySoftwareSerial(10, 11); \/\/ RX, TX\r\nDFRobotDFPlayerMini myDFPlayer;\r\nvoid printDetail(uint8_t type, int value);\r\n\r\nvoid setup()\r\n{\r\n  mySoftwareSerial.begin(9600);\r\n  Serial.begin(115200);\r\n\r\n  Serial.println();\r\n  Serial.println(F(\"DFRobot DFPlayer Mini Demo\"));\r\n  Serial.println(F(\"Initializing DFPlayer ... (May take 3~5 seconds)\"));\r\n\r\n  if (!myDFPlayer.begin(mySoftwareSerial)) {  \/\/Use softwareSerial to communicate with mp3.\r\n    Serial.println(F(\"Unable to begin:\"));\r\n    Serial.println(F(\"1.Please recheck the connection!\"));\r\n    Serial.println(F(\"2.Please insert the SD card!\"));\r\n    while(true);\r\n  }\r\n  Serial.println(F(\"DFPlayer Mini online.\"));\r\n\r\n  myDFPlayer.volume(10);  \/\/Set volume value. From 0 to 30\r\n  myDFPlayer.play(1);  \/\/Play the first mp3\r\n}\r\n\r\nvoid loop()\r\n{\r\n  static unsigned long timer = millis();\r\n\r\n  if (millis() - timer &gt; 3000) {\r\n    timer = millis();\r\n    myDFPlayer.next();  \/\/Play next mp3 every 3 second.\r\n  }\r\n\r\n  if (myDFPlayer.available()) {\r\n    printDetail(myDFPlayer.readType(), myDFPlayer.read()); \/\/Print the detail message from DFPlayer to handle different errors and states.\r\n  }\r\n}\r\n\r\nvoid printDetail(uint8_t type, int value){\r\n  switch (type) {\r\n    case TimeOut:\r\n      Serial.println(F(\"Time Out!\"));\r\n      break;\r\n    case WrongStack:\r\n      Serial.println(F(\"Stack Wrong!\"));\r\n      break;\r\n    case DFPlayerCardInserted:\r\n      Serial.println(F(\"Card Inserted!\"));\r\n      break;\r\n    case DFPlayerCardRemoved:\r\n      Serial.println(F(\"Card Removed!\"));\r\n      break;\r\n    case DFPlayerCardOnline:\r\n      Serial.println(F(\"Card Online!\"));\r\n      break;\r\n    case DFPlayerPlayFinished:\r\n      Serial.print(F(\"Number:\"));\r\n      Serial.print(value);\r\n      Serial.println(F(\" Play Finished!\"));\r\n      break;\r\n    case DFPlayerError:\r\n      Serial.print(F(\"DFPlayerError:\"));\r\n      switch (value) {\r\n        case Busy:\r\n          Serial.println(F(\"Card not found\"));\r\n          break;\r\n        case Sleeping:\r\n          Serial.println(F(\"Sleeping\"));\r\n          break;\r\n        case SerialWrongStack:\r\n          Serial.println(F(\"Get Wrong Stack\"));\r\n          break;\r\n        case CheckSumNotMatch:\r\n          Serial.println(F(\"Check Sum Not Match\"));\r\n          break;\r\n        case FileIndexOut:\r\n          Serial.println(F(\"File Index Out of Bound\"));\r\n          break;\r\n        case FileMismatch:\r\n          Serial.println(F(\"Cannot Find File\"));\r\n          break;\r\n        case Advertise:\r\n          Serial.println(F(\"In Advertise\"));\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n}<\/pre>\n<h4 id=\"sample-code-fullfunction-including-all-the-functions-please-read-the-comments-and-documents-in-detail\">Ejemplo de c\u00f3digo &#8220;FullFunction&#8221;, incluidas todas las funciones.\u00a0Por favor, lea los comentarios y documentos en detalle.<\/h4>\n<pre class=\"lang:default decode:true \">\/***************************************************\r\n DFPlayer - A Mini MP3 Player For Arduino\r\n &lt;https:\/\/www.dfrobot.com\/index.php?route=product\/product&amp;product_id=1121&gt;\r\n\r\n ***************************************************\r\n This example shows the all the function of library for DFPlayer.\r\n\r\n Created 2016-12-07\r\n By [Angelo qiao](Angelo.qiao@dfrobot.com)\r\n\r\n GNU Lesser General Public License.\r\n See &lt;http:\/\/www.gnu.org\/licenses\/&gt; for details.\r\n All above must be included in any redistribution\r\n ****************************************************\/\r\n\r\n\/***********Notice and Trouble shooting***************\r\n 1.Connection and Diagram can be found here\r\n&lt;https:\/\/www.dfrobot.com\/wiki\/index.php\/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram&gt;\r\n 2.This code is tested on Arduino Uno, Leonardo, Mega boards.\r\n ****************************************************\/\r\n\r\n#include \"Arduino.h\"\r\n#include \"SoftwareSerial.h\"\r\n#include \"DFRobotDFPlayerMini.h\"\r\n\r\nSoftwareSerial mySoftwareSerial(10, 11); \/\/ RX, TX\r\nDFRobotDFPlayerMini myDFPlayer;\r\nvoid printDetail(uint8_t type, int value);\r\n\r\nvoid setup()\r\n{\r\n  mySoftwareSerial.begin(9600);\r\n  Serial.begin(115200);\r\n\r\n  Serial.println();\r\n  Serial.println(F(\"DFRobot DFPlayer Mini Demo\"));\r\n  Serial.println(F(\"Initializing DFPlayer ... (May take 3~5 seconds)\"));\r\n\r\n  if (!myDFPlayer.begin(mySoftwareSerial)) {  \/\/Use softwareSerial to communicate with mp3.\r\n    Serial.println(F(\"Unable to begin:\"));\r\n    Serial.println(F(\"1.Please recheck the connection!\"));\r\n    Serial.println(F(\"2.Please insert the SD card!\"));\r\n    while(true);\r\n  }\r\n  Serial.println(F(\"DFPlayer Mini online.\"));\r\n\r\n  myDFPlayer.setTimeOut(500); \/\/Set serial communictaion time out 500ms\r\n\r\n  \/\/----Set volume----\r\n  myDFPlayer.volume(10);  \/\/Set volume value (0~30).\r\n  myDFPlayer.volumeUp(); \/\/Volume Up\r\n  myDFPlayer.volumeDown(); \/\/Volume Down\r\n\r\n  \/\/----Set different EQ----\r\n  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);\r\n\/\/  myDFPlayer.EQ(DFPLAYER_EQ_POP);\r\n\/\/  myDFPlayer.EQ(DFPLAYER_EQ_ROCK);\r\n\/\/  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);\r\n\/\/  myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);\r\n\/\/  myDFPlayer.EQ(DFPLAYER_EQ_BASS);\r\n\r\n  \/\/----Set device we use SD as default----\r\n\/\/  myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);\r\n  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);\r\n\/\/  myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX);\r\n\/\/  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP);\r\n\/\/  myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH);\r\n\r\n  \/\/----Mp3 control----\r\n\/\/  myDFPlayer.sleep();     \/\/sleep\r\n\/\/  myDFPlayer.reset();     \/\/Reset the module\r\n\/\/  myDFPlayer.enableDAC();  \/\/Enable On-chip DAC\r\n\/\/  myDFPlayer.disableDAC();  \/\/Disable On-chip DAC\r\n\/\/  myDFPlayer.outputSetting(true, 15); \/\/output setting, enable the output and set the gain to 15\r\n\r\n  \/\/----Mp3 play----\r\n  myDFPlayer.next();  \/\/Play next mp3\r\n  delay(1000);\r\n  myDFPlayer.previous();  \/\/Play previous mp3\r\n  delay(1000);\r\n  myDFPlayer.play(1);  \/\/Play the first mp3\r\n  delay(1000);\r\n  myDFPlayer.loop(1);  \/\/Loop the first mp3\r\n  delay(1000);\r\n  myDFPlayer.pause();  \/\/pause the mp3\r\n  delay(1000);\r\n  myDFPlayer.start();  \/\/start the mp3 from the pause\r\n  delay(1000);\r\n  myDFPlayer.playFolder(15, 4);  \/\/play specific mp3 in SD:\/15\/004.mp3; Folder Name(1~99); File Name(1~255)\r\n  delay(1000);\r\n  myDFPlayer.enableLoopAll(); \/\/loop all mp3 files.\r\n  delay(1000);\r\n  myDFPlayer.disableLoopAll(); \/\/stop loop all mp3 files.\r\n  delay(1000);\r\n  myDFPlayer.playMp3Folder(4); \/\/play specific mp3 in SD:\/MP3\/0004.mp3; File Name(0~65535)\r\n  delay(1000);\r\n  myDFPlayer.advertise(3); \/\/advertise specific mp3 in SD:\/ADVERT\/0003.mp3; File Name(0~65535)\r\n  delay(1000);\r\n  myDFPlayer.stopAdvertise(); \/\/stop advertise\r\n  delay(1000);\r\n  myDFPlayer.playLargeFolder(2, 999); \/\/play specific mp3 in SD:\/02\/004.mp3; Folder Name(1~10); File Name(1~1000)\r\n  delay(1000);\r\n  myDFPlayer.loopFolder(5); \/\/loop all mp3 files in folder SD:\/05.\r\n  delay(1000);\r\n  myDFPlayer.randomAll(); \/\/Random play all the mp3.\r\n  delay(1000);\r\n  myDFPlayer.enableLoop(); \/\/enable loop.\r\n  delay(1000);\r\n  myDFPlayer.disableLoop(); \/\/disable loop.\r\n  delay(1000);\r\n\r\n  \/\/----Read imformation----\r\n  Serial.println(myDFPlayer.readState()); \/\/read mp3 state\r\n  Serial.println(myDFPlayer.readVolume()); \/\/read current volume\r\n  Serial.println(myDFPlayer.readEQ()); \/\/read EQ setting\r\n  Serial.println(myDFPlayer.readFileCounts()); \/\/read all file counts in SD card\r\n  Serial.println(myDFPlayer.readCurrentFileNumber()); \/\/read current play file number\r\n  Serial.println(myDFPlayer.readFileCountsInFolder(3)); \/\/read fill counts in folder SD:\/03\r\n}\r\n\r\nvoid loop()\r\n{\r\n  static unsigned long timer = millis();\r\n\r\n  if (millis() - timer &gt; 3000) {\r\n    timer = millis();\r\n    myDFPlayer.next();  \/\/Play next mp3 every 3 second.\r\n  }\r\n\r\n  if (myDFPlayer.available()) {\r\n    printDetail(myDFPlayer.readType(), myDFPlayer.read()); \/\/Print the detail message from DFPlayer to handle different errors and states.\r\n  }\r\n}\r\n\r\nvoid printDetail(uint8_t type, int value){\r\n  switch (type) {\r\n    case TimeOut:\r\n      Serial.println(F(\"Time Out!\"));\r\n      break;\r\n    case WrongStack:\r\n      Serial.println(F(\"Stack Wrong!\"));\r\n      break;\r\n    case DFPlayerCardInserted:\r\n      Serial.println(F(\"Card Inserted!\"));\r\n      break;\r\n    case DFPlayerCardRemoved:\r\n      Serial.println(F(\"Card Removed!\"));\r\n      break;\r\n    case DFPlayerCardOnline:\r\n      Serial.println(F(\"Card Online!\"));\r\n      break;\r\n    case DFPlayerPlayFinished:\r\n      Serial.print(F(\"Number:\"));\r\n      Serial.print(value);\r\n      Serial.println(F(\" Play Finished!\"));\r\n      break;\r\n    case DFPlayerError:\r\n      Serial.print(F(\"DFPlayerError:\"));\r\n      switch (value) {\r\n        case Busy:\r\n          Serial.println(F(\"Card not found\"));\r\n          break;\r\n        case Sleeping:\r\n          Serial.println(F(\"Sleeping\"));\r\n          break;\r\n        case SerialWrongStack:\r\n          Serial.println(F(\"Get Wrong Stack\"));\r\n          break;\r\n        case CheckSumNotMatch:\r\n          Serial.println(F(\"Check Sum Not Match\"));\r\n          break;\r\n        case FileIndexOut:\r\n          Serial.println(F(\"File Index Out of Bound\"));\r\n          break;\r\n        case FileMismatch:\r\n          Serial.println(F(\"Cannot Find File\"));\r\n          break;\r\n        case Advertise:\r\n          Serial.println(F(\"In Advertise\"));\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n}<\/pre>\n<p><strong>NOTA<\/strong>\u00a0: El nombre de la carpeta debe ser mp3, ubicado en el directorio ra\u00edz de la tarjeta SD, y el nombre del archivo mp3 debe tener 4 d\u00edgitos, por ejemplo, &#8220;0001.mp3&#8221;, ubicado en la carpeta mp3.\u00a0Si desea nombrarlo tanto en ingl\u00e9s como en chino, puede agregarlo despu\u00e9s del n\u00famero, por ejemplo, &#8220;0001hello.mp3&#8221; o &#8220;0001\u540e\u6765.mp3&#8221;.<\/p>\n<hr \/>\n<div class=\"page-sidebar widget\" id=\"donation_buttons\"><form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\" ><input type=\"hidden\" name=\"business\" value=\"donacion@rogerbit.com\"><input type=\"hidden\" name=\"bn\" value=\"mbjtechnolabs_SP\"><input type=\"hidden\" name=\"cmd\" value=\"_donations\"><input type=\"hidden\" name=\"item_name\" value=\"Ayuda a RogerBit.com\"><input type=\"hidden\" name=\"item_number\" value=\"www.rogerbit.com\"><input type=\"hidden\" class=\"set_donation_button_amount\" name=\"amount\" value=\"1\"><table ><tbody><tr><td><label for=\"rogerBit necesita de tu ayuda para seguir existiendo :-)\">rogerBit necesita de tu ayuda para seguir existiendo :-)<\/label><\/td><\/tr><\/tbody><\/table><table ><tbody><tr><td><input style=\"margin-top:10px;\" type=\"image\" name=\"submit\" border=\"0\" src=\"https:\/\/www.paypal.com\/en_US\/i\/btn\/btn_donateCC_LG.gif\" alt=\"PayPal - The safer, easier way to pay online\"><\/td><\/tr><\/tbody><\/table><input type=\"hidden\" name=\"currency_code\" value=\"USD\"><input type=\"hidden\" name=\"notify_url\" value=\"https:\/\/rogerbit.com\/wprb\/?Donation_Button&#038;action=ipn_handler\"><\/form><\/div>\n<hr \/>\n<p><strong>PROYECTO RECOMENDADO<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"Reproductor de MP3 con m\u00f3dulo DFplayer mini y Arduino (Incluye circuito impreso) - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/IWwDr4Y60Lo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<\/div>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>En este tutorial veremos como hacer un reproductor de archivos MP3 con el m\u00f3dulo DFplayer mini, arduino y un display oled de 128&#215;32 Veremos como armar el circuito impreso, provisto por PCBWay, analizaremos el c\u00f3digo fuente, y finalmente probaremos como funciona el dispositivo. Si quieres reproducir tu m\u00fasica en una playa privada o en reuniones, [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":7151,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[45,81,181,486,906,717,1503,1505,1504,443,1415,624,630,1509,1507,1508,1066,917,1458,1459,1506,31,687],"_links":{"self":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7147"}],"collection":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/comments?post=7147"}],"version-history":[{"count":3,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7147\/revisions"}],"predecessor-version":[{"id":7152,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7147\/revisions\/7152"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media\/7151"}],"wp:attachment":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media?parent=7147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/categories?post=7147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/tags?post=7147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}