lunes, 17 de agosto de 2026

Listado de funciones para Arduino y ESP32

Listado de funciones para Arduino y ESP32

Muy buenas a todos y todas!!!

Como memorizar todos los comandos con sus variantes en el IDE de Arduino he creado esta lista con los comandos más habituales, las variables que admite la función y si nos retorna algún tipo de dato.

Cada comando aparece en un bloque con un color que indica el periférico al que pertenece GPIO, ADC, I2C, etc.

Empecemos!!!



Descripción de los comandos


🔹 abs(int x)

Periférico: Utilidad / Matemáticas

Variables:

  • int x: Número entero del que se quiere obtener el valor absoluto.

Descripción: Calcula el valor absoluto de un número entero. Por ejemplo, el valor absoluto de -5 es 5.

Devuelve: Valor absoluto de un número entero.

Ejemplo:


x = -42;
Serial.println(abs(x)); // el valor absoluto de -42  
Serial Monitor: 42
  

🔹 int analogRead()

Periférico: ADC

Variables:

  • uint8_t pin: Número del pin ADC.

Descripción: Lee el valor raw (sin calibrar) del convertidor analógico-digital.

Devuelve: Un valor de 12 bits (0 a 4095).

Ejemplo:


int val = analogRead(analogPin);  // Lectura de un pin analógico  
  

🔹 uint32_t analogReadMilliVolts()

Periférico: ADC

Variables: Ninguna

  • uint8_t pin: Número del pin ADC.

Descripción: Lee el valor del ADC y lo convierte directamente a milivoltios (valor calibrado). Ideal para obtener lecturas en unidades de voltaje sin necesidad de hacer cálculos manuales.

Ejemplo:


uint32_t mv  = analogReadMilliVolts(PIN_ADC); // Lee y convierte automáticamente a milivoltios, considerando atenuación y calibración.  
  

🔹 analogReadResolution(uint8_t bits)

Periférico: ADC

Variables:

  • uint8_t bits: Resolución en bits (1 a 16).

Descripción: Cambia la resolución de analogRead(). El valor por defecto es 12 bits. Si se cambia a 10 bits, devolverá valores de 0 a 1023, igual que un Arduino clásico.

Ejemplo:


analogReadResolution(10);  // La lectura del pin ADC con una resolución de 10bits  
  

🔹 constrain()

Periférico: Utilidad / Matemáticas

Variables:

  • int/float amt: El valor a restringir [citation:2].
  • int/float low: Límite mínimo.
  • int/float high: Límite máximo.

Descripción: Restringe un número para que se mantenga dentro de un rango definido.

Devuelve: Si el valor es menor que el límite mínimo, devuelve el mínimo; si es mayor que el máximo, devuelve el limite máximo.

Ejemplo:


int sensVal = 50;
sensVal= constrain(sensVal, 10, 150);  // Limita el rango entre 10 y 150  
  

🔹 dacWrite(uint8_t pin, uint8_t value)

Periférico: DAC (Digital To Analog Converter)

Variables:

  • uint8_t pin: Pin DAC, solo disponibles en algunos ESP32.
  • uint8_t value: Valor de 0 a 255 (8 bits).

Descripción: Genera una salida analógica real en pines DAC (si el modelo lo soporta). Nota: No disponible en ESP32-C3.

Ejemplo:



#define DAC_PIN 25 // GPIO25 corresponde al Canal 1 del DAC

void loop() {
  dacWrite(DAC_PIN, 128); // Escribe un valor de 128 (1.65V)  
}

🔹 digitalWrite(uint8_t pin, uint8_t value)

Periférico: GPIO

Variables:

  • uint8_t pin: Número del pin GPIO.
  • uint8_t value: HIGH (1) o LOW (0).

Descripción: Escribe un valor HIGH o LOW en el pin digital especificado. Si el pin está configurado como salida, establecerá el voltaje correspondiente (3.3V o 0V).

Ejemplo:


digitalWrite(3, HIGH);  

// o

digitalWrite(3, LOW);  
  

🔹 digitalRead(uint8_t pin)

Periférico: GPIO

Variables:

  • uint8_t pin: Número del pin GPIO.

Descripción: Lee el estado de un pin digital.

Devuelve HIGH o LOW.

Ejemplo:


bool estado = digitalRead(3); // Lee el estado del pin 3  
  

🔹 bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);

