.. note::
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
**¿Por qué unirse?**
- **Soporte experto**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Acceso exclusivo**: Obtén acceso anticipado a anuncios y adelantos de nuevos productos.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y sorteos**: Participa en sorteos y promociones festivas.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo!
1.1.1 LED parpadeante
=========================
Introducción
-----------------
En esta lección, aprenderemos a hacer que un LED parpadee mediante programación.
A través de tus configuraciones, tu LED puede producir una serie de fenómenos
interesantes. Ahora, ¡manos a la obra!
Componentes
------------------
.. image:: img/blinking_led_list.png
:width: 800
:align: center
.. note::
Para proceder sin inconvenientes, necesitas traer tu propia
Raspberry Pi, tarjeta TF y alimentación para Raspberry Pi.
Principio
-----------
**Protoboard**
Una protoboard es una base de construcción para la creación de prototipos
electrónicos. Se utiliza para construir y probar circuitos rápidamente antes
de finalizar cualquier diseño de circuito. Tiene muchos orificios en los que
se pueden insertar los componentes mencionados anteriormente, como ICs y
resistencias, así como cables puente. La protoboard te permite conectar y quitar
componentes con facilidad.
La imagen muestra la estructura interna de una protoboard completa. Aunque estos
orificios en la protoboard parecen independientes entre sí, en realidad están
conectados entre sí a través de tiras de metal internamente.
.. image:: img/image41.png
**LED**
El LED es un tipo de diodo. El LED solo brillará si el pin largo está conectado
al electrodo positivo y el pin corto está conectado al electrodo negativo.
.. |image42| image:: img/image42.png
.. |image43| image:: img/image43.png
|image42|\ |image43|
El LED no puede conectarse directamente a la fuente de alimentación, ya que puede
dañar el componente. Debe conectarse en serie una resistencia de 160Ω o mayor
(funcionando a 5V) en el circuito del LED.
**Resistencia**
La resistencia es un elemento electrónico que puede limitar la corriente de
una rama. Una resistencia fija es un tipo de resistencia cuyo valor no puede
cambiarse, mientras que el de un potenciómetro o una resistencia variable puede ajustarse.
Se utiliza una resistencia fija en este kit. En el circuito, es esencial para
proteger los componentes conectados. Las siguientes imágenes muestran un objeto
real, una resistencia de 220Ω y dos símbolos de circuito comúnmente usados para
resistencias. Ω es la unidad de resistencia y las unidades más grandes incluyen
KΩ, MΩ, etc. Su relación se puede expresar de la siguiente manera: 1 MΩ = 1000 KΩ,
1 KΩ = 1000 Ω. Normalmente, el valor de la resistencia está marcado en ella.
Así que si ves estos símbolos en un circuito, significa que hay una resistencia.
.. image:: img/image44.png
.. |image45| image:: img/image45.png
.. |image46| image:: img/image46.png
|image45|\ |image46|
Al usar una resistencia, primero necesitamos conocer su valor. Aquí hay dos
métodos: puedes observar las bandas en la resistencia o usar un multímetro
para medir la resistencia. Se recomienda usar el primer método, ya que es
más conveniente y rápido. Para medir el valor, utiliza el multímetro.
Como se muestra en la tarjeta, cada color representa un número.
.. image:: img/image47.jpeg
Diagrama Esquemático
-------------------------
En este experimento, conecta una resistencia de 220Ω al ánodo (el pin largo)
del LED, luego conecta la resistencia a 3.3 V y conecta el cátodo (el pin corto)
del LED a GPIO17 de la Raspberry Pi. Por lo tanto, para encender un LED,
necesitamos establecer el GPIO17 en un nivel bajo (0V). Podemos obtener este
fenómeno mediante programación.
.. note::
**Pin11** se refiere al undécimo pin de la Raspberry Pi de izquierda a derecha, y sus correspondientes números de pin **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 el wiringPi. En el contenido relacionado con el
lenguaje Python, BCM 17 es 17 en la columna BCM de la siguiente tabla.
Al mismo tiempo, son equivalentes al undécimo pin de la Raspberry Pi, Pin 11.
============ ======== ======== ====
T-Board Name physical 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 que sigas estos pasos.
Ve a **~/** y encuentra la carpeta
**davinci-kit-for-raspberry-pi**.
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. Así que ahora has ingresado a la ruta del código **1.1.1_BlinkingLed.c**.
.. image:: img/image51.png
:width: 800
:align: center
En las siguientes lecciones, utilizaremos comandos para acceder al archivo de
código en lugar de hacer clic derecho. Pero puedes elegir el método que prefieras.
2) Si accedes a la Raspberry Pi de forma remota, usa ``cd`` para cambiar de directorio:
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/1.1.1/
.. note::
Cambia el directorio a la ruta del código en este experimento usando cd.
De cualquiera de las maneras, ahora estás en la carpeta C. Los procedimientos
posteriores 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 GNU Compiler Collection. Aquí, funciona como
compilador del archivo de lenguaje C *1_BlinkingLed.c* y genera un
archivo ejecutable.
En el comando, ``-o`` significa salida (el carácter inmediatamente
siguiente a -o es el nombre del archivo que se generará tras la compilación, y se generará un ejecutable llamado ``BlinkingLed``) y ``-lwiringPi`` es para cargar
la biblioteca wiringPi (``l`` es la abreviatura de biblioteca).
**Paso 4:** Ejecuta el archivo ejecutable generado en el paso anterior.
.. raw:: html
.. code-block::
sudo ./BlinkingLed
.. note::
Para controlar el GPIO, necesitas ejecutar el programa con el
comando, sudo (superusuario). El comando ``./`` indica el directorio actual.
El comando completo es para ejecutar ``BlinkingLed`` en el
directorio actual.
.. image:: img/image52.png
:width: 800
:align: center
Después de que el código se ejecute, verás el LED parpadeando.
.. note::
Si no funciona después de ejecutarlo, o si aparece un mensaje de error: "wiringPi.h: No such file or directory", consulta :ref:`faq_c_nowork`.
Si deseas editar el archivo de código ``1.1.1_BlinkingLed.c``, presiona ``Ctrl + C``
para detener la ejecución del código. Luego, escribe el siguiente comando para abrirlo:
.. raw:: html
.. code-block::
nano 1.1.1_BlinkingLed.c
.. note::
nano es una herramienta de editor de texto. El comando se utiliza para abrir el
archivo de código ``1.1.1_BlinkingLed.c`` mediante esta herramienta.
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)
{
// Si la inicialización de wiring falla, imprime un mensaje en la pantalla
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
}
pinMode(LedPin, OUTPUT);// Establece LedPin como salida para escribirle un valor.
while(1){
// LED encendido
digitalWrite(LedPin, LOW);
printf("...LED on\n");
delay(500);
// LED apagado
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 la
Raspberry Pi. Añadir esta biblioteca facilita la inicialización del hardware,
y la salida de puertos de I/O, PWM, etc.
.. code-block:: c
#include
Biblioteca estándar de I/O. La función pintf utilizada para imprimir los datos
que se muestran en la pantalla se realiza mediante esta biblioteca. Hay muchas
otras funciones de rendimiento que puedes explorar.
.. code-block:: c
#define LedPin 0
El pin GPIO17 de la T_Extension Board corresponde al GPIO0 en
wiringPi. Asignamos GPIO0 a LedPin, por lo que 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 lo 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);
Establece LedPin como salida para escribirle un valor.
.. code-block:: c
digitalWrite(LedPin, LOW);
Establece GPIO0 en 0V (nivel bajo). Dado que el cátodo del LED está conectado a
GPIO0, el LED se encenderá si GPIO0 se establece en bajo. Por el contrario,
si GPIO0 se establece en alto, digitalWrite (LedPin, HIGH): el LED se apagará.
.. code-block:: c
printf("...LED off\n");
La función printf es una función de la biblioteca estándar y su prototipo
de función se encuentra en el archivo de encabezado "stdio.h". La forma
general de la llamada es: printf(" cadena de control de formato ", columnas
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 no formateada.
La cadena de formato comienza con '%' seguido de caracteres de formato, como
'%d' para la salida de enteros decimales. Las cadenas no formateadas se imprimen
como prototipos. Lo que se usa aquí es una cadena no formateada, 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);
Delay (500) mantiene el estado actual de HIGH o LOW durante 500ms.
Esta es una función que suspende el programa durante un periodo de tiempo.
Y la velocidad del programa está determinada por nuestro hardware. Aquí
encendemos
o apagamos el LED. Si no hay una función de delay, el programa ejecutará
todo el código muy rápidamente y en un bucle continuo. Así que necesitamos
la función de delay para ayudarnos a escribir y depurar el programa.
.. code-block:: c
return 0;
Normalmente, se coloca al final de la función principal, indicando que la
función devuelve 0 al ejecutarse con éxito.