Raspberry Pi – Activando leds vía GPIO

Empezaremos a trastear con el GPIO de la RPi , para ello montaremos este sencillo esquema en una placa de prototipado

Debido a la cantidad de componentes a ubicar en un espacio tan reducido de 3cms x 7cms habrá que planificar muy bien la distribución de todos los elementos , estas placas de prototipado se pueden encontrar aquí.

Soldadura del conector GPIO y del sensor BME 680
Distribución casi completa de los componentes.
En la cara inferior esto parece una madeja sin sentido , pero todo esta correcto…
Vista de la cara superior , parte de las resistencias irán debajo de la pantalla OLED
Vista de como quedaría en el Pi 4 que usare para pruebas antes de pasarlo a la Pi Zero 2 W

Crearemos un nuevo proyecto en C# para netcore 3.1 y pegaremos este codigo

using System;
using System.Device.Gpio;
using System.Threading;

namespace Test_Leds
{
    class Program
    {

        static void Main(string[] args)
        {
            //Codigo Raspberry pi 
            //Definicion de I/O
            int Led_Rojo = 26;
            int Led_Verde = 6;
            int Led_Amarillo = 5;

            GpioController controller = new GpioController();

            //Modo de trabajo I/O
            controller.OpenPin(Led_Verde, PinMode.Output);
            controller.OpenPin(Led_Amarillo, PinMode.Output);
            controller.OpenPin(Led_Rojo, PinMode.Output);

            while (true)
            {
                for (int nContador = 0; nContador < 3; nContador++)
                {
                    Thread.Sleep(250);
                    controller.Write(Led_Verde, PinValue.Low);
                    controller.Write(Led_Amarillo, PinValue.Low);
                    controller.Write(Led_Rojo, PinValue.Low);

                    switch (nContador)
                    {
                        case 0:
                            controller.Write(Led_Verde, PinValue.High);
                            break;
                        case 1:
                            controller.Write(Led_Amarillo, PinValue.High);
                            break;
                        case 2:
                            controller.Write(Led_Rojo, PinValue.High);
                            break;
                    }
                    Thread.Sleep(250);
                    Console.Write(".");
                }
            }
        }
    }
}

Una vez compilado mediante pscp subiremos la carpeta a nuestra RPi

pscp  -r -P 22 -pw TU_CONTRASEÑA .\bin\Debug\netcoreapp3.1\*.*  antonio@192.168.1.113:/home/antonio/net/test_leds

Y lo ejecutaremos desde la RPI con

dotnet /home/antonio/net/test_leds/test_leds.dll

Este es el resultado , los leds cambian secuencialmente cada 250 ms

BONUS: Arranque automático de la aplicación

Crearemos el fichero test-leds.service y contendrá lo siguiente :

[Unit]
Description=Test Leds
After=network.target

[Service]
Type=forking
WorkingDirectory=/home/antonio/net/test_leds
ExecStart=/root/dotnet/dotnet /home/antonio/net/test_leds/test_leds.dll
StandardOutput=inherit
StandardError=inherit
Restart=always
RemainAfterExit=yes
User=root

[Install]
WantedBy=multi-user.target

Ejecutaremos estos comandos

sudo cp test-leds.service /etc/systemd/system/test-leds.service

systemctl daemon-reload

sudo systemctl enable test-leds.service

sudo systemctl start test-leds.service

sudo systemctl status test-leds.service

Y este seria el resultado

Con esto y un bizcocho ……

1 comentario en «Raspberry Pi – Activando leds vía GPIO»

  1. Enhorabuena Antonio!

    Acabo de encontrar tu página web y me he alegrado mucho que uses C# en la Raspberry Pi 4 pues es la idea que tengo para desarrollar. Se aprecia que su contenido es de mucha calidad. !Así que, es visita obligada por mi parte!

    Francisco Sánchez

    Responder

Deja un comentario