Imposible conectarse a la wifi desde un ESP32


Puede que este teniendo problemas a la hora de conectarse a us red wifi con un ESP32 Node MCU.

Lo mas inmediato es resetear el router o el punto de acceso e intentar ver si consigue conectarse. Pero si persiste el problema , puede intentar conectarse a una nueva red wifi, por ejemplo usando la facilidad de los smartphones actuales para crear una zona wifi e intentar conectarse nuevamente ( a esto se le llamaba MIFI). Quizás le suene raro pero ciertamente no todos lo chips wifi destacan por su gran alcance y precisamente el ESP8266 o el ESP32 no son una excepción (quizás castigados entre otras cosas por carecer de conexión para antena exterior).

En todo caso, si consigue conectarse a otra red mas cercana, entonces quizás tenga que plantearse instalar un repetidor wifi , como por ejemplo el modelo de Xiaomi que es uno de los mejores en calidad-precio (cuesta unos 15€) y por cierto se llama Mi Wi-Fi ranger extender pro.

extensor wifi

En efecto el repetidor de 300 Mbps crea una nueva red confiable y realmente rápida usando la poderosa Tecnología WiFi 802.11n.“Dead-Zone” Cuando está conectado a su router de forma inalámbrica, fortalece y expande la señal en áreas donde el router no puede hacerlo por sí solo gracias a .2 antenas externas. Soporta hasta 24 dispositivos. (24 dispositivos es el máximo conexiones recomendadas para mejor experiencia).

Si con un repetidor wifi u otro esta solucionado el problema !pues ya está ! ..¿ y si persiste? Pues aqui alguna ideas de que podemos hacer

Actualizar librerías y otros procedimientos

La biblioteca WiFiEsp32 no está disponible directamente en el Administrador de bibliotecas de Arduino IDE, pero aún puede instalarla manualmente siguiendo estos pasos:

  1. Descargue la última versión de la biblioteca WiFiEsp32 desde su repositorio de GitHub: https://github.com/espressif/arduino-esp32/tree/master
  1. Descomprima el archivo zip descargado y obtendrá una carpeta llamada WiFiEsp32-master.
  2. Abra su carpeta de Sketches de Arduino IDE y cree una nueva carpeta llamada WiFiEsp32 dentro de ella.
  3. Copie la carpeta src dentro de la carpeta WiFiEsp32-master a la carpeta WiFiEsp32 que acaba de crear.
  4. Reinicie Arduino IDE.
  5. Ahora debería poder incluir la biblioteca WiFiEsp32 en su código. Agregue la línea #include <WiFiEsp32.h> al principio de su código.
  6. Use el resto de su código sin la línea WiFi.setCountry("ES"); ya que esto no es necesario para establecer una conexión WiFi.

Como habrá adivinado, la biblioteca WiFiEsp32 ya no está disponible en el repositorio de GitHub de Espressif. En su lugar, se recomienda utilizar la biblioteca oficial de WiFi de ESP32 incluida en el IDE de Arduino (es decir la que también podemos descargar de github). Aquí os mostramos un ejemplo de código que puede usar para conectarse a una red WiFi con la biblioteca oficial de WiFi de ESP32:

#include <WiFi.h>

const char* ssid = "nombre_de_red_wifi";
const char* password = "contraseña_de_red_wifi";

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Conectando a la red WiFi...");
  }

  Serial.println("Conectado a la red WiFi");
}

void loop() {
  // Aquí puede colocar su código adicional
}

IMPORTANTE: asegúrese de reemplazar «nombre_de_red_wifi» y «contraseña_de_red_wifi» con el nombre y la contraseña de su red WiFi.

Si persiste el problema, hay algunas cosas que puede intentar:

  1. Verifique que esté usando el nombre de red (SSID) correcto y la contraseña de WiFi en su código. Asegúrese de que la información de la red que está intentando conectarse sea correcta.
  2. Asegúrese de que su ESP32 esté en un rango de señal WiFi aceptable. Verifique si hay algún obstáculo o interferencia que pueda estar afectando la señal.
  3. Asegúrese de que su ESP32 tenga una antena WiFi adecuada conectada ( si es qeu su versión cuenta con ella). Si su ESP32 no tiene una antena WiFi incorporada, asegúrese de conectar una antena externa adecuada para mejorar la señal.
  4. Verifique si su red WiFi está funcionando correctamente. Es posible que la red WiFi no esté disponible temporalmente o que tenga algún problema. También puede intentar volver reiniciar el enrutador WiFi y luego intentar conectarse nuevamente.
  5. Pruebe a agregar una línea para imprimir el estado de la conexión WiFi en su código, como se muestra a continuación:
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
Serial.println(WiFi.status()); //Agregar esta línea para imprimir el estado de la conexión WiFi
}

