Flashear Esp8266, fu#K AT-commands

Nunca me entraba en la cabeza, mantener ese acople con arduino vía USB, me impendía explorar zona remotas con sensores, también que la api JSSC de Alexey Sokolov ya no es mantenida, solo un fork que veo bastante activa a la gente y es aquí java-native/jssc.

Una Elegante solución para guindow$ y linux

Necesitamos un convertidor de puerto serie a usb, pero el arduino no los proporciona ya, así que no hace falta comprar uno.

Se flashea porque el esp8266 viene para ser usado con los aburridos comandos AT, cosa que nos ahorramos al flashear porque soportaría comandos del arduino, siendo programable con el IDE como tal, o por ejemplo PlataformIO un plugin para VSCode

Usaremos

Esp8266 pinout

image

image

Conexión con ardiuno y fuente regulable de 3.3v a 5v

image

NODEMCU FIRMWARE PROGRAMMER

image

la primera vez al ejecutar la aplicación y darle flash, parece que se queda buscando el puerto com del arduino, debemos es darle flash, y reconectar el puerto usb, es decir quitar/conectar, y así empezaría el proceso de flasheo.

Log con mal flasheo

Aquí vemos que da como cierto problema al conectar con el com

Note:Begin find ESP8266.
Note:Serial port disconnected.
Warning:Serial port closed by user.
Note:Detect serial port changed.
Note:Auto MAP serial port.Port-->COM3

Note:Serial port connected.
Note:Begin find ESP8266.
Note:Detect serial port changed.
Note:Auto MAP serial port.Port-->COM4

Log correcto flasheando con NodemcuFirmwareProgrammer

image

Note:Detect serial port changed.
Note:Auto MAP serial port.Port-->COM4

Note:Serial port connected.
Note:Begin find ESP8266.
Note:ESP8266 ACK success.
Note:ESP8266 ACK success.
Note:Set base address success.
Note:Program flash success.

Flashing completado correctamente

image

Configuración del arduino con respositorio esp8266

EL repositorio es el siguiente Esp8266 debemos añadir la siguiente URL en la ventana Preferencias: Gestor de URLs Adicionales de Tarjetas

https://arduino.esp8266.com/stable/package_esp8266com_index.json

image

Ahora gracias a eso podemos irnos a Herramientas/Placa/Gestor de tarjetas para descargar la api luego de instalado deberíamos de ver las nuevas placas Espxxx añadidas a la lista.

image

También el led a usar por defecto, será GPIO0 el pinDigital

image

  • 1 Colocar el pin GPIO0 a tierra sin la tensión de 3.3v que viene del arduino, o la fuente,0
  • 2 Oprimir (subir/upload)
  • 3 En el sketch cuando aparezca lo siguiente.
  • 4 Connecting……. justo colocamos los 3.3v (INMEDIATAMENTE)
 Connecting....... 
 
 El Sketch usa 257220 bytes (26%) del espacio de almacenamiento del programa. El máximo es 958448 bytes.
 Las variables Globales usan 26816 bytes (32%) de la memoria dinámica, dejando 55104 bytes para las variables locales. El máximo es 81920 bytes.
 esptool.py v2.8
 Serial port COM4
 Connecting........____
 Chip is ESP8266EX
 Features: WiFi
 Crystal is 26MHz
 MAC: 68:c6:3a:ea:87:1c
 Uploading stub...
 Running stub...
 Stub running...
 Configuring flash size...
 Auto-detected Flash size: 1MB
 Compressed 261376 bytes to 192973...
 Writing at 0x00000000... (8 %)
 Writing at 0x00004000... (16 %)
 Writing at 0x00008000... (25 %)
 Writing at 0x0000c000... (33 %)
 Writing at 0x00010000... (41 %)
 Writing at 0x00014000... (50 %)
 Writing at 0x00018000... (58 %)
 Writing at 0x0001c000... (66 %)
 Writing at 0x00020000... (75 %)
 Writing at 0x00024000... (83 %)
 Writing at 0x00028000... (91 %)
 Writing at 0x0002c000... (100 %)
 Wrote 261376 bytes (192973 compressed) at 0x00000000 in 20.3 seconds (effective 103.2 kbit/s)...
 Hash of data verified.
 
 Leaving...
 Hard resetting vía RTS pin...

Lo anterior no es un error, Si nos pasa entonces toca ir a:

Herramientas > Reset Method > “no dtr (aka ck)”.

image

esptool.py v2.8
Serial port COM4
Connecting.....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 68:c6:3a:ea:87:1c
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 1MB
Compressed 261376 bytes to 192973...

Writing at 0x00000000... (8 %)
Writing at 0x00004000... (16 %)
Writing at 0x00008000... (25 %)
Writing at 0x0000c000... (33 %)
Writing at 0x00010000... (41 %)
Writing at 0x00014000... (50 %)
Writing at 0x00018000... (58 %)
Writing at 0x0001c000... (66 %)
Writing at 0x00020000... (75 %)
Writing at 0x00024000... (83 %)
Writing at 0x00028000... (91 %)
Writing at 0x0002c000... (100 %)
Wrote 261376 bytes (192973 compressed) at 0x00000000 in 20.3 seconds (effective 103.2 kbit/s)...
Hash of data verified.

