En esta tanda de dos artículos explicaré cómo olvidarse de los comandos AT del módulo ESP8266 ESP-01 (aunque lo escrito vale para toda la familia ESP) y poder programarlo como un chip independiente: conectando la wifi, manejando el puerto serie, usando los pines GPIO, etc. La gran ventaja es que tenemos un microprocesador más potente, más versátil, más rápido y además en muchos casos es más barato que si usáramos los microcontroladores PIC o AVR (como contrapartida tiene menos pines de E/S).
CONSTRUYENDO EL TOOLCHAIN
El primer paso que tenemos que hacer para programarlo es construir el toolchain para poder compilar los programas para este chip con el compilador cruzado. Para ello recomiendo tener un linux donde construirlo (ya sea físico o virtualizado), no recomiendo usar windows y cygwin. Yo estoy usando el ubuntu 14.04 LTS.
Lo primero es instalar las herramientas necesarias, para ello ejecutar:
1 |
sudo apt-get install make unrar autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python sed unzip git |
Vamos a usar el toolchain de https://github.com/pfalcon/esp-open-sdk, con el que el proceso de creación es bastante sencillo (ejecútalo en la raíz de tu directorio personal):
1 |
git clone https://github.com/pfalcon/esp-open-sdk.git |
Esto habrá creado una carpeta esp-open-sdk. Entra dentro de está y haz un make (con el parámetro STANDALONE=y) para crear todo el toolchain (puede tardar un rato dependiendo de tu ordenador):
1 2 |
cd esp-open-sdk make STANDALONE=y |
Ahora vamos a poner en la variable de entorno PATH la ruta a los binarios, ya que el esptool no funciona si no se pone (cambia oscar por tu usuario):
1 2 |
PATH=$PATH:/home/oscar/esp-open-sdk/xtensa-lx106-elf/bin export PATH |
COMPILANDO PROGRAMAS
Vamos a descargarnos unos ejemplos ya hechos:
1 |
git clone https://github.com/esp8266/source-code-examples.git |
Esto creará una carpeta llamada source-code-examples. Entra dentro de esta carpeta y edita el fichero example.Makefile.
1 2 |
cd source-code-examples nano example.Makefile |
Modifica las siguientes lineas (recuerda cambiar oscar por tu usuario):
1 |
XTENSA_TOOLS_ROOT ?= /opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin |
POR
1 |
XTENSA_TOOLS_ROOT ?= /home/oscar/esp-open-sdk/xtensa-lx106-elf/bin |
1 |
SDK_BASE ?= /opt/Espressif/ESP8266_SDK |
POR
1 |
SDK_BASE ?= /home/oscar/esp-open-sdk/sdk |
1 |
ESPTOOL ?= esptool.py |
POR
1 |
ESPTOOL ?= /home/oscar/esp-open-sdk/esptool/esptool.py |
El campo ESPPORT debes cambiarlo si no coincide con la ruta al dispositivo asociado a tu dongle usb a serie.
Ahora entra dentro del direcotrio blinky, copia el fichero anteriormente editado como Makefile y haz un make para compilar el firmware:
1 2 3 |
cd blinky cp ../example.Makefile Makefile make |
Si todo ha ido bien habremos compilado el firmware para nuestro ESP8266:
PROGRAMANDO EL ESP8266
Para poder programar nuestro módulo ESP8266 necesitamos un dongle usb a serie (USB2TTL) como este:
Después es necesario añadir al usuario que estemos utilizando (en el ejemplo, oscar) en el grupo dialout para poder acceder al dongle:
1 |
sudo adduser oscar dialout |
Ahora sólo queda subir el programa al módulo ESP8266, para ello debes cablear el módulo de la siguiente forma (estando éste sin alimentación):
Las líneas rojas van a VCC (3,3V) y las negras a GND (masa). Ahora alimenta el módulo.
Si es la primera vez que vas a programar el módulo wifi, debes borrar las configuraciones por defecto, esto se consigue ejecutando el siguiente comando:
1 |
~/esp-open-sdk/esptool/esptool.py --port /dev/ttyUSB0 write_flash 0x7C000 ~/esp-open-sdk/esp_iot_sdk_v1.0.1/bin/esp_init_data_default.bin 0x7E000 ~/esp-open-sdk/esp_iot_sdk_v1.0.1/bin/blank.bin |
Las siguientes veces ya no será necesario repetir este paso. Si has hecho este paso vuelve a apagar y encender el módulo.
Finalmente para programar el firmware creado, ejecuta el comando:
1 |
make flash |
Enhorabuena, acabas de programar por primera vez tu módulo ESP8266. Ahora desconecta el cable que va al pin de programacion (así el módulo no estará en modo de programación), conecta un led entre el GPIO 2 (el que no aparece conectado a ningún sitio en la fila de GND de la foto anterior de las conexiones) y masa. Así es como luce el «hola mundo» del chip ESP8266:
En el siguiente artículo explicaré cómo hacer tus propios programas en C para el esp8266.