Si WiFi.status() devuelve un valor de 6, indica que su ESP32 no pudo asociarse con el punto de acceso WiFi. El estado 6 que devuelve la función WiFi.status() indica que su ESP32 no pudo asociarse con el punto de acceso WiFi. Esto generalmente se debe a un error en la configuración de las credenciales de su red WiFi.

Aquí hay algunos pasos que puede seguir para solucionar el problema:

  1. Asegúrese de que está ingresando el SSID y la contraseña de su red WiFi correctamente. Revise si hay errores tipográficos en los valores de ssid y password.
  2. Asegúrese de que su red WiFi no tenga un filtrado de direcciones MAC habilitado y que la dirección MAC de su ESP32 esté en la lista de dispositivos permitidos.
  3. Verifique si su red WiFi está usando un canal que no es compatible con el hardware de su ESP32. Algunos canales pueden no ser compatibles con el hardware de su ESP32. En este caso, cambie el canal de su enrutador WiFi y vuelva a intentar conectarse.
  4. Verifique si su ESP32 tiene una antena WiFi adecuada conectada. Si su ESP32 no tiene una antena WiFi incorporada, asegúrese de conectar una antena externa adecuada para mejorar la señal.

Si WiFi.status() devuelve un valor de 1, significa que su ESP32 no ha podido conectarse a la red WiFi. Aquí hay algunos pasos adicionales que puede seguir para intentar solucionar el problema:

  1. Asegúrese de que su ESP32 esté cerca del enrutador WiFi y no haya obstáculos entre ellos.
  2. Verifique si su red WiFi tiene algún tipo de filtro de dirección MAC habilitado. Si es así, agregue la dirección MAC de su ESP32 a la lista de dispositivos permitidos.
  3. Verifique si su red WiFi está usando un canal que no es compatible con su ESP32. Algunos canales pueden no ser compatibles con el hardware de su ESP32. En este caso, cambie el canal de su enrutador WiFi y vuelva a intentar conectarse.
  4. Verifique si su ESP32 tiene una antena WiFi adecuada conectada. Si su ESP32 no tiene una antena WiFi incorporada, asegúrese de conectar una antena externa adecuada para mejorar la señal.
  5. Pruebe a restablecer la conexión WiFi en su ESP32. Para hacerlo, agregue el siguiente código antes de intentar conectarse a la red WiFi:
WiFi.disconnect();
delay(1000);
WiFi.mode(WIFI_STA);

Si sigue recibiendo el código 1, hay algunos pasos adicionales que puede seguir para intentar solucionar el problema de conexión WiFi en su ESP32:

  1. Verifique si su red WiFi utiliza una configuración de seguridad que no es compatible con el ESP32, como WEP. El ESP32 solo es compatible con WPA / WPA2. Si su red WiFi utiliza WEP, intente cambiar la configuración de seguridad a WPA / WPA2.
  2. Verifique si su red WiFi está configurada para ocultar el SSID. Si es así, intente cambiar la configuración para que el SSID esté visible y vuelva a intentar conectarse.
  3. Pruebe a actualizar el firmware de su ESP32 a la última versión disponible. Puede descargar la última versión del firmware de la página oficial de Espressif. Después de actualizar el firmware, intente volver a conectarse a la red WiFi.
  4. Verifique si su ESP32 tiene una antena WiFi adecuada conectada. Si su ESP32 no tiene una antena WiFi incorporada, asegúrese de conectar una antena externa adecuada para mejorar la señal.

