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í.





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