Esta es una de las diferencias más importantes respecto a un Arduino. El ESP8266 ejecuta
muchas funciones relacionadas con mantener y gestionar la conexión WiFI y la pila TC/IP.
Si no ejecuta estas acciones tendremos problemas de comunicación, bloqueos y reinicios.
Por este motivo se recomienda evitar bloqueos superiores a 100-200ms en nuestro código.
De hecho, si pasan 3 segundos sin llamar a estas funciones el WatchDog reiniciará el
ESP8266. Y aún con el WatchDog desactivado, con una espera mayor de 8 segundos el ESP8266
se reiniciará él solito. Las funciones del ESP8266 se ejecutan al final de cada loop,
al llamar a la función
Las funciones de tiempo
Las entradas y salidas digitales (GPIO) se programan prácticamente igual que en
cualquier Arduino. Así, podemos cambiar el modo de un GPIO entre entrada o salida
con la función
La programación de salidas PWM (salidas "analógicas") es muy parecida a Arduino.
Sin embargo el ES8266 no dispone de PWM por hardware por lo que, en su
lugar, lo realiza por software esto ermite que podamos usar PWM en cualquier GPIO.
Para ello, igual que en Arduino, para usar una salida PWM empleamos la función:
El ESP8266 tiene una única entrada analógica (ADC), que en el entorno Arduino se
designa con A0. Para leerlo se emplea la misma función que Arduino, es decir,
simplemente usamos la función:
El ESP8266 tiene interrupciones en todos los pines GPIO, excepto en el GPIO16 (D2).
El uso es similar a las interrupciones por hardware en Arduino
La macro PROGMEM, que guarda variables en la memoria flash en lugar de en la memoria
dinámica, también funciona en el ESP8266 con una pequeña pero importante diferencia.
En lugar de Arduino, que realiza un análisis previo para evitar tener la misma variable
múltiples veces, el equivalente en ESP8266 no realiza este preprocesamiento.
Así, por ejemplo:
El uso del puerto serie en el ESP8266 es muy similar a su uso en Arduino y emplea todas
las funciones a las que estamos acostumbrado para enviar y recibir datos (read, write,
print, println…) Las únicas peculiaridades son relativas a funciones adicionales
disponibles en el ESP8266, ya que el ESP8266 tiene 2 puertos serie.
El primer puerto (UART0) está conectado a 2 parejas de pins. Por defecto se emplea
TX0 GPIO1 y RX0 GPIO3, pero puede cambiarse para que sea TX0 GPIO15 y RX0 GPIO13.
Si queremos cambiar entre ambas posibilidades usamos la función
El uso del I2C en el ESP8266 es similar a Arduino y emplea las mismas funciones.
La diferencia es que ESP8266 no dispone de hardware para comunicación I2C por lo que
lo simula por software. Esto supone una carga de proceso adicional para el ESP8266
que Arduino no tiene. Pero, como ventaja, podemos usar dos pines cualesquiera para
la comunicación. Por defecto, los pines empleados son SDA GPIO4 (D2) y SCL GPIO5 (D14).
Pero podemos cambiarlo con la función:
El ESP8266 tiene un SPI por hardware accesible para el usuario (designado a veces HSPI). Nuevamente, su uso es similar y emplea las mismas funciones que en un Arduino convencional. Los pines por defecto son MISO GPIO12 (D12), MOSI GPIO13 (D7), y CLK GPIO14 (D13), SS GPIO15 (D10). Adicionalmente, en el ESP8266 podemos cambiar la frecuencia del SPI de forma sencilla hasta 1Mhz con la función:SPI.setFrequency(frequency)
Para acceder a las funcionalidades WiFi del ESP8266 usaremos la librería ESP8266WiFI,
cuyo funcionamiento es parecido a la librería de Arduino WiFi. ESP8266WiFi Class.
Para incluirlo en nuestro proyecto empleamos: #include
Una de las preguntas que con más frecuencia se hacen al hablar de programación del ESP8266 en Arduino ¿funcionarán las librerías de Arduino en el ESP8266? Y la respuesta es, siento deciros, que en general no van a ser compatibles. Pero no tampoco es, no siempre. Simente usa código de C++ (ejemplo, una librería de cálculo), o usa funciones del entorno para realizar el manejo del hardware, esta librería sí que va a funcionar. Sin embargo, si accede a elementos internos de la arquitectura como timers, registros, o si usa códigos de ensamblador para acelerar ciertas tareas, por ejemplo, la librería no va a funcionar a no ser que haya sido adaptada específicamente para el ESP8266. Afortunadamente, la popularidad de del ESP8266 ha hecho que la comunidad desarrolle o adapte la mayoría de librerías disponibles en Arduino. Aunque, de entre las muchas disponibles, tendremos que buscar específicamente las compatibles con ESP8266.
Como vemos, pese a algunas diferencias, en general es muy similar a programar un Arduino. Esto es debido al genial trabajo de la comunidad al desarrollar la compatibilidad entre dispositivos, y hace que sea muy sencillo usar el ESP8266 con el entorno de Arduino.