Librerías

WiFi(librería ESP8266WiFi)

La librería ESP8266WiFi ha sido desarrollada basándose en el SDK ESP8266, utilizando la nomenclatura convencional y la filosofía de la funcionalidad de la Librería de la Shield Arduino WiFi. Con el tiempo, la riqueza de las funciones WiFi portadas del desde el SDK ESP8266 a esta librería superaron a las APIs de la librería de la Shield WiFi y se hizo evidente que tenemos que proporcionar documentación por separado sobre lo que es nuevo y extra.

Documentación de la librería ESP8266WiFi

Ticker

Es una librería para llamar a funciones repetidas cada cierto periodo de tiempo. Dos ejemplos incluidos.

Actualmente no se recomienda realizar operaciones de bloqueo de IO (network, serial, file) desde una llamada a la función Ticker. En su lugar, establece una bandera dentro de la llamada a ticker y chequea por esta bandera desde dentro de la función loop.

Aquí hay una librería que simplifica el uso de Ticker y evita el reset WDT: TickerScheduler

EEPROM

Este es un poco diferente de la clase estándar EEPROM. Necesitas llamar a EEPROM.begin(size) antes de iniciar a leer o escribir, size es el número de bytes que desea utilizar. Size puede estar entre 4 y 4096 bytes.

EEPROM.write no escriba a la flash inmediatamente, en su lugar llame EEPROM.commit() cada vez que desee guardar cambios en la flash. EEPROM.end() también guardará y liberará la copia RAM de contenido EEPROM.

La librería EEPROM utiliza un sector de la flash justo después de SPIFFS.

Tres ejemplos incluidos.

I2C (librería Wire)

La librería Wire actualmente soporta el modo maestro hasta aproximadamente 450 KHz. antes de utilizar I2C, los pines para SDA y SCL necesitan ser establecidos llamando Wire.begin(int sda, int scl), p.ej. Wire.begin(0, 2) en ESP-01, de lo contrario, los pines por defecto son 4(SDA) y 5(SCL).

SPI

La librería SPI soporta por completo la API Arduino SPI incluyendo las transacciones, incluyendo la fase de ajuste (CPHA). El ajuste de Clock polarity (CPOL) no está soportado, todavía (SPI_MODE2 y SPI_MODE3 no funciona).

Los pines SPI usuales son:

  • MOSI = GPIO13
  • MISO = GPIO12
  • SCLK = GPIO14

Hay un modo extendido donde puedes intercambiar los pines normales a los pines hardware SPI0. Esto se activa llamando SPI.pins(6, 7, 8, 0) antes de llamar a SPI.begin(). Los pines cambiarían a:

  • MOSI = SD1
  • MISO = SD0
  • SCLK = CLK
  • HWCS = GPIO0

De este modo se liberan los pines SPI con el controlador que lee el código del programa desde la flash y se controla por un árbitro de hardware (la flash tiene siempre alta prioridad). De este modo el CS será controlado por hardware y como ya no puede manejar la línea CS con un GPIO nunca sabrá realmente cuándo el árbitro le otorgará acceso al bus, por este motivo debe dejar que maneje el CS automáticamente.

SoftwareSerial

Una librería portada a ESP8266 de la librería SoftwareSerial hecha por Peter Lerup (@plerup) soporta velocidades hasta 115200 y múltiples instancias de SoftwareSerial. Ver https://github.com/plerup/espsoftwareserial si desea sugerir una mejora o abrir un issue relacionado con SoftwareSerial.

APIs especificas de ESP

Algunas APIs especificas de ESP relacionadas a deep sleep, RTC y memoria flash están disponibles en el objeto ESP.

ESP.deepSleep(microseconds, mode) pondrá el chip en deep sleep (sueño profundo - ahorro de energía). mode puede ser WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED. (Se necesita unir GPIO16 a RST para despertar del deep sleep). El chip puede dormir como mucho ESP.deepSleepMax() microsegundos.

ESP.deepSleepInstant(microseconds, mode) funciona similar a ESP.deepSleep pero duerme instantaneamente sin esperar a que el WiFi se apague.

ESP.rtcUserMemoryWrite(offset, &data, sizeof(data)) y ESP.rtcUserMemoryRead(offset, &data, sizeof(data)) permite a los datos ser almacenados y recuperados de la memoria de usuario RTC del chip, respectivamente. offset se mide en bloques de 4 bytes y puede variar de 0 a 127 bloques (el tamaño total de la memoria RTC es de 512 bytes). data debe estar alineado con 4 bytes. Los datos almacenados pueden conservarse entre ciclos de sueño profundo, pero pueden perderse después de apagar y encender el chip. Los datos almacenados en los primeros 32 bloques se perderán después de realizar una actualización de OTA, ya que son utilizados por el núcleo interno.

