Los pines GPIO (General Purpose Input/Output), son puertos digitales que pueden ser configurados tanto como entradas como salidas en un microcontrolador.
Las entradas son utilizadas para leer señales del exterior, como sensores, interruptores o cualquier dispositivo que genere una señal eléctrica.
Las salidas, por otro lado, permiten al microcontrolador controlar dispositivos como LEDs, motores y otros componentes.
Si no sabes lo que son las entradas o salidas digitales, o necesitas más ayuda consulta estas entradas:
Uso de las entradas y salidas digitales en el ESP32
En el entorno de Arduino para ESP32, el manejo de los pines GPIO es bastante sencillo. Básicamente, es exactamente igual al que tendríamos en el caso de un Arduino “normal”.
Para configurar un pin como entrada o salida, se utiliza la función
pinMode(pin, mode)
Donde
pin
es el número del pin que se quiere configurarmode
puede serINPUT
para configurarlo como entradaOUTPUT
para configurarlo como salida.
Modos de los pines GPIO
Además de los modos INPUT
y OUTPUT
, los pines GPIO en el ESP32 también pueden configurarse en otros modos que permiten funcionalidades más avanzadas. Algunos de estos modos incluyen:
INPUT_PULLUP
: Configura el pin como entrada con resistencia pull-up interna activada. Esto es útil para detectar cambios en interruptores o botones.INPUT_PULLDOWN
: Similar al anterior, pero con resistencia pull-down interna activada.OUTPUT_OD
: Configura el pin como salida de drenaje abierto, que es útil cuando se trabaja con circuitos externos.
Resistencias internas de pull-up y pull-down
Los pines GPIO en el ESP32 tienen resistencias pull-up y pull-down internas que pueden activarse según sea necesario.
Estas resistencias son útiles cuando se trabaja con entradas, como interruptores o botones, ya que ayudan a establecer un estado lógico predefinido cuando no hay una señal externa.
Ejemplos de código
Configurar un pin como entrada y leer su valor
const int sensorPin = 13; // Ejemplo de pin para sensor
int sensorValue;
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop() {
sensorValue = digitalRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
}
Uso de una entrada digital en el ESP32
const int buttonPin = 12; // Pin para el botón
int buttonState; // Variable para almacenar el estado del botón
void setup() {
pinMode(buttonPin, INPUT); // Configurar el pin como entrada
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin); // Leer el estado del botón
Serial.println(buttonState); // Imprimir el estado en el puerto serie
delay(100); // Pequeña pausa para evitar lecturas erráticas
}
Uso de una salida digital en el ESP32
const int ledPin = 13; // Pin para el LED
int ledState = LOW; // Estado inicial del LED
void setup() {
pinMode(ledPin, OUTPUT); // Configurar el pin como salida
Serial.begin(9600);
}
void loop() {
digitalWrite(ledPin, ledState); // Establecer el estado del LED
Serial.println(ledState); // Imprimir el estado en el puerto serie
delay(1000); // Esperar un segundo
ledState = !ledState; // Cambiar el estado del LED
}
Configurar un botón con resistencia pull-up interna
const int buttonPin = 12;
int buttonState;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
Serial.println("Botón presionado");
}
delay(100);
}