Leaving...
Soft resetting...

Instalación ESP8285H05 en Ubuntu 18.04.3 LTS

El turno es para el NodeMCU ESP8285H08

image

Con este comando debería ser reconocido ya en linux

rubn ⲁƛ ▸ sudo dmesg | grep tty
[87120.442984] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[87124.729474] usb 1-4.3: ch341-uart converter now attached to ttyUSB0

Este es el error de permisos actual con la versión del Arduino IDE 1.8.15

arduino ide PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'

En caso de no tener permisos en ese puerto, ya nos había pasado hace años aquí Arduino-IDE-Error.

  • Cambiar de ttyACM0 a ttyUSB0
sudo chmod a+rw /dev/ttyUSB0

¿Bien que haremos con él?

Flashear nuestro nodeMCU de dos maneras por consola o GUI, pero este es menos tedioso que el ESP8266 ya que es un KIT mas completo, tenemos dos pasos:

Todo lo anterior sirve para Guindow$ en caso de linux son otros pasos, en la siguiente URL tenemos la explicación más detallada.

Según la web de arriba ya existe una nube donde podemos construir las ultimas versiones del firmware, yo en este caso use la configuración por defecto y en unos minutos me envían un email con las url de descarga del firmware.

Flasheo con nodemcu-pyflasher

El mismo team que creo dicha aplicación también tienen una GUI para realizar el flashing llamado nodemcu-pyflasher en el README.md indican ciertos pasos para una correcta ejecución.

Aquí un flasheo correcto, con solo conectar el usb y dar permisos en consola

sudo python nodemcu-pyflasher.py

Flasheo por consola con esptool.py

Con esta app por consola programada en python hacemos lo mismo que el nodemcu-pyflasher pero sin GUI.

El comando a usar es el siguiente, debemos estar en la ruta donde tengamos nuestro esptool.py yo en mi caso lo tengo aquí:

/home/rubn/.local/lib/python2.7/site-packages

Sirve también en caso de brikear el ESP8285 como en Unbrick-Esp8266-Blinking-led-blue

sudo esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 dev8firmware.bin

Salida en consola

rubn ⲁƛ ▸ sudo esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 dev8firmware.bin
[sudo] contraseña para rubn: 
WARNING: Flash size arguments in megabits like '32m' are deprecated.
Please use the equivalent size '4MB'.
Megabit arguments may be removed in a future release.
esptool.py v3.1
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8285H08
Features: WiFi, Embedded Flash
Crystal is 26MHz
MAC: f4:cf:a2:0f:45:cd
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00094fff...
Flash params set to 0x0240
Compressed 610304 bytes to 402075...
Wrote 610304 bytes (402075 compressed) at 0x00000000 in 35.8 seconds (effective 136.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Los otros pasos son iguales a los de más arriba, donde flasheamos con el ejemplo del Blink led pero con el pin 16 tal que nuestro código en Arduino seria:

#define LED = 16;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  
  pinMode(LED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Connecting…

El nodeMCU con el arduino IDE le seteamos varios parámetros como

  • vi

⚙️ Subiendo el source al nodeMCU

Executable segment sizes:
ICACHE : 32768           - flash instruction cache 
IROM   : 269228          - code in flash         (default or ICACHE_FLASH_ATTR) 
IRAM   : 27473   / 32768 - code in IRAM          (IRAM_ATTR, ISRs...) 
DATA   : 1540  )         - initialized variables (global, static) in RAM/HEAP 
RODATA : 2980  ) / 81920 - constants             (global, static) in RAM/HEAP 
BSS    : 25912 )         - zeroed variables      (global, static) in RAM/HEAP 
El Sketch usa 301221 bytes (60%) del espacio de almacenamiento de programa. El máximo es 499696 bytes.
Las variables Globales usan 30432 bytes (37%) de la memoria dinámica, dejando 51488 bytes para las variables locales. El máximo es 81920 bytes.
esptool.py v3.0
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP8285
Features: WiFi, Embedded Flash
Crystal is 26MHz
MAC: f4:cf:a2:0f:45:cd
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 1MB
Erasing flash (this may take a while)...
Chip erase completed successfully in 1.5s
Compressed 305376 bytes to 221397...
Writing at 0x00000000... (7 %)
Writing at 0x00004000... (14 %)
Writing at 0x00008000... (21 %)
Writing at 0x0000c000... (28 %)
Writing at 0x00010000... (35 %)
Writing at 0x00014000... (42 %)
Writing at 0x00018000... (50 %)
Writing at 0x0001c000... (57 %)
Writing at 0x00020000... (64 %)
Writing at 0x00024000... (71 %)
Writing at 0x00028000... (78 %)
Writing at 0x0002c000... (85 %)
Writing at 0x00030000... (92 %)
Writing at 0x00034000... (100 %)
Wrote 305376 bytes (221397 compressed) at 0x00000000 in 19.7 seconds (effective 124.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Ya deberíamos tener nuestro micro activo 🔥

image


Este es el firmware que utilicé

Comments