Repetidor Wifi (NAT) con Wemos D1 mini (ESP8266)

Objetivo: Configurar nuestro Wemos D1 mini o cualquier dispositivo con el chip ESP8266 como repetidor wifi.

Hace tiempo que leí en un post la posibilidad de utilizar los dispositivos ESP8266 como repetidores Wifi pero no me daba la flexibilidad de configurarlo en tiempo real. Buscando, buscando, encontré la siguiente joyita: https://github.com/martin-ger/esp_wifi_repeater. Con este software puedo acceder al dispositivo y configurarlo mediante telnet pudiéndose configurar cuantas veces quieras una vez te hayas asociado con él. El flasheo con el Wemos d1 mini ha sido fácil. Con el ESP-01 de 1Mb que tengo tuve ciertos problemillas ya que el firmware no se cargaba. Según leí si daba problemas había que cambiar ciertos parámetros que más adelante aclaro.

Probado con los siguientes dispositivos:

Wemos D1 Mini
ESP-01 1Mb

 

WeMos Esp-Wroom-02 con portapila
Lolin Nodemcu V2
Wemos D1 Mini Pro
Wemos D1 Mini Pro

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Este tutorial es para ser realizado desde Linux. En concreto desde Linux Mint. Para hacerlo desde Windows puedes seguir este otro enlace.

Ventajas:

  • Puedes tener un repetidor wifi por un coste muy reducido (Wemos D1 mini aprox. 3 €, esp-01 aprox. 2€).
  • Puedes hacerlo funcionar con una powerbank (con amperaje suficiente) por lo que no necesitarás enchufarlo a corriente.
  • Admite cambiar la configuración por telnet o a través del navegador sin necesidad de recompilar el software.
  • Se conecta con el router principal en modo NAT (Cuando un cliente wifi se asocia al dispositivo obtiene una dirección IP diferente de la que usa el router). Esto para algunos puede ser una desventaja.
  • Puedes redireccionar puertos (port mapping)
  • Tiene un cliente mqtt.
  • Una vez conectado a él según el autor, puedes configurarlo para monitorizar los paquetes de que circulan a través del dispositivo.

 

Desventajas:

  • Según el autor sólo admite 8 clientes wifi conectados al mismo tiempo por limitaciones del propio hardware.
  • No tiene configuración via WEB. (Añadida en últimas versiones)

Vamos a instalarlo y configurarlo en nuestro Wemos D1 mini con un equipo con Linux Mint, para que sea repetidor de mi red.

Necesitamos:

  • 1 Wemos D1 mini.
  • 1 Cable cargador de móvil con conector micro USB
  • Un cargador de móvil con conector USB.
  • Un Ordenador con Linux instalado que pueda ejecutar python. Desde Windows también es posible para ello visitar la web del autor.
  • Un ordenador, portátil o tablet para poder configurar el dispositivo vía Wifi. En caso de usar un móvil o una tablet tendremos que usar una app que permita conectarse vía telnet. Yo en Android suelo usar JuiceSSH.

    Para un ESP-01 necesitaremos un dispositivo especial para poderlo conectar a un cargador de móvil.

Paso 1. Descargar y descomprimir el software.

Descargamos el sofftare desde este enlace: https://github.com/martin-ger/esp_wifi_repeater/archive/master.zip.

Descargamos la aplicación para flashearlo: https://github.com/espressif/esptool/archive/master.zip.

Abrimos un terminal y creamos el directorio ESP8266-Repeater.

mkdir ESP8266-Repeater

Entramos en el directorio creado:

cd ESP8266-Repeater

Descargamos los archivos necesarios:

wget https://github.com/martin-ger/esp_wifi_repeater/archive/master.zip -O esp_wifi_repeater.zip

wget https://github.com/espressif/esptool/archive/master.zip -O esptool.zip

Descomprimimos lo que hemos descargado:

unzip esp_wifi_repeater.zip

unzip esptool.zip

Paso 2. Procedemos a introducir el software en el dispositivo.

Conectamos el dispositivo Wemos D1 mini a nuestro PC.

Comprobamos que lo ha reconocido:

ls /dev/ttyUSB*

En mi caso me ha reconocido el dispositivo como /dev/ttyUSB0.