Periférico: LEDC (PWM)

Variables:

  • uint8_t pin: Número del pin GPIO.
  • uint32_t freq: Frecuencia para PWM.
  • uint8_t resolution: Selecciona la resolución del canal LEDC. Rango 1-14 bits (1-20 bits para ESP32).

Descripción: Esta función se utiliza para configurar el pin LEDC con la frecuencia y resolución especificadas. El canal LEDC se seleccionará automáticamente.

Devuelve: true si la configuración es exitosa. Si se produce un error devuelve false y el canal LEDC no se configura.

Ejemplo:


const int ledPin = 16;
const int ledChannel = 0;
void setup(){
  ledcAttach(ledPin, freq, resolution);  
}
  


🔹 ledcAttachPin(uint8_t pin, uint8_t channel) deprecated

Periférico: LEDC (PWM)

Variables:

  • uint8_t pin: Número del pin GPIO.
  • uint8_t channel: Canal PWM previamente configurado.

Descripción: Asigna un pin GPIO a un canal PWM. El pin empezará a generar la señal PWM con los parámetros configurados en ledcSetup() deprecated.

Ejemplo:


const int ledPin = 16;
const int ledChannel = 0;
void setup(){
  ledcAttachPin(ledPin, ledChannel);  
}
  

🔹 ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits) deprecated

Periférico: LEDC (PWM)

Variables:

  • uint8_t channel: Canal PWM (0-7 en ESP32-C3).
  • uint32_t freq: Frecuencia en Hz.
  • uint8_t resolution_bits: Resolución en bits (1 a 14 en ESP32-C3).

Descripción: Configura un canal PWM con una frecuencia y resolución determinadas. Debe llamarse antes de usar ledcAttachPin() deprecated.

Ejemplo:


const int ledChannel = 0;
const int freq = 5000; 
const int res = 8;
void setup() {
  ledcSetup(ledChannel, freq, res);  
}
  

🔹 ledcWrite(uint8_t channel, uint32_t duty)

Periférico: LEDC (PWM)

Variables:

  • uint8_t channel: Canal PWM.
  • uint32_t duty: Valor del ciclo de trabajo (0 a 2^resolution-1).

Descripción: Escribe un valor de ciclo de trabajo (duty cycle) en el canal PWM especificado, controlando así el ancho del pulso.

Ejemplo:


// Bucle
for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {  
  ledcWrite(ledPin, dutyCycle);
  delay(15);
}  
  

🔹 long map(long value, long fromLow, long fromHigh, long toLow, long toHigh)

Periférico: Utilidad

Variables:

  • long value: El número a re-mapear.
  • long fromLow: Límite inferior del rango de entrada.
  • long fromHigh: Límite superior del rango de entrada.
  • long toLow: Límite inferior del rango de salida.
  • long toHigh: Límite superior del rango de salida.

Descripción: Re-mapea un número desde un rango de entrada a un rango de salida. Se usa comúnmente para convertir valores de un ADC (0-4095) a un rango útil, como ángulos para un servo (0-180).

Devuelve: Valor long mapeado con un rango entre en limite inferior de salida y el limiter superior de salida.

Ejemplo:


int valor = map(val, 0, 1023, 0, 255); // Entrada 0-1023 ; Salida 0-255  
  

🔹 millis()

Periférico: Tiempo

Variables: Ninguna.

Descripción: Devuelve el número de milisegundos desde que el programa empezó a ejecutarse. Se almacena como un unsigned long, con un valor máximo de 4,294,967,296, lo que equivale a casi 50 días. Es la función recomendada para temporizaciones no bloqueantes.

Devuelve: El número de milisegundos desde que el programa empezó a ejecutarse.

Ejemplo:


unsigned long myTime;
myTime = millis();
Serial.println(myTime); // Imprime el tiempo desde que empezo el programa  

🔹 pinMode(uint8_t pin, uint8_t mode)

Periférico: GPIO

Variables:

  • uint8_t pin: Número del pin GPIO a configurar.
  • uint8_t mode: Modo de funcionamiento (INPUT, OUTPUT, INPUT_PULLUP, etc.).

Descripción: Configura el modo de un pin digital. Es una de las funciones más básicas del Arduino, idéntica en su uso al Arduino original pero adaptada a los pines del ESP32.

Ejemplo:


pinMode(13, OUTPUT);      // Pone el pin 13 como salida
pinMode(8, INPUT);        // Pone el pin 8 como entrada
pinMode(9, INPUT_PULLUP); // Pone el pin 9 como entrada con resistencia interna  
  

🔹 random(long max, long min)

Periférico: Utilidad

Variables:

  • long max: Límite superior exclusivo.
  • long min: Límite inferior inclusivo (opcional).

Descripción: Genera un número pseudo-aleatorio dentro de un rango. En el ESP32, usa el generador de números aleatorios por hardware (HW RNG) para mejorar la aleatoriedad.

Ejemplo:


long randNumber;
randNumber = random(300); // Carga un número random entre 0 y 299

o

randNumber = random(100, 220); // Carga un número random entre 100 y 219  
  

🔹 randomSeed(long seed)

Periférico: Utilidad

Variables:

  • long seed: Número que sirve como semilla para el generador pseudo-aleatorio.

Descripción: Inicializa el generador de números pseudo-aleatorios para que comience en un punto arbitrario de su secuencia. Si se usa una semilla fija, la secuencia de números será siempre la misma.

Devuelve: long con semilla.

Ejemplo:


long randNumber = random(300);  
Serial.println(randNumber);
  

🔹 SPI.begin(int sck, int miso, int mosi, int ss)

Periférico: SPI

Variables:

  • int sck (opcional): Pin de reloj SPI.
  • int miso (opcional): Pin MISO (Master In Slave Out).
  • int mosi (opcional): Pin MOSI (Master Out Slave In).
  • int ss (opcional): Pin SS (Slave Select).

Descripción: Inicializa el periférico SPI en modo maestro. Si no se especifican pines, usa los valores por defecto.

Ejemplo:


const int SCK_PIN = 18;
const int MISO_PIN = 19;
const int MOSI_PIN = 23;
const int SS_PIN = 5;

void setup() {
  // Inicializa SPI con un mapeo de pines personalizado 
  SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, SS_PIN);
}
  

🔹 SPI.transfer(uint8_t data)

Periférico: SPI

Variables:

  • uint8_t data: Byte a enviar.

Descripción: Envía un byte y recibe simultáneamente otro byte (comunicación full-duplex). Es la función principal para comunicarse con periféricos SPI.

Ejemplo:


uint8_t valor = 0;
SPI.transfer(valor);  
  

🔹 Serial.begin(uint32_t baudrate)

Periférico: UART (Serial)

Variables:

  • uint32_t baudrate: Velocidad de transmisión en baudios (ej. 115200).

Descripción: Inicializa el puerto serie con la velocidad de baudios especificada. Es la función más usada para depuración y comunicación con el PC.

Ejemplo:


Serial.begin(9600);

// O

Serial.begin(38400);

// O

Serial.begin(115200);  

// O

Serial.begin(4800);  
  

🔹 Serial.print(ver descripción)

Periférico: UART (Serial)

Variables:

  • any data: Dato a imprimir (string, int, float, etc.).

Descripción: Envía texto o datos al puerto serie, sin añadir un salto de línea al final. Ideal para construir mensajes de depuración.
Un segundo parámetro opcional especifica la base (formato) a utilizar; los valores permitidos son: BIN (binario o base 2), OCT (octal o base 8), DEC (decimal o base 10), HEX (hexadecimal o base 16).
Para números de coma flotante, este parámetro especifica el número de decimales que se utilizarán.

Ejemplo:


Serial.print(78, BIN); // Imprime "1001110"

Serial.print(78, OCT); // Imprime "116"

Serial.print(78, DEC)  // Imprime "78"

Serial.print(78, HEX)  // Imprime "4E"

Serial.print(1.23456, 0)  // Imprime "1"

Serial.print(1.23456, 2)  // Imprime "1.23"

Serial.print(1.23456, 4)  // Imprime "1.2346"  
  

🔹 Serial.println(ver descripción)

Periférico: UART (Serial)

Variables:

  • any data: Dato a imprimir (string, int, float, etc.).

Descripción: Igual que Serial.print(), pero añade un salto de línea (\r\n) al final. Útil para mensajes en líneas separadas. También le podemos indicar el tipo de dato con:

  • DEC - Un decimal ASCII-encoded
  • HEX - Un hexadecimal ASCII-encoded
  • OCT - Un octal ASCII-encoded
  • BIN - Un binario ASCII-encoded

