Anda di halaman 1dari 4

Los números de pin en Arduino corresponden directamente a los números de pin GPIO de

ESP8266. Las funciones pinMode, digitalRead, y digitalWrite funcionan como de costumbre,


así que para leer GPIO2, llame un digitalRead(2).

Los pines digitales 0-15 pueden ser INPUT, OUTPUT, or INPUT_PULLUP. El pin 16 puede
INPUT, OUTPUT or INPUT_PULLDOWN_16. Al arrancar, los pines se configuran como INPUT.

Los pines también pueden servir para otras funciones, como Serial, I2C, SPI. Estas funciones son
normalmente activadas por la biblioteca correspondiente. El siguiente diagrama muestra la
asignación de pines para el popular módulo ESP-12.

Funciones de pin

Los pines digitales 6-11 no se muestran en este diagrama porque se utilizan para conectar el chip
de memoria flash en la mayoría de los módulos. Intentar utilizar estos pines como E/S
probablemente hará que el programa se bloquee.

Observe que algunas tarjetas y módulos (ESP-12ED, NodeMCU 1.0) también rompen los pines 9 y
11. Estos pueden usarse como IO si el chip flash funciona en modo DIO (a diferencia de QIO, que es
el predeterminado).
Las interrupciones de pin se admiten mediante las funciones attachInterrupt,
detachInterrupt. Las interrupciones se pueden conectar a cualquier pin GPIO, excepto GPIO16.
Se admiten los tipos de interrupción estándar de Arduino: CHANGE, RISING, FALLING.
Entrada analógica

ESP8266 tiene un solo canal ADC disponible para los usuarios. Puede utilizarse para leer la tensión
en el pin ADC, o para leer la tensión de alimentación del módulo (VCC).

Para leer la tensión externa aplicada al pin ADC, utilice analogRead(A0). El rango de voltaje de
entrada es 0 - 1.0V.

Para leer el voltaje VCC, utilice ESP.getVcc() y el pin ADC debe mantenerse sin conexión.
Además, se debe agregar la siguiente línea la estructura de codigos:

ADC_MODE(ADC_VCC);

Esta línea tiene que aparecer fuera de cualquier función, por ejemplo justo después de las líneas
#include de su estructura.

Salida analógica

analogWrite(pin,value) habilita el software PWM en el pin especificado. PWM se puede utilizar


desde los pines 0 al 16. Se llama analogWrite(pin,0) para desactivar la función PWM en el pin.
El valor puede estar en el rango de 0 a PWMRANGE, que es igual a 1023 por defecto. El rango PWM
se puede cambiar llamando el comando analogWriteRange(new_range).

La frecuencia de PWM es 1kHz por defecto. Para cambiar la frecuencia se hace llamando el
comando analogWriteFreq(new_frequency.

Tiempo y retrasos

millis() y micros() devuelven el número de milisegundos y los microsegundos transcurridos


después del reseteo, respectivamente.

delay(ms) interrumpe el boceto durante un determinado número de milisegundos y permite que


se ejecuten las tareas WiFi y TCP / IP. delayMicroseconds(us) hace una pausa para un número
dado de microsegundos.

Recuerde que hay un montón de código que necesita ejecutarse en el chip además del boceto
cuando el WiFi está conectado. Las bibliotecas WiFi y TCP / IP tienen la oportunidad de manejar
cualquier evento pendiente cada vez que se completa la función loop(), o cuando se llama un
delay. Si tiene un bucle en algún lugar de la estructura de código o boceto que tarda mucho
tiempo (> 50ms) sin llamar un delay, podría considerar agregar una función de llamada de delay
para mantener el Stack de WiFi funcionando sin problemas.
También existe una función yield() que es equivalente a delay(0). La función
delayMicroseconds, por otro lado, no rinde para otras tareas, por lo que no se recomienda su uso
para retrasos de más de 20 milisegundos.

Serial

El objeto Serial funciona de la misma manera que en un Arduino regular. Aparte de hardware
FIFO (128 bytes para TX y RX) HardwareSerial tiene 256 bytes adicionales los buffers TX y RX. Tanto
la transmisión como la recepción son interrumpidas. Las funciones de escritura y lectura bloquean
la ejecución del boceto cuando los FIFO / buffers respectivos están llenos / vacíos.
Serial utiliza UART0, que se asigna a los pines GPIO1 (TX) y GPIO3 (RX). El objeto Serial puede
ser reasignado a GPIO15 (TX) y GPIO13 (RX) llamando a Serial.swap() después de
Serial.begin. Llamando a swap se asigna de nuevo UART0 y regresa a GPIO1 y GPIO3.

Serial1 utiliza UART1, el pin TX es GPIO2. UART1 no se puede utilizar para recibir datos porque
normalmente el pin RX está ocupado para la conexión del chip flash. Para utilizar Serial1, llame a
Serial1.begin (velocidad en baudios).
Si Serial1 no se utiliza y Serial no se cambia - TX para UART0 se puede asignar a GPIO2 en su
lugar llamando a Serial.set_tx(2)después de Serial.begin o directamente con
Serial.begin(baud, config, mode, 2) .

De forma predeterminada, la salida de diagnóstico de las bibliotecas WiFi está deshabilitada


cuando llama a Serial.begin. Para habilitar la salida de depuración de nuevo, llame a
Serial.setDebugOutput(true). Para redirigir la salida de depuración a Serial1 en su lugar,
llame a Serial1.setDebugOutput(true).
También debe utilizar Serial.setDebugOutput(true) para habilitar la salida de la función
printf().

Los objetos Serial y Serial1 soportan 5, 6, 7, 8 bits de datos, impar (O), par (E) y no (N), y los bits
de parada 1 ó 2. Para configurar el modo deseado, llame a Serial.begin(baudrate,
SERIAL_8N1), Serial.begin(baudrate, SERIAL_6E2) , etc.
Se ha implementado un nuevo método en Serial y Serial1 para obtener la configuración de
velocidad de transmisión actual. Para obtener la velocidad en baudios actual, llame a
Serial.baudRate(), Serial1.baudRate(). Devuelve un int de velocidad actual. Por ejemplo

// Establecer la velocidad de transmisión a 57600


Serial.begin(57600);

// Obtener la velocidad de transmisión actual


int br = Serial.baudRate();

// Se imprimirá "Serial es 57600 bps"


Serial.printf("Serial is %d bps", br);

He hecho esto también para la biblioteca oficial de software ESP8266, vea esta solicitud de
extracción.

Tenga en cuenta que esta implementación es sólo para placas basadas en ESP8266 y no funciona
con otras tarjetas Arduino.

Progmem

Las funciones de memoria de programa funcionan de la misma manera que en un Arduino regular;
Colocando sólo datos de lectura y cadenas en memoria de sólo lectura y un monton de liberación
para su aplicación. La diferencia importante es que en el ESP8266 las cadenas literales no se
agrupan. Esto significa que la misma cadena literal definida dentro de un F ("") y/o PSTR ("")
ocupará espacio para cada instancia en el código. Así que necesitará administrar las cadenas
duplicadas usted mismo.

Hay una macro auxiliar adicional para hacer más fácil la transmisión o el paso const PROGMEM
para métodos de cadenas se toma un FlashStringHelper llamando un FPSTR(). El uso de esto
ayudará a facilitar la agrupación de cadenas.

String response1;
response1 += F("http:"); ...

String response2;
response2 += F("http:");

Usando FPSTR quedaria:

const char HTTP[] PROGMEM = "http:";


...
{
String response1;
response1 += FPSTR(HTTP);
...
String response2;
response2 += FPSTR(HTTP);
}