ESP.restart() reinicia la CPU.

ESP.getResetReason() devuelve un String conteniendo la última razón de reset en un formato leíble por un humano.

ESP.getFreeHeap() devuelve el tamaño libre de la pila.

ESP.getHeapFragmentation() devuelve la métrica de fragmentación (0% está limpio, más de ~50% no es inofensivo).

ESP.getMaxFreeBlockSize() devuelve el bloque de ram asignable máximo con respecto a la fragmentación de la pila.

ESP.getChipId() devuelve el ID del chip ESP8266 como un 32-bit integer.

ESP.getCoreVersion() devuelve un String con la versión del core.

ESP.getSdkVersion() devuelve la versión del SDK como un char.

ESP.getCpuFreqMHz() devuelve la frecuencia de la CPU en MHz como un unsigned 8-bit integer.

ESP.getSketchSize() devuelve el tamaño del actual sketch como un unsigned 32-bit integer.

ESP.getFreeSketchSpace() devuelve el espacio libre de sketch como un unsigned 32-bit integer.

ESP.getSketchMD5() devuelve una String con el MD5 (en minúscula) del actual sketch sketch.

ESP.getFlashChipId() devuelve el ID del chip flash como un 32-bit integer.

ESP.getFlashChipSize() devuelve el tamaño del chip flash, en bytes, como lo ve el SDK (puede ser menor que el tamaño real).

ESP.getFlashChipRealSize() devuelve el tamaño real del chip, en bytes, basado en el ID del chip flash.

ESP.getFlashChipSpeed(void) devuelve la frecuencia del chip flash, en Hz.

ESP.getCycleCount() devuelve la cuenta de ciclos de instrucciones de la CPU desde el arranque como un unsigned 32-bit. Esto es Esto es útil para tiempos precisos de acciones muy cortas, como bit banging.

ESP.getVcc() puede usarse para medir el voltaje suministrado. ESP necesita reconfigurar el ADC al inicio para poder tener esta caracteristica disponible. Añade la siguiente línea en lo alto de tu sketch para utilizar getVcc:

ADC_MODE(ADC_VCC);

El pin TOUT debe estar desconectado en este modo.

Nota: por defecto ADC está configurado para leer del pin TOUT pin utilizando analogRead(A0), y ESP.getVcc() no está disponible.

Respondedor mDNS y DNS-SD (librería ESP8266mDNS)

Permite al sketch responder a llamadas multicast DNS para nombres de dominios como «foo.local», y llamadas DNS-SD (descubrimiento de servicios). Ver el ejemplo incluido para mas detalle.

Respondedor SSDP (ESP8266SSDP)

SSDP es otro protocolo de servicio de descubrimiento, suportado en Windows. Ver ejemplo incluido para referencia.

Servidor DNS (librería DNSServer)

Implementa un servidor simple DNS que puede usarse en ambos modos STA y AP. Actualmente el servidor DNS soporta solo un dominio (para otros dominios responde con NXDOMAIN o un código de estatus personalizado). Con esto, los clientes pueden abrir un servidor web corriendo en el ESP8266 utilizando un nombre de dominio, en vez de una dirección IP.

Servo

Esta biblioteca permite la capacidad de controlar motores servo RC (hobby). Admite hasta 24 servos en cualquier pin de salida disponible. Por definición, los primeros 12 servos usarán Timer0 y actualmente esto no interferirá con ningún otro soporte. Los conteos de servos superiores a 12 utilizarán Timer1 y las funciones que lo utilizan se verán afectadas. Si bien muchos servomotores RC aceptarán el pin de datos IO de 3.3V de un ESP8266, la mayoría no podrá funcionar a 3.3v y requerirá otra fuente de alimentación que coincida con sus especificaciones. Asegúrese de conectar los cables entre el ESP8266 y la fuente de alimentación del servomotor.

Librería mejorada EEPROM para ESP (ESP_EEPROM)

Una biblioteca mejorada para la EEPROM de ESPxxxx. Utiliza la memoria flash de acuerdo con la biblioteca estándar ESP EEPROM, pero reduce el reflash, por lo que reduce el desgaste y mejora el rendimiento de commit().

Como las acciones en el flash deben detener las interrupciones, un reflash de la EEPROM podría afectar notoriamente cualquier cosa usando PWM, etc.

Otras librerías (no incluidas con el IDE)