Si la función WiFi.status() cambia de 6 a 1, indica que el ESP32 ha podido asociarse con el punto de acceso WiFi, pues no ha podido obtener una dirección IP. Esto generalmente se debe a un problema de configuración del router o un problema con la configuración de red del ESP32. Aquí hay algunos pasos que puede seguir para solucionar el problema:

  1. Reinicie su router WiFi. A veces, los router pueden tener problemas que impiden que los dispositivos se conecten a Internet. Reiniciar su enrutador WiFi puede solucionar el problema.
  2. Asegúrese de que su router WiFi esté configurado para proporcionar direcciones IP dinámicas (DHCP). Algunos pueden estar configurados para proporcionar direcciones IP estáticas, lo que puede impedir que los dispositivos obtengan una dirección IP automáticamente. Verifique la configuración de su router y cambie la configuración de la dirección IP a DHCP si es necesario.
  3. Compruebe si hay un conflicto de direcciones IP. Si hay varios dispositivos en su red que tienen la misma dirección IP, puede impedir que su ESP32 obtenga una dirección IP. Asegúrese de que no haya otros dispositivos en su red que estén utilizando la misma dirección IP que su ESP32.
  4. Verifique si la dirección MAC de su ESP32 está bloqueada en el router. Asegúrese de que la dirección MAC de su ESP32 esté permitida en la lista de dispositivos permitidos de su routerr.
  5. Asegúrese de que su ESP32 esté configurado para obtener una dirección IP automáticamente. Verifique si ha configurado una dirección IP estática en su código de ESP32. Si lo hizo, cambie la configuración para obtener una dirección IP automáticamente.
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
  1. Verifique si su ESP32 está conectado a la red WiFi correcta. Es posible que haya varios puntos de acceso WiFi en su área y que su ESP32 esté conectado a un punto de acceso WiFi incorrecto. Asegúrese de que su ESP32 esté conectado al punto de acceso WiFi correcto.
  2. Asegúrese de que su red WiFi esté disponible y no tenga problemas de conexión. Verifique si puede conectarse a su red WiFi utilizando otros dispositivos.
  3. Esto debería restablecer la conexión WiFi en su ESP32 y puede ayudar a solucionar el problema.
  1. Si ninguno de los pasos anteriores funciona, intente actualizar el firmware del ESP32 a la última versión disponible. Es posible que su firmware tenga un error que impida que se conecte a la red WiFi.

Por cierto como ultimo recurso, puede que algun puerto del GPIO este dando problemas así como una ultima solución intente desconectar todo lo que tenga conectado al GPIO , suba de nuevo el skecth y prueba nuevamente a ver i por fin puede conectarse !suerte!

Espero que con estos pasos le ayuden a solucionar su problema de conexión WiFi con su ESP32.

Diseñar una interfaz de usuario para un reproductor de musica basado en un ESP32 con LVGL


En este post, vamos a ver una guia creada por @moononournation, que nos muestra cómo usar LVGL y SquareLine Studio para diseñar una interfaz de usuario de reproductor de música estilo Winamp. LVGL es una biblioteca de gráficos para crear fácilmente una interfaz gráfica de usuario elegante y SquareLine Studio ayuda a reducir la cantidad de codificación requerida para usar LVGL

En este post vamos a ver como implementar un reproductor casero al mas puro estilo winamp de forma completamente personalizable. Para ello cualquier dispositivo de desarrollo ESP32 con pantalla y salida de audio debería estar bien.

