.. note::
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.
**¿Por qué unirte?**
- **Soporte Experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Preestrenos Exclusivos**: Accede anticipadamente a anuncios de nuevos productos y adelantos.
- **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y Sorteos Festivos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo!
.. _1.1.1_c_pi5:
1.1.1 LED Parpadeante
===========================
Introducción
------------------
En este proyecto, aprenderemos cómo hacer que un LED parpadee mediante programación.
Con tus configuraciones, tu LED puede producir una serie de fenómenos interesantes.
¡Adelante!
Componentes Necesarios
------------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../img/blinking_led_list.png
:width: 800
:align: center
Es definitivamente conveniente comprar un kit completo, aquí tienes el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ELEMENTOS EN ESTE KIT
- ENLACE
* - Kit Raphael
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los enlaces a continuación.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN DEL COMPONENTE
- ENLACE DE COMPRA
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_led`
- |link_led_buy|
Diagrama Esquemático
---------------------
En este experimento, conecta una resistencia de 220Ω al ánodo (el pin largo del LED),
luego la resistencia a 3.3 V, y conecta el cátodo (el pin corto) del LED al GPIO17 de la
Raspberry Pi. Por lo tanto, para encender un LED, necesitamos poner el GPIO17 en nivel bajo (0V).
Podemos lograr este fenómeno mediante programación.
.. note::
**Pin11** se refiere al pin 11 de la Raspberry Pi de izquierda a derecha, y sus números de
pin correspondientes en **wiringPi** y **BCM** se muestran en la siguiente tabla.
En el contenido relacionado con el lenguaje C, hacemos que GPIO0 sea equivalente a 0 en wiringPi.
Entre el contenido relacionado con el lenguaje Python, BCM 17 es 17 en la columna BCM de la
siguiente tabla. Al mismo tiempo, son iguales al pin 11 en la Raspberry Pi, Pin 11.
.. list-table::
:header-rows: 1
* - Nombre
- T-Board
- wiringPi
- BCM
* - GPIO17
- Pin 11
- 0
- 17
.. image:: ../img/image48.png
:width: 800
:align: center
Procedimientos Experimentales
-----------------------------
**Paso 1:** Construir el circuito.
.. image:: ../img/image49.png
:width: 800
:align: center
**Paso 2:** Ve a la carpeta del código.
1) Si usas una pantalla, se recomienda seguir los siguientes pasos.
Ve a **~/** y encuentra la carpeta **raphael-kit**.
Encuentra **C** en la carpeta, haz clic derecho sobre ella y selecciona **Abrir en Terminal**.
.. image:: ../img/image50.png
:width: 800
:align: center
Luego aparecerá una ventana como se muestra a continuación. Ahora has ingresado a la ruta del código **1.1.1_BlinkingLed.c**.
.. image:: ../img/image51.png
:width: 800
:align: center
En los siguientes proyectos, usaremos comandos para ingresar al archivo de código en lugar
de hacer clic derecho. Pero puedes elegir el método que prefieras.
2) Si inicias sesión en la Raspberry Pi de forma remota, usa ``cd`` para cambiar de directorio:
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/1.1.1/
.. note::
Cambia de directorio a la ruta del código en este experimento mediante cd.
De cualquier manera, ahora estás en la carpeta C. Los procedimientos subsecuentes basados
en estos dos métodos son los mismos. Continuemos.
**Paso 3:** Compila el código.
.. raw:: html
.. code-block::
gcc 1.1.1_BlinkingLed.c -o BlinkingLed -lwiringPi
.. note::
gcc es la Colección de Compiladores GNU. Aquí, funciona como compilador del
archivo de lenguaje C ``1.1.1_BlinkingLed.c`` y genera un archivo ejecutable.
En el comando, ``-o`` significa salida (el carácter inmediatamente posterior a -o es el
nombre del archivo de salida después de la compilación, y aquí se generará un ejecutable
llamado ``BlinkingLed``) y ``-lwiringPi`` es para cargar la biblioteca wiringPi (``l`` es
la abreviatura de library).
**Paso 4:** Ejecuta el archivo ejecutable generado en el paso anterior.
.. raw:: html
.. code-block::
sudo ./BlinkingLed
.. note::
Si no funciona después de ejecutarlo, o aparece un mensaje de
error: \"wiringPi.h: No such file or directory\", por favor consulta :ref:`install_wiringpi_pi5`.
Para controlar el GPIO, necesitas ejecutar el programa con el comando
``sudo`` (superuser do). El comando ``./`` indica el directorio actual.
El comando completo es para ejecutar ``BlinkingLed`` en el directorio actual.
Después de ejecutar el código, verás el LED parpadeando.
Si deseas editar el archivo de código ``1.1.1_BlinkingLed.c``, detén el código y luego escribe el siguiente comando para abrirlo:
.. raw:: html
.. code-block::
nano 1.1.1_BlinkingLed.c
Presiona ``Ctrl+X`` para salir. Si has modificado el código, aparecerá un mensaje
preguntando si deseas guardar los cambios o no. Escribe ``Y`` (guardar) o ``N`` (no guardar).
Luego presiona ``Enter`` para salir. Repite ``Paso 3`` y ``Paso 4`` para ver el efecto después
de modificar.
.. image:: ../img/image53.png
:width: 800
:align: center
**Código**
El código del programa se muestra a continuación:
.. code-block:: c
#include
#include
#define LedPin 0
int main(void)
{
// When initialize wiring failed, print message to screen
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
}
pinMode(LedPin, OUTPUT);// Set LedPin as output to write value to it.
while(1){
// LED on
digitalWrite(LedPin, LOW);
printf("...LED on\n");
delay(500);
// LED off
digitalWrite(LedPin, HIGH);
printf("LED off...\n");
delay(500);
}
return 0;
}
**Explicación del Código**
.. code-block:: c
#include
La biblioteca de control de hardware está diseñada para el lenguaje C de Raspberry Pi.
Agregar esta biblioteca es beneficioso para la inicialización del hardware y la salida
de los puertos I/O, PWM, etc.
.. code-block:: c
#include
Biblioteca estándar de I/O. La función printf utilizada para imprimir los datos mostrados
en la pantalla se realiza mediante esta biblioteca. Hay muchas otras funciones disponibles
para explorar.
.. code-block:: c
#define LedPin 0
El pin GPIO17 de la Placa de Extensión T corresponde al GPIO0 en wiringPi. Asigna GPIO0 a LedPin,
LedPin representa GPIO0 en el código posterior.
.. code-block:: c
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
Esto inicializa wiringPi y asume que el programa que llama va a usar el esquema de numeración
de pines de wiringPi.
Esta función necesita ser llamada con privilegios de root. Cuando la inicialización de wiring
falla, imprime un mensaje en la pantalla. La función ``return`` se utiliza para salir de la
función actual. Usar return en la función ``main()`` finalizará el programa.
.. code-block:: c
pinMode(LedPin, OUTPUT);
Configura ``LedPin`` como salida para escribir valores en él.
.. code-block:: c
digitalWrite(LedPin, LOW);
Configura GPIO0 como 0V (nivel bajo). Dado que el cátodo del LED está conectado a GPIO0,
el LED se encenderá si GPIO0 se configura en nivel bajo. Por el contrario, configura GPIO0
en nivel alto, el LED se apagará.
.. code-block:: c
printf("...LED apagado\n");
La función printf es una función de biblioteca estándar y su prototipo de función
está en el archivo de encabezado ``stdio.h``.
La forma general de la llamada es: ``printf("cadena de control de formato", columnas de la tabla de salida)``.
La cadena de control de formato se utiliza para especificar el formato de salida, que se divide en
cadena de formato y cadena sin formato. La cadena de formato comienza con ``%`` seguida de
caracteres de formato, como ``%d`` para salida de entero decimal. Las cadenas sin formato se
imprimen tal como son. Aquí se utiliza una cadena sin formato, seguida de ``\n`` que es un carácter
de nueva línea, representando un salto de línea automático después de imprimir una cadena.
.. code-block:: c
delay(500);
Mantiene el estado HIGH o LOW actual durante 500 ms.
Esta es una función que suspende el programa por un período de tiempo. Y la velocidad del programa
está determinada por nuestro hardware. Aquí encendemos o apagamos el LED. Si no hay función de
retraso, el programa ejecutará todo el programa muy rápido y en un bucle continuo.
Así que necesitamos la función de retraso para ayudarnos a escribir y depurar el programa.
.. code-block:: c
return 0;
Generalmente, se coloca al final de la función principal, indicando que la función devuelve 0 al
ejecutarse correctamente.
Imagen del Fenómeno
------------------------
.. image:: ../img/image54.jpeg
:width: 800
:align: center