Ejemplo:


Serial.println(analogValue);       // Imprime un decimal en ASCII-encoded
Serial.println(analogValue, DEC);  // Imprime un decimal en ASCII-encoded
Serial.println(analogValue, HEX);  // Imprime un hexadecimal en ASCII-encoded  
Serial.println(analogValue, OCT);  // Imprime un octal en ASCII-encoded
Serial.println(analogValue, BIN);  // Imprime en binario en ASCII-encoded  
  

🔹 Serial.available()

Periférico: UART (Serial)

Variables: Ninguna.

Devuelve: El número de bytes disponibles para leer en el buffer del puerto serie. Útil para comprobar si ha llegado algún dato.

Ejemplo:


// Cuando los bytes disponibles son mayores que 0
if (Serial.available() > 0) {
  // Leemos el byte de entrada:
  int incomingByte = Serial.read();
}
  

🔹 int Serial.read()

Periférico: UART (Serial)

Variables: Ninguna.

Descripción: Lee un byte del buffer del puerto serie.

Devuelve: El primer byte de los datos seriales entrantes disponibles o -1 si no hay datos disponibles.

Ejemplo:


int incomingByte = Serial.read();  
  

🔹 timerBegin(uint32_t frequency)

Periférico: Timer

Variables:

  • uint32_t frequency: Frecuencia del temporizador en Hz.

Descripción: Configura y pone en marcha un temporizador de hardware con la frecuencia especificada. El temporizador se inicia automáticamente.

Devuelve: La estructura del temporizador si la configuración es correcta. Si se produce un erro devuelve NULL y el temporizador no se configura.

Ejemplo:


int timer = timerBegin(1000000);  // Configuramos la frecuencia a 1Mhz  
  

🔹 timerAttachInterrupt(hw_timer_t * timer, void (*fn)(void))

Periférico: Timer

Variables:

  • hw_timer_t *timer: Función a ejecutar cuando se dispara el temporizador.
  • void (*fn)(void): Función a ejecutar cuando se dispara el temporizador.

Descripción: Asocia una función de interrupción al temporizador. La función se ejecutará cada vez que el temporizador alcance el valor de alarma.

Ejemplo:


hw_timer_t *timer = NULL;

void ARDUINO_ISR_ATTR onTimer() {  
  // Código
}

void setup(){

  timer = timerBegin(1000000);  // Configuramos la frecuencia a 1Mhz

  // Attach onTimer function to our timer.
  timerAttachInterrupt(timer, &onTimer);
}
  

🔹 bool rmtInit(int pin, rmt_ch_dir_t channel_direction, rmt_reserve_memsize_t memsize, uint32_t frequency_Hz);

Periférico: RMT (Remote Control Transceiver)

Variables:

  • int pin: Pin GPIO a configurar.
  • rmt_ch_dir_t channel_direction: true para transmisor, false para receptor. También se puede usar: RMT_RX_MODE o RMT_TX_MODE.
  • rmt_reserve_memsize_t memsize: Número de bloques de memoria reservado para este canal:
    • RMT_MEM_NUM_BLOCKS_1
    • RMT_MEM_NUM_BLOCKS_2
    • RMT_MEM_NUM_BLOCKS_3 - Solo ESP32
    • RMT_MEM_NUM_BLOCKS_4 - Solo ESP32
    • RMT_MEM_NUM_BLOCKS_5 hasta RMT_MEM_NUM_BLOCKS_5 - Solo ESP32
    .
  • uint32_t frequency_Hz: Frecuencia del canal RMT en Hz (frecuencia de tick). Debe estar entre 312,5 kHz y 80 MHz.
    La frecuencia determina la resolución de la duración de los pulsos. Por ejemplo:
    • 10 MHz (tick de 100 ns) - Alta precisión, ideal para LEDs WS2812.
    • 1 MHz (tick de 1 µs) - Adecuado para la mayoría de los protocolos IR
    • 400 kHz (tick de 2,5 µs) - Adecuado para protocolos más lentos.

Devuelve: Esta función devuelve true si la inicialización es exitosa, false en caso contrario.

Descripción: Inicializa el periférico RMT (Remote Control), útil para generar y recibir señales con temporización precisa como infrarrojos o para controlar NeoPixels.

Ejemplo:


#define RMT_FREQ_HZ 10000000  // 10 MHz (tick de 100 ns)
bool isOk = rmtInit(4, RMT_TX_MODE, RMT_MEM_NUM_BLOCKS_1, RMT_FREQ_HZ));  
  

🔹 bool rmtWrite(int pin, rmt_data_t *data, size_t num_rmt_symbols, uint32_t timeout_ms);

Periférico: RMT (Remote Control Transceiver)

Variables:

  • int pin: Pin GPIO configurado en moto TX para RMT TX mode.
  • rmt_data_t * data: punter al array de datos a transmitir.
  • size_t * num_rmt_symbols: Longitud del array.
  • uint32_t timeout_ms: Tiempo de espera en milisegundos. Podemos usar RMT_WAIT_FOR_EVER para una espera indefinida..

Descripción: Transmite datos a través del periférico RMT. Es la función principal para enviar señales codificadas.

Ejemplo:


bool rmtWrite(int pin, rmt_data_t *data, size_t num_rmt_symbols, uint32_t timeout_ms);  
  

🔹 int WiFi.begin(const char* ssid, const char* password)

Periférico: Wi-Fi

Variables:

  • const char* ssid: Nombre de la red Wi-Fi.
  • const char* password: Contraseña de la red.

Descripción: Conecta el ESP32 a una red Wi-Fi como estación (cliente).

Devuelve: WL_CONNECTED cuando la conexión se ha establecido correctamente.

Ejemplo:


int status = WiFi.begin("YOUR_SSID", "YOUR_PASS");  // Configuración para conectar router 
  

🔹 WiFi.localIP()

Periférico: Wi-Fi

Variables: Ninguna.

Descripción: Muestra la dirección IP local asignada al ESP32 en la red Wi-Fi a la que está conectado.

Devuelve: La dirección IP local asignada al ESP32

Ejemplo:


Serial.println(WiFi.localIP());

o

String localip = WiFi.localIP().toString(); // Cambio a String de la IP  
Serial.println(localip);	// Imprime el String "localip"
  

🔹 Wire.begin(int sdaPin, int sclPin, uint32_t frequency)

Periférico: I2C (Wire)

Variables:

  • int sdaPin (opcional): Pin para SDA.
  • int sclPin (opcional): Pin para SCL.
  • uint32_t frequency (opcional): Frecuencia del bus I2C (por defecto 100kHz).

Descripción: Inicializa el periférico I2C en modo maestro. Si no se especifican pines, usa los valores por defecto de la placa.

Ejemplo:


Wire.begin(0x3C); // Inicia el periferico con la dirección hex_address  
  

🔹 Wire.beginTransmission(uint16_t address)

Periférico: I2C (Wire)

Variables:

  • uint16_t address: Dirección del dispositivo esclavo (7 o 10 bits).

Descripción: Inicia una transmisión al dispositivo esclavo con la dirección especificada. Tras llamarla, se pueden escribir datos con Wire.write().

Ejemplo:


Wire.beginTransmission(0x3C);  // Inicia los datos desde el I2C principal al secundario  
  

🔹 int Wire.endTransmission(bool sendStop)

Periférico: I2C (Wire)

Variables:

  • bool sendStop (opcional): Si es true (por defecto), envía la señal STOP.

Descripción: Envía los datos del búfer al esclavo.

Devuelve: 0 si todo es correcto, o un código de error si falla.

Ejemplo:


int isOk = Wire.endTransmission(true);  // Envía la señal de stop y carga la respuesta en la variable "isOk"  
  

🔹 int Wire.requestFrom(uint16_t address, uint8_t size, bool sedStop)

Periférico: I2C (Wire)

Variables:

  • uint16_t address: Dirección del esclavo.
  • uint8_t size: Número de bytes a solicitar.
  • bool sendStop (opcional): Si envía o no la señal STOP.

Descripción: Solicita datos del dispositivo esclavo.

Devuelve: El número de bytes leídos. Los datos se pueden leer con Wire.read().

Ejemplo:


int nBytes = Wire.requestFrom(address, quantity, stop); // Solicita una cantidad de bytes a una dirección y deja libre el canal I2C  
  

Y hasta aquí llegamos, estas son las funciones más comunes que usamos de manera general en el IDE de Arduino


Si te interesa más información sobre Arduino y su IDE, aquí tienes otros articulos relacionados:


Saludos!!!


No hay comentarios :