A continuación se muestran algunos dispositivos que podemos usar:

  • Por ultimo una opción con pantalla mas grande es el módulo ESP32-S3-pantalla inteligente HMI 8M PSRAM 16M Flash Arduino LVGL WIFI y Bluetooth 7 «800×480, módulo TFT LCD RGB de 7,0 pulgada ( mas información en https://www.aliexpress.com/item/1005004952726089.html).

Diseño de interfaz de usuario

Puede usar varias formas de pantalla, redonda, cuadrada, rectangular. Es mejor determinar usar qué forma primero. Luego, el siguiente paso es determinar cómo se ve la interfaz de usuario.

Reproductor de música clásica

Reproductor de música clásica
Reproductor de música clásica
Reproductor de música clásica
Reproductor de música clásica

Si aún no tiene ninguna idea de diseño de interfaz de usuario, imitar un reproductor de música clásico puede ser un buen comienzo.

Winamp es un reproductor de música de escritorio clásico de Windows que apareció en el siglo pasado, luego mas tarde hubo una variante de interfaz de usuario similar con soporte de caracteres chinos llamada TTPlayer . Estas 2 aplicaciones son el recuerdo de la infancia de muchos aficionados (y también el de muchas personas), así que usaremos esas UI como plantilla de diseño.

Winamp está diseñado para cambiar la «máscara» fácilmente, y los recursos de imagen de la máscara están en formato BMP empaquetados en un archivo zip. Puede encontrar una gran colección de máscaras de Winamp en skins.webamp.org , por lo que es fácil acceder a su máscara de Winamp favorita como plantilla de diseño.

Puede encontrar cómo iniciar el diseño de la interfaz de usuario desde la máscara de Winamp en bilibili:

https://www.bilibili.com/video/BV1ia4y137KM/

El reproductor de música tiene varias funciones, pero el autor del git esta interesado en las características que se encuentran en Winamp o TTPlayer. 

Aquí está la lista de deseos de funciones muchas ya implementadas en el actual firmware disponible en el git:

  • Reproducir MP3 desde la tarjeta SD
  • Lista de archivos MP3 de la tarjeta SD
  • Mostrar caracteres Unicode
  • Operación de reproducción básica (reproducir, pausar, detener, anterior y siguiente)
  • Control del volumen
  • Mostrar información MP3 ID3
  • Mostrar imagen de portada de MP3
  • Mostrar letras MP3
  • Sincroniza la visualización de letras mientras juegas
  • Mostrar analizador de espectro de audio

Reproducir MP3 desde la tarjeta SD

Al principio, necesitamos una biblioteca de audio que pueda leer archivos MP3 desde la tarjeta SD y reproducirlos. Esta vez usaremos ESP32-audioI2S. Es compatible con la familia ESP32, lee archivos de audio de varias fuentes y reproduce la salida al módulo I2S. 

Puede encontrar más detalles en Github:

https://github.com/schreibfaul1/ESP32-audioI2S.git

Operación de reproducción básica

Operación básica de reproducción

ESP32-audioI2S proporcionó toda la API de reproducción básica, solo necesitamos crear todos los widgets de botón correspondientes para cada operación. Sin embargo, el diseño del botón original de Winamp es demasiado pequeño para operar en la pantalla táctil con el dedo. Así que amplié un poco los botones y también extiendo un poco el área táctil con un fondo transparente.

Para cada botón, asigne el widget de botón a una función correspondiente.

Utilice el botón de reproducción como ejemplo:

lv_obj_add_event_cb(ui_ButtonPlay, playSong, LV_EVENT_CLICKED, NULL);

Y luego, en la función playSong, llame a la API ESP32-audioI2S:

void playSong(lv_event_t *e) 
{
if (isPlaying)
{
audio.pauseResume();
}
más
{
play_selected_song();
}
}

Enumeración de los archivos MP3 de la tarjeta SD

Antes de decirle a ESP32-audioI2S que reproduzca el archivo MP3, primero debemos buscar y enumerar los archivos MP3 de la tarjeta SD. Aquí está el extracto del código de read_song_list() que ilustra cómo concatenar la cadena de la lista de canciones separada por el carácter de salto de línea (\n):

Raíz del archivo = SD_MMC.open("/"); 
Archivo archivo = root.openNextFile();
while (archivo)
{
 if (archivo.isDirectory())
  {
   Serial.printf("DIR: %s\n", archivo.nombre());
  }
  else
  {
   const char *nombre de archivo = archivo.nombre();

   int8_t len ​​= strlen(nombre de archivo);
   const char *MP3_EXT = ".mp3";
   if ((nombre de archivo[0] != '.') && (strcmp(MP3_EXT, &nombre de archivo[len - 4]) == 0)) { // Serial.printf("
   Archivo
    de canción: %s, tamaño: %d\ n", nombre de archivo, archivo.tamaño());
    if (cuenta_canciones > 0)
    {
     stringSongList += '\n';
    }
    stringSongList += nombre de archivo;
    cuenta_canciones++;
   }
  }
  archivo = root.openNextFile();
}

Luego asigne la cadena de lista de canciones concatenada al componente de rodillo LVGL:

lv_roller_set_options(ui_RollerPlayList, stringSongList.c_str(), LV_ROLLER_MODE_INFINITE);

Mostrar caracteres Unicode

Mostrar caracteres Unicode

La compatibilidad con LVGL muestra caracteres Unicode, pero requiere un archivo de fuente Unicode. 

Control de volumen

Control del volumen

Asigne el control deslizante de volumen a una función de evento de cambio de valor:

lv_obj_add_event_cb(ui_ScaleVolume, volumenCambiado, LV_EVENT_VALUE_CHANGED, NULL);

Y luego, en la función de evento, llame a la API ESP32-audioI2S:

void volumenCambiado(lv_event_t *e) 
{
int16_t volumen = lv_slider_get_value(ui_ScaleVolume);
audio.setVolume(volumen);
}

La interfaz de usuario de progreso de tiempo también es un widget deslizante. Pero está demasiado cerca de los botones y la interfaz de usuario de control de volumen, por lo que deshabilité la entrada táctil para evitar una operación inesperada.Agregar sugerenciaPreguntaComentarioDescargar

Mostrar la información MP3 ID3

ESP32-audioI2S expuso una función de devolución de llamada audio_id3data(). La función es llamada para cada etiqueta ID3 que se encuentra en el archivo MP3.

En la función de devolución de llamada, simplemente concatene todos los datos en una cadena:

if (playingStr.length() > 0) 
{
playingStr += " ";
}
jugandoStr += info;

Luego asigne a una etiqueta para mostrar:

lv_label_set_text(ui_LabelPlaying, playingStr.c_str());

Mostrar una imagen de portada de MP3

ESP32-audioI2S expuso una función de devolución de llamada audio_id3image(). Se llama a la función si se encuentra una imagen de portada en la etiqueta MP3 ID3. La imagen puede ser cualquier formato de imagen, actualmente en soporte para decodificar y mostrar un archivo de imagen JPEG no progresivo.

En la función de devolución de llamada, copie los datos binarios:

archivo.buscar(pos); 
archivo.leer(coverImgFile, len);

Busque el encabezado JPEG:

tamaño_t idx = 11; 
while ((idx < len) && ((coverImgFile[idx++] != 0xFF) || (coverImgFile[idx] != 0xD8)))
;
--idx;

Luego decodifica con JPEGDEC:

jpegdec.openRAM(coverImgFile + idx, len - idx, jpegDrawCallback);

Agregar sugerenciaPreguntaComentarioDescargar

Mostrar las letras de las canciones en MP3

ESP32-audioI2S expuso una función de devolución de llamada audio_id3lyrics(). Se llama a la función si se encuentran letras sincronizadas, letras no sincronizadas o etiquetas de datos de texto en un archivo MP3.

En la función de devolución de llamada, copie los datos binarios:

archivo.buscar(pos); 
file.read((uint8_t *)lyricsText, len);

Decodificar texto binario a UTF8:

audio.unicode2utf8(letraTexto, largo);

Si el texto tiene una etiqueta de tiempo de sincronización, almacene el índice de tiempo en la matriz syncTimeLyricsSec[] y syncTimeLyricsLineIdx[].

Luego configure el texto de la letra en el widget de rodillo:

lv_roller_set_options(ui_RollerLyrics, lyricsText, LV_ROLLER_MODE_NORMAL);

Agregar sugerenciaPreguntaComentarioDescargar

Sincronizar las letras de la pantalla mientras se reproduce

Si se encuentra la etiqueta de letras sincronizadas, haga rodar el widget de letras mientras juega:

for (int i = 0; i < syncTimeLyricsCount; ++i) 
{
if (syncTimeLyricsSec[i] == currentTime)
{
lv_roller_set_selected(ui_RollerLyrics, syncTimeLyricsLineIdx[i], LV_ANIM_ON);
romper;
}
}

Mostrar analizador de espectro de audio

ESP32-audioI2S también expuso una función de devolución de llamada audio_process_i2s() para procesar la salida de audio. Podemos utilizar esta función para recopilar los datos de audio para visualizar el espectro de audio.

En la función de devolución de llamada, recopile los datos de audio:

raw_data[raw_data_idx++] = *muestra;

Si los datos están llenos, procese con la clase FFT:

if (raw_data_idx >= WAVE_SIZE) 
{
fft.exec((int16_t *)raw_data);
dibujar_fft_nivel_metro(canvasFFT_gfx);
lv_obj_invalidate(ui_CanvasFFT);
raw_data_idx = 0;
}

Nota: La visualización se dibuja en un lienzo, canvasFFT_gfx, por separado. Y el lienzo está asociado con el widget ui_CanvasFFT de LVGL.

Opcional: Carcasa

Un hermoso estuche para el dispositivo de desarrollo puede hacer que se parezca más a un reproductor de música.

Puede encontrar el estuche de escritorio WT32-SC01 PLUS en Thingiverse y luego imprimirlo en el color que le guste ( https://www.thingiverse.com/thing:6030590 )

Por cierto , todas las fuentes de imágenes, los proyectos de SquareLine Studio y el código fuente se pueden encontrar en Github:

https://github.com/moononournation/LVGL_Music_Player.git

Fuente: https://www.instructables.com/Design-Music-Player-UI-With-LVGL/?utm_source=newsletter&utm_medium=email