Las bibliotecas que no dependen del acceso a bajo nivel a los registros AVR deberían funcionar bien. Aquí hay algunas bibliotecas que se verificó que funcionan:

  • Adafruit_ILI9341 - Adafruit ILI9341 para el ESP8266
  • arduinoVNC - Cliente VNC para Arduino
  • arduinoWebSockets - Servidor y cliente WebSocket compatible con ESP8266 (RFC6455)
  • aREST - Manejador de la librería REST API.
  • Blynk - IoT framework sencillo para Makers (comprueba la página de inicio rápido).
  • DallasTemperature
  • DHT-sensor-library - Librería Arduino para el sensor DHT11/DHT22 de temperatura y humedad. Descarga la última librería v1.1.1 y no serán necesarios cambios. Las versiones antiguas deben inicializar el DHT como sigue: DHT dht(DHTPIN, DHTTYPE, 15)
  • DimSwitch - Control electrónico regulable de balastros para luces de tubo fluorescentes remotamente como si se usara un interruptor de pared.
  • Encoder - Librería Arduino para encoders rotatorios. Versión 1.4 soporta ESP8266.
  • esp8266_mdns - Llamadas y respuestas mDNS en esp8266. O dicho de otro modo: Un cliente mDNS o librería de cliente Bonjour para el ESP8266.

ESP-NOW - Wrapper lib para ESP-NOW (Ver #2227) - ESPAsyncTCP - Librería asíncrona TCP para ESP8266 y ESP32/31B - ESPAsyncWebServer - Librería de Servidor Web asíncrono para ESP8266 y ESP32/31B - Homie for ESP8266 - Arduino framework para ESP8266 implementando Homie, una convención MQTT para IoT. - NeoPixel - Librería de Neopixel de Adafruit, ahora con soporte para el ESP8266 (utiliza la versión 1.0.2 o superior desde el Gestor de librerías de Arduino). - NeoPixelBus - Librería de Neopixel para Arduino compatible con ESP8266. Utiliza el «DmaDriven» o «UartDriven» branches para ESP8266. Incluye soporte de color HSL y mas. - PubSubClient - Librería MQTT por @Imroy. - RTC - Librería Arduino para DS1307 y DS3231 compatible con ESP8266. - Souliss, Smart Home - Framework para Smart Home basado en Arduino, Android y openHAB. - ST7735 - Librería de ST7735 de Adafruit modificada para ser compatible con ESP8266. Solo asegúrate de modificar los pines en el ejemplo por los todavía específicos de AVR. - Task - Librería no preventiva de multitarea de Arduino. Si bien es similar a la biblioteca Ticker incluida, esta librería fue diseñada para mantener la compatibilidad con Arduino. - TickerScheduler - Librería que provee un simple planificador para Ticker para prevenir el reset WDT. - Teleinfo - Librería del contador de energía genérico francés para leer los datos de monitorización de la energía Teleinfo como son consumo, contrato, potencia, periodo, … Esta librería es de plataforma cruzada ESP8266, Arduino, Particle, y simple C++. Post dedicado francés en el blog del autor y toda la información Teleinfo también disponible. - UTFT-ESP8266 - Librería para pantallas UTFT con soporte para ESP8266. Solo pantallas con soporte serial interface (SPI) por ahora (no 8-bit parallel mode, etc). También incluye soporte para el controlador hardware SPI de el ESP8266. - WiFiManager - Gestor de conexión WiFi con portal cautivo Web. Si no puede conectarse, se iniciará en modo AP y un portal de configuración donde podrás introducir tus credenciales WiFi. - OneWire - Librerías para chips Dallas/Maxim 1-Wire. - Adafruit-PCD8544-Nokia-5110-LCD-Library - Librería de PCD8544 de Adafruit para el ESP8266. - PCF8574_ESP - Una librería muy simple para utilizar el expansor de GPIOs PCF857//PCF8574A I2C 8-pin. - Dot Matrix Display Library 2 - Librería Freetronics DMD y pantalla Generic 16 x 32 P10 style Dot Matrix. - SdFat-beta - Librería para tarjetas SD con soporte para nombres largos, SPI basado en software y hardware y mucho mas. - FastLED - Una librería para controlar fácil y eficientemente una amplia variedad de chipsets LED, como el Neopixel (WS2812B), DotStar, LPD8806 y algunos mas. Incluye desvanecimiento, gradiente, funciones de conversión de color. - OLED - Una librería para controlar pantallas OLED conectadas con I2C. Testeado con pantallas OLED gráficas de 0.96 pulgadas. - MFRC522 - Una librería para utilizar el lector/escritor de tags RFID Mifare RC522. - Ping - Permite al ESP8266 hacer ping a una máquina remota. - AsyncPing - Librería totalmente asíncrona de Ping (tiene estadísticas completas ping y direcciones hardware MAC).