pude darme cuenta que es hasta meno permisivo por la consola que 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í jSerialComm.
Una Elegante solución para guindow$ y linux Instalación ESP8285H05 en Ubuntu 18.04.3 LTS |
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
-
Si no hay confianza en el link de arriba nodemcu-flasher
-
Empezamos quitando el micro atmega 328p.
-
Hacer un jumper del pin reset a gnd (Opcional)
-
TX a TX , y RX a RX del arduino al esp8266
-
El pin GPIO0 y GND del ESP8266 al GND de arduino (MODO PROGRAMACIÓN) modo bootloader.
-
Resistencia Pull down del RX al RX del ESP8266 para reducir tensión de 5v a 3.3v, o usar una fuente regulable
Esp8266 pinout
Conexión con arduino y fuente regulable de 3.3v a 5v
NODEMCU FIRMWARE PROGRAMMER
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
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
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
Ahora gracias a eso podemos irnos a Herramientas/Placa/Gestor de tarjetas
, buscamos ESP8266 y lo instalamos para descargar la api.
Luego de instalado deberíamos de ver en Herramientas/Placa
las nuevas placas Espxxx añadidas a la lista.
Seleccionamos Generic ESP8266 Module
Flasheando ESP8266 con ejemplo básico led blink
También el led a usar por defecto, será GPIO0 el pinDigital
-
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)
También se puede tener tener la tierra desconectada y luego conectar el cable USB, el modo de flasheo empezará normalmente. |
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)".
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...
ESP-01s con conversor usb/ttl
Para ahorrarnos pasos anteriores a la hora de cablear, podemos usar este conversor, aqui el LED_BUILTIN estara en el GPI02 de esta version esp-01s
En mi caso usa un convertidor de la serie cp210x
rubn ⲁƛ ▸ sudo dmesg | grep tty
[954377.573038] usb 1-4.4.4.2: cp210x converter now attached to ttyUSB0
Ejecutamos esptool.py
rubn ⲁƛ ▸ esptool.py flash_id
esptool.py v4.2.1
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 2c:f4:32:10:1d:bf
Uploading stub...
Running stub...
Stub running...
Manufacturer: 85
Device: 6014
Detected flash size: 1MB (1)
Hard resetting via RTS pin...
1 | 1MB de memoria correspondiente a la version esp-01s |
Hacemos un pequeño blink delay de medio segundo
#define LED_BUILTIN 2 (1)
//const int PIN = ;// pin digital
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial.begin(115200);
//pinMode(PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
1 | pin del led del esp |
Como podemos ver en aliexpress esta placa esta muy económica, y tambien el conversor, dar click en la imagen
Instalación ESP8285H05 en Ubuntu 18.04.3 LTS
El turno es para el NodeMCU ESP8285H08
con 2MB de flash, la mitad que la del lolin v3.
Usando dmesg o lsusb con linux para escanear puertos
Es ideal tener un cable usb con datos, para que sea reconocido el microcontrolador, y tengamos una salida en consola como la siguente, con ambos comandos. |
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 (1)
1 | El micro ha sido reconocido. |
Con lsusb
rubn ⲁƛ ▸ lsusb
Bus 002 Device 009: ID 0480:0900 Toshiba America Inc MQ04UBF100
Bus 002 Device 008: ID 2109:0817 VIA Labs, Inc. USB3.0 Hub
Bus 002 Device 007: ID 2109:0817 VIA Labs, Inc. USB3.0 Hub
Bus 002 Device 006: ID 2109:0817 VIA Labs, Inc. USB3.0 Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 012: ID 2109:2817 VIA Labs, Inc. USB2.0 Hub
Bus 001 Device 016: ID 10c4:ea60 Silicon Labs CP210x UART Bridge (1)
Bus 001 Device 011: ID 2109:2817 VIA Labs, Inc. USB2.0 Hub
Bus 001 Device 010: ID 2109:2817 VIA Labs, Inc. USB2.0 Hub
Bus 001 Device 009: ID 1ea7:0064 SHARKOON Technologies GmbH 2.4G Mouse
Bus 001 Device 007: ID 8087:0aaa Intel Corp.
Bus 001 Device 005: ID 5986:211b Acer, Inc HD Webcam
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
1 | Este es el micro que nos interesa en este momento. |
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
Esta libreria wx no deja abrir la interface del NODEMCUPY flasher, el error se esta presentando en ubuntu 20.04 y algo de GTK3 como en el log siguiente |
*** Could not run GTK+ test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occurred. This usually means GTK+ is incorrectly installed.
configure: error:
The development files for GTK+ were not found. For GTK+ 2, please
ensure that pkg-config is in the path and that gtk+-2.0.pc is
installed. For GTK+ 1.2 please check that gtk-config is in the path,
and that the version is 1.2.3 or above. Also check that the
libraries returned by 'pkg-config gtk+-2.0 --libs' or 'gtk-config
--libs' are in the LD_LIBRARY_PATH or equivalent.
Con esto logramos hacer una instalacion del WX
pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
rubn ⲁƛ ▸ python
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>> wx.__version__
'4.1.1' (1)
>>>
1 | version actual del wx |
sudo python nodemcu-pyflasher.py
Flasheo por consola con esptool.py
Con esta app por consola programada en python y de la gente de Espressif hacemos lo mismo que el nodemcu-pyflasher
pero sin GUI.
El esptool.py
podemos instalarle con pip de python para usar la última versión
Directorios de instalación del esptool.py
|
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 (1)
1 | 32m esta deprecado ya, usar 4MB, ni hace falta establecer el --b (baud rate), ya que usa el que tiene por defecto de 115200 |
Salida en consola
rubn ⲁƛ ▸ sudo esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 dev8firmware.bin (1)
[sudo] contraseña para rubn:
WARNING: Flash size arguments in megabits like '32m' are deprecated.
Please use the equivalent size '4MB'. (2)
Megabit arguments may be removed in a future release.
esptool.py v3.1
Serial port /dev/ttyUSB0 (3)
Connecting....
Detecting chip type... ESP8266
Chip is ESP8285H08
Features: WiFi, Embedded Flash
Crystal is 26MHz
MAC: f4:cf:a2:0f:45:cd (4)
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...
1 | Se uso 32m valor deprecado |
2 | Usar como indica el log, 4MB |
3 | Puerto /dev/ttyUSB0 |
4 | Dirección mac |
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:
const int 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
⚙️ 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 🔥
Esp8266 lolin V3
Una hermosura tambíen en buen precio en amazon, barato gracias al conversor uart CH340, esta versión de 4 megas podemos flashearle rapidamente el firmware blink_led.bin que lo extraje con el Arduino IDE.
#define LED_BUILTIN 2 (1)
// 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_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
1 | LED_BUILTIN del lolin v3 |
Flasheamos por consola con este comando
esptool.py --port /dev/ttyUSB0 -b 460800 write_flash 0x00000 blink_led.bin
rubn ⲁƛ ▸ esptool.py --port /dev/ttyUSB0 -b 460800 write_flash 0x00000 blink_led.bin
esptool.py v4.2.1
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: c8:c9:a3:52:ee:c7
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00041fff...
Compressed 266928 bytes to 196322...
Wrote 266928 bytes (196322 compressed) at 0x00000000 in 4.6 seconds (effective 467.1 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Estos son los firmware que utilicé