Toggle Raspberry Pi GPIO Pins with ASP.NET Core 2.0

Today I’ll show you how to Toggle Raspberry Pi GPIO Pins with ASP.NET Core 2.0.

First be aware of the following prerequisites:

.NET Core 2.0 SDK

A Raspberry Pi 3 Running Raspbian

Install linux dependencies: sudo apt-get install curl libunwind8 gettext

Now let’s start:

1. Create a folder for your new project

Open a command prompt an run:

mkdir aspnet.webapi.rpi.gpio cd aspnet.webapi.rpi.gpio

2. Create an ASP.NET Core Web API project

Create an ASP.NET Core Web API project with the following command:

dotnet new webapi

3. Add a reference to Unosquare.Raspberry.IO

dotnet add package Unosquare.Raspberry.IO

Now restore the packages:

dotnet restore

4. Create BlinkyController.cs

In the Controllers folder, create a BlinkyController.cs file with the following contents:

using Microsoft.AspNetCore.Mvc; using Unosquare.RaspberryIO; using Unosquare.RaspberryIO.Gpio; namespace aspnet.webapi.rpi.gpio.Controllers { [Route("api/[controller] ")] public class BlinkyController : Controller { [HttpPost] public void Post([FromBody] bool isOn) { // Control GPIO pin 5 var pin = Pi.Gpio.Pin05; pin.PinMode = GpioPinDriveMode.Output; pin.Write(!isOn); } } }

Note: The sample toggles GPIO pin 5.

5. Publish the application

Publish the application with the following commands:

dotnet publish -c Release -r linux-arm

6. Copy the files to your Raspberry

Copy the contents of the folder \aspnet.on.rpi\bin\Release

etcoreapp2.0\linux-arm\publish to the Raspberry (i.e. /home/pi/publish)

Note: For this task I connect to the Raspberry via SFTP using WinSCP

7. Run the application

Connect to Raspberry using ssh and then run the following commands:

sudo -i cd /home/pi/publish chmod +x aspnet.webapi.rpi.gpio export ASPNETCORE_URLS= "http://*:5000" ./aspnet.webapi.rpi.gpio

Note: Unosquare.Raspberry.IO must be run with elevated privileges.

8. Call the Web API to Toggle the GPIO pin

Post data to the Web API to toggle the GPIO pin.

To turn it on:

curl -H "Content-Type: application/json" -d 'true' http : // [ip of your raspberry] : 5000/api/blinky

To Turn it off:

curl -H "Content-Type: application/json" -d 'false' http : // [ip of your raspberry] : 5000/api/blinky

Get the code here.

Hope it helps!