Controlar Led con GPIO Raspberry Pi en C/C++



Controlar un led mediante los pines GPIO de Raspberry Pi en el lenguaje de programación C/C++.

Para realizar esta prueba tenemos que tener instalado la librería Wiring Pi para el manejo de los GPIO con C/C++, si no la tienes en este post te mostramos como hacerlo "Instalar Wiring Pi en Raspberry Pi GPIO C/C++".

Lo primero que tenemos que hacer es montar un led en nuestra Raspberry Pi de la misma forma que en el post "Controlar Led con GPIO Raspberry Pi en consola".

Raspberry Pi Zero conectado a un led

Se tiene que crear un archivo con extensión .c por ejemplo parpadeo.c, este tendrá el código de nuestra aplicación, abrirlo con tu editor de texto preferido, en la primera linea realizaremos la importación de la libreria Wiring Pi.

#include <wiringPi.h>

Crearemos la función principal de nuestro programa.

int main (void) {

Luego la instrucción de configuracion de Wiring Pi.

wiringPiSetup();

Ahora indicaremos el modo del pin que usaremos, en este caso el pin 0 corresponde al GPIO 17 en BCM o en BOARD pin 11, para ver el mapa de los pines que usa Wiring Pi solo ejecuta el siguiente comando.

pi@raspberrypi ~ $ gpio readall +-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 0 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+

Modo de salida (OUTPUT) del pin 0 (GPIO 17).

pinMode(0, OUTPUT);

Creamos una variable llamada "i" en valor "0" que sera nuestro contador de ciclos.

Después agregamos el ciclo "for" con la condición que "i" sea menor que 10, esto nos hará repetir 10 veces las instrucciones del ciclo.

Le diremos al GPIO 17 (wPi 0) que se encienda enviando "HIGH" con la función "digitalWrite", luego esperaremos "500" milisegundos y le diremos que se apague enviando "LOW", esperando "500" milisegundos y el ciclo comenzara de nuevo.

int i = 0;
for (i = 0;i<10;i++){
   digitalWrite(0, HIGH);
   delay(500);
   digitalWrite(0, LOW);
   delay(500);
}

Para finalizar nuestro programa retornaremos 0 y cerraremos el cuerpo de nuestro programa (main).

return 0;
}

Con esto ya podemos comenzar a programar nuestro proyecto usando los pines GPIO con C/C++ y Wiring Pi, les dejo el código completo.

#include <wiringPi.h> int main (void) { wiringPiSetup(); pinMode(0, OUTPUT); int i = 0; for (i = 0;i<10;i++){ digitalWrite(0, HIGH); delay(500); digitalWrite(0, LOW); delay(500); } return 0 ; }

Para compilar el código solo tienes que ingresar el siguiente comando.

pi@raspberrypi ~ $ gcc -Wall -o parpadeo parpadeo.c -lwiringPi

Para ejecutarlo se tiene que llamar a nuestro programa.

pi@raspberrypi ~ $ sudo ./parpadeo

Si tienes alguna duda o sugerencia déjanos un comentario.