Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.

Raspberry# IO

See the Raspberry# IO Wiki for full documentation and samples.


Raspberry# IO is a .NET/Mono IO Library for Raspberry Pi. This project is an initiative of the Raspberry# Community.

Current release is an early public release. Some features may not have been extensively tested. Raspberry# IO currently supports low- and high-level GPIO input/output, support for SPI and I2C peripherals.

Samples for SPI (for MCP3008 ADC or MCP4822 DAC), I2C (for MCP23017 I/O Expander), HD44780 LCD display and HC-SR04 distance sensor are provided.

Support for extended I/O (such as SDI, or PWM for motor control) is planned for future releases.

Programs using Raspberry# IO must be run with elevated privileges, for example the Test.Gpio.Chaser program included in solution:

sudo mono Test.Gpio.Chaser.exe -loop



Raspberry.IO.GeneralPurpose provides a convenient way to use Raspberry Pi GPIO pins, while using .NET concepts, syntax and case. You can easily add a reference to it in your Visual Studio projects using the Raspberry.IO.GeneralPurpose Nuget.

It currently support the following features:


  • Access to GPIO pins through in 3 flavors: basic (using files), through memory, and full (memory with support for edge detection through "pseudo-interrupt"). By default, full driver is used.
  • Addressing through processor pin number or connector pin number
  • Pin assignment of various Raspberry Pi revisions (as of 2013-09, Raspberry Pi model B rev1 and rev2 as well as Raspberry Pi model A, including rev2 P5 connector)
  • Controlled use of resources using a IDisposable component and ability to use edge detection instead of polling
  • Support sub-millisecond polling of input pins


  • Giving custom name to pins for more readable code
  • Easy-to-use, declarative configuration of pins. Ability to revert the polarity (1/0) of pins; ability to use an input pin as a switch button
  • Firing of events when pin status change (input as well as output), using polling
  • High-level behaviors for output pins, including blink, pattern and chaser


  • Preliminary support for SPI through Raspberry.IO.SerialPeripheralInterface assembly
  • Includes SPI samples for MCP3008 ADC and MCP4822 DAC
  • Includes support for Linux's kernel SPI module driver spi-bcm2708 (/dev/spidev0.0)


  • Preliminary support for I2C through Raspberry.IO.InterIntegratedCircuit assembly
  • Includes I2C sample for MCP23017 I/O expander


Parts of Raspberry# IO are inspired by BCM2835 C Library and Gordon Henderson's WiringPi.


A .NET/Mono IO Library for Raspberry Pi






No releases published


No packages published