Para Wemos D1 mini, WeMos Esp-Wroom-02 y Lolin Nodemcu V2:

Dentro del mismo directorio y con el dispositivo conectado realizamos lo siguiente (Todo en una línea):

python ./esptool-master/esptool.py --port /dev/ttyUSB0 write_flash -fs 32m 0x00000 esp_wifi_repeater-master/firmware/0x00000.bin 0x10000 esp_wifi_repeater-master/firmware/0x10000.bin

Para  Wemos D1 mini Pro me ha funcionado con:

python ./esptool-master/esptool.py --port /dev/ttyUSB0 write_flash -fs 16m 0x00000 esp_wifi_repeater-master/firmware_sdk_1.5.4/0x00000.bin 0x40000 esp_wifi_repeater-master/firmware_sdk_1.5.4/0x40000.bin

Con el ESP-01 de 1Mb conseguí que funcionara así:

python ./esptool-master/esptool.py --port /dev/ttyUSB0 write_flash -fs 8m 0x00000 esp_wifi_repeater-master/firmware_sdk_1.5.4/0x00000.bin 0x40000 esp_wifi_repeater-master/firmware_sdk_1.5.4/0x40000.bin

Si todo va bien ya estará flasheado.

Se nos quedará el led azul del dispositivo encendido fijo sin parpadear.

Añadido posterior por problemas de flasheo:

Al intentar cargar el firmware por segunda vez en otro Wemos D1 mini que tenía aparcado, me percaté de que el flasheo no lo hacía bien y el led se me quedaba parpadeando muy rápido. Entiendo que es por haberlo usado con anterioridad con otros proyectos y quedaban residuos en la memoria flash de aplicaciones anteriores. Intenté borrar la flash con esptool.py … erase_flash pero seguía igual. Para corregirlo hice lo siguiente:

Acceder a la página: https://nodemcu-build.com/index.php . En ella introduciremos un correo electrónico para que nos genere un firmware y nos lo envíe por correo. No hace falta que marquemos ningún añadido. Accedemos a nuestro correo y cuando termine de generarlo nos enviará un enlace para descargar un firmware (suele tardar unos minutitos) . Cualquiera de los dos que envía puede valer pero yo me traje el integer. (Nótese que lo quiero sólo para eliminar todo lo que tenía con anterioridad). Una vez descargado usé el siguiente comando para flashearlo:

python ./esptool-master/esptool.py –port /dev/ttyUSB0 write_flash -fm qio 0x00000 <firmware_descargado>.bin

A continuación volví a intentar el flasheo (paso 2) y me funcionó.

Puedes también probar a borrar lo que tiene dentro con:

python ./esptool-master/esptool.py –port /dev/ttyUSB0 erase_flash

Y luego intentar flashearlo variando esto por valores diferentes:

python ./esptool-master/esptool.py --port /dev/ttyUSB0 write_flash -fs 32m 0x00000 esp_wifi_repeater-master/firmware/0x00000.bin 0x10000 esp_wifi_repeater-master/firmware/0x10000.bin

Por valores tales como 8m, 16m, 32m

O si no haz lo mismo con el siguiente:

python ./esptool-master/esptool.py --port /dev/ttyUSB0 write_flash -fs 8m 0x00000 esp_wifi_repeater-master/firmware_sdk_1.5.4/0x00000.bin 0x40000 esp_wifi_repeater-master/firmware_sdk_1.5.4/0x40000.bin

Paso 3. Configurar el dispositivo.

Sacamos el cacharrín del ordenador y lo conectamos a un cargador USB (con la alimentación USB de mi equipo no funciona ya que no da suficiente amperaje).

Buscamos la red WIFI llamada MyAp y nos conectamos a ella.

[Edito:26-Julio-2017] A fecha de hoy ha cambiado a mejor la configuración del dispositivo. Se le han añadido varias opciones más así como la posibilidad de configurarse a través de la web. Para ello si no quieres hacerlo por telnet, sólo tienes que acceder con un navegador a la dirección http://192.168.4.1.

 

A continuación nos conectamos con telnet:

telnet 192.168.4.1 7777

Nos aparecerá una consola de comandos:

