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 ……