En este tutorial, aprenderás a construir un servidor web usando el ESP32 para controlar el módulo YX5300, un reproductor de audio MP3 controlado por serial. Este proyecto te permitirá gestionar la reproducción de archivos MP3 almacenados en una tarjeta microSD, directamente desde una interfaz web accesible desde cualquier dispositivo conectado a la misma red Wi-Fi.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
El ESP32, con su potente capacidad de procesamiento y conectividad inalámbrica, será el cerebro de este proyecto, mientras que el módulo YX5300 se encargará de reproducir la música o los efectos de sonido que desees. Mediante una serie de comandos seriales enviados desde el ESP32, podrás reproducir, pausar, detener, avanzar o retroceder en las pistas de audio, así como ajustar el volumen, todo ello de manera sencilla y efectiva.
Este proyecto es ideal para aplicaciones que requieren un sistema de control de audio remoto, como sistemas de alarma, notificaciones por voz, juguetes interactivos, o simplemente para agregar un sistema de sonido personalizado a tus proyectos de IoT. A lo largo de este tutorial, te guiaremos paso a paso en la configuración del hardware, la programación del ESP32, y la creación de la interfaz web, de modo que puedas replicar y adaptar este proyecto a tus necesidades
Componentes electrónicos
Un Esp32
Características del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Pines hembra
Cables dupont hembra macho
Una tarjeta micro SD
Un módulo MP3 YX5300
Manual del módulo
Muy importante –> https://goo.gl/xZPiJp
Ejemplos para arduino
SerialMP3PlayerDemoCode for Arduino-1.0
Programa parecido al del video.
Esto está en mandarin
Módulo Relay
ESPECIFICACIONES TÉCNICAS
- Voltaje de Operación: 5V DC
- Señal de Control: TTL (3.3V o 5V)
- Nº de Relays (canales): 1 CH
- Capacidad máx: 10A/250VAC, 10A/30VDC
- Corriente máx: 10A (NO), 5A (NC)
- Tiempo de acción: 10 ms / 5 ms
- Para activar salida NO: 0 Voltios
PCB
Descargar archivo gerber –> Esp32_fingerprint_PCB
Circuito
Código fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include <WiFi.h> #include <ESPAsyncWebServer.h> #include <HardwareSerial.h> // Configuración de la red Wi-Fi const char* ssid = "Tu_Red_Wifi"; const char* password = "Tu_Clave_wifi"; // Creación del servidor web AsyncWebServer server(80); // Configuración del puerto serial para el YX5300 HardwareSerial mp3Serial(2); // Usamos Serial2 para la comunicación con el YX5300 // Función para enviar comandos al módulo YX5300 void sendCommand(uint8_t cmd, uint8_t arg1 = 0, uint8_t arg2 = 0) { uint8_t command[8] = {0x7E, 0xFF, 0x06, cmd, 0x00, arg1, arg2, 0xEF}; mp3Serial.write(command, sizeof(command)); } void setup() { // Inicialización de seriales Serial.begin(115200); mp3Serial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17 // Conexión a la red Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Conectando a WiFi..."); } Serial.println("Conectado a WiFi"); Serial.println(WiFi.localIP()); // Configuración de las rutas en el servidor web server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { String html = "<h1>Control de Modulo YX5300</h1>"; html += "<button onclick=\"fetch('/play')\">Play</button><br>"; html += "<button onclick=\"fetch('/pause')\">Paus</button><br>"; html += "<button onclick=\"fetch('/stop')\">Stop</button><br>"; html += "<button onclick=\"fetch('/next')\">Prox</button><br>"; html += "<button onclick=\"fetch('/previous')\">Prev</button><br>"; html += "<button onclick=\"fetch('/volumeup')\">Vol +</button><br>"; html += "<button onclick=\"fetch('/volumedown')\">Vol -</button><br>"; request->send(200, "text/html", html); }); // Rutas para controlar el módulo server.on("/play", HTTP_GET, [](AsyncWebServerRequest *request) { sendCommand(0x0D); // Play request->send(200, "text/plain", "Playing Track 1"); }); server.on("/pause", HTTP_GET, [](AsyncWebServerRequest *request) { sendCommand(0x0E); // Pausar request->send(200, "text/plain", "Paused"); }); server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) { sendCommand(0x16); // Detener request->send(200, "text/plain", "Stopped"); }); server.on("/next", HTTP_GET, [](AsyncWebServerRequest *request) { sendCommand(0x01); // Siguiente pista request->send(200, "text/plain", "Next Track"); }); server.on("/previous", HTTP_GET, [](AsyncWebServerRequest *request) { sendCommand(0x02); // Pista anterior request->send(200, "text/plain", "Previous Track"); }); server.on("/volumeup", HTTP_GET, [](AsyncWebServerRequest *request) { static uint8_t volume = 15; if (volume < 30) volume++; sendCommand(0x04, 0x00, volume); // Subir volumen request->send(200, "text/plain", "Volume Up"); }); server.on("/volumedown", HTTP_GET, [](AsyncWebServerRequest *request) { static uint8_t volume = 15; if (volume > 0) volume--; sendCommand(0x05, 0x00, volume); // Bajar volumen request->send(200, "text/plain", "Volume Down"); }); // Iniciar el servidor server.begin(); } void loop() { } |
No te pierdas ningún video más suscríbete a nuestro canal de telegram https://t.me/carlosvolt_electronica_robotica
PROYECTO RECOMENDADO