Trying 192.168.4.1...
Connected to 192.168.4.1.
Escape character is '^]'.
CMD>

para ver las redes accesibles ponemos el comando:

scan

Sugerencia a partir de ahora:

ATENCIÓN: Abre un editor de texto, copia lo siguiente y cambia lo que esté en ROJO.

set ssid Router_al_que_me_conecto
set password Passwd_router_al_que_me_conecto
set ap_ssid Nombre_de_mi_repetidor
set ap_password Pass_de_mi_repetidor

Una vez hayas sustituido los valores correctos, copia y pega los comandos uno a uno en la consola telnet.

Para comprobar la configuración ponemos a continuación:

show

Nos mostrará lo que hemos configurado.

STA: SSID:XXXXXX PW:xxxxxxxxxxxx
AP: SSID:YYYYYYY PW:yyyyyyyyyyy IP:192.168.4.1/24

Para que guarde los cambios de manera permanente ponemos:

save

A continuación lo aseguramos para que no puedan modificar nuestra configuración los clientes que se asocien al dispositivo:

lock

Para volver a cambiar la configuración necesitaremos luego realizar. Es preferible dejarlo bloqueado:

unlock Pass_de_mi_repetidor

salimos del telnet con:

quit

Para ver un listado de todos los comandos recomiendo  ver la lista en la página del autor.

Con el ESP-01 no se me guardaba la configuración ya que al reiniciarlo seguía estando igual. Para solucionarlo volví a acceder al dispositivo por telnet y ejecuté el comando:

reset factory

Con eso funcionó perfecto.

Paso 4. Probar nuestro repetidor.

Una vez realizados todos los pasos procederemos a desconectar y volver a conectar el dispositivo. Si todo ha ido bien podremos conectarnos y disfrutaremos de un repetidor de nuestra red.

Nuestro repetidor ya montado en un dispositivo USB.

[Edito:26-Julio-2017]  Las luz parpadea de la siguiente manera:

  • Luz Fija: Dispositivo sin asociarse al router Wifi.
  • Luz parpadeante (1 por segundo): Dispositivo asociado al router.
  • Luz parpadeante: Refleja el paso de paquetes de red. Esto implica que hay alguien usándolo.

Cuando lo tienes encendido día y noche a veces molesta el parpadeo de la luz del dispositivo. Para anularla debemos entrar por telnet y poner la orden:

set status_led 255

Para ponerla como estaba:

set status_led 2

Ese 2 es el número de GPIO por donde quieres que visualice la conexión. De manera simplificada indica la patilla del chip por donde quieres que envíe los pulsos de voltaje para conectar otro led u otro componente electrónico. Para más información sobre gpios busca GPIOS Wemos D1 mini o GPIOS Esp-01

3 comentarios en “Repetidor Wifi (NAT) con Wemos D1 mini (ESP8266)

  1. A mi no me funciono como tu lo publicaste en un Wemos D1 mini chino supongo pirata, ṕero asi si me funciono:

    Agregue

    -fm dio

    python ./esptool-master/esptool.py –port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 esp_wifi_repeater-master/firmware/0x00000.bin 0x10000 esp_wifi_repeater-master/firmware/0x10000.bin

    Muchas gracias por tu publicacion no sabia que tenian esta funcionalidad de repetidor los modulos esp8266.

  2. “Actualización – 09/2021”

    Revisar versión de Python instalada en mi caso Python3.X, tener instalado Pyserial. En caso de tener instalado la versión de Python3.X reemplazar la palabra Python por Python3, instalar Pyserial con el comando: sudo apt-get install python-serial o mediante “synaptic” o “muon” según sea el caso o tu preferencia y actualizar con: sudo apt-get update, agregar la orden sudo en caso no tener privilegios de super usuario, -ff 80m. La orden quedaría así:

    sudo python3 ./esptool-master/esptool.py –port /dev/ttyUSB0 write_flash -fs 4MB -ff 80m -fm dio 0x00000 esp_wifi_repeater-master/firmware/0x00000.bin 0x02000 esp_wifi_repeater-master/firmware/0x02000.bin

    Probado en Kubuntu 20.04, con Wemos mini ESP12F (8266), espero les sea de utilidad y gracias por este post.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

2 + 7 =