Este proyecto implementa un bootloader DFU (Device Firmware Update) para un ESP32, permitiendo la actualización remota del firmware a través de un servidor web. El bootloader se activa cuando se encuentra un flag en la memoria EEPROM que indica que el dispositivo debe iniciar en modo DFU.
- Modo DFU: El ESP32 puede arrancar en un modo especial (DFU) donde se permite cargar un archivo de firmware
.bin
a través de una interfaz web. - Punto de acceso WiFi: El dispositivo crea un punto de acceso WiFi con un nombre personalizado.
- Actualización del firmware: Los usuarios pueden cargar un nuevo firmware desde una página web y el ESP32 lo aplicará directamente.
- EEPROM: Utiliza la memoria EEPROM del ESP32 para almacenar un flag que determina si el dispositivo debe arrancar en modo DFU o no.
- ESP32
- Arduino IDE con soporte para ESP32
- Biblioteca
WiFi.h
yEEPROM.h
de ESP32 - Servidor web para gestionar la carga de archivos
.bin
-
Clonar el repositorio:
git clone https://github.com/espos-project/espos-dfu-bootloader cd dfu_bootloader
-
Configurar el proyecto en el Arduino IDE:
- Abre el archivo
dfu_bootloader.ino
en el Arduino IDE. - Asegúrate de tener instalada la plataforma ESP32 en el IDE de Arduino.
- Conecta tu ESP32 y selecciona el puerto correspondiente.
- Abre el archivo
-
Cargar el firmware en tu ESP32:
- Compila y carga el proyecto en tu dispositivo ESP32.
El dispositivo arranca en modo DFU cuando encuentra que el flag de la EEPROM está activado. Para poner el dispositivo en modo DFU, puedes configurar el flag en la memoria EEPROM de la siguiente manera:
-
Activar el modo DFU:
- Cuando el ESP32 arranca y encuentra que la flag en la EEPROM está activada, el dispositivo iniciará un punto de acceso WiFi con el nombre especificado.
- En el código, el nombre del AP se define como
"ESP_DFU_Update"
, pero puedes cambiarlo pasando un nombre personalizado al métodostartDFUMode()
.
String apName = "Mi_Punto_De_Acceso"; startDFUMode(apName); // Activa el modo DFU con el nombre del AP personalizado
-
Acceder a la página web DFU:
- Una vez que el dispositivo esté en modo DFU, conecta tu ordenador al punto de acceso WiFi creado por el ESP32.
- Accede a
http://192.168.4.1/
desde el navegador.
- En la página web de DFU, verás un formulario donde podrás elegir un archivo
.bin
para cargar. - Haz clic en "Subir actualización" para iniciar la carga del firmware.
- El dispositivo recibirá el archivo, lo escribirá en la memoria y reiniciará automáticamente cuando termine.
- Si deseas salir del modo DFU y regresar al funcionamiento normal, puedes hacerlo desde la página web haciendo clic en "Salir del modo DFU".
- Esto desactivará el flag en la EEPROM y reiniciará el dispositivo.
- El valor de la flag en la EEPROM se lee y se escribe en la dirección definida en el código:
EEPROM_ADDR_DFU
. - Si la flag está activa (
1
), el ESP32 arrancará en modo DFU. Si está desactivada (0
), el ESP32 arrancará normalmente.
startDFUMode(apName)
: Inicia el modo DFU y establece el nombre del punto de acceso WiFi.handleDFURoot()
: Muestra la página de inicio de DFU en el servidor web.handleUpload()
: Maneja la subida del archivo.bin
para actualizar el firmware.handleExitDFU()
: Permite salir del modo DFU y reiniciar el dispositivo.
-
Nombre del punto de acceso (AP):
- El nombre del AP creado en el modo DFU se puede personalizar modificando el parámetro
apName
en el métodostartDFUMode()
.
- El nombre del AP creado en el modo DFU se puede personalizar modificando el parámetro
-
Tamaño de la EEPROM:
- El tamaño de la EEPROM puede ser configurado en el código según las necesidades del proyecto. Actualmente, el tamaño de la EEPROM se ha definido como
512
bytes.
- El tamaño de la EEPROM puede ser configurado en el código según las necesidades del proyecto. Actualmente, el tamaño de la EEPROM se ha definido como
Si tienes mejoras o correcciones que proponer, no dudes en hacer un pull request o abrir un issue en el repositorio.
Este proyecto está bajo la licencia GNU GPLv3. Puedes usarlo, modificarlo y distribuirlo de acuerdo con los términos de la licencia.