A .NET/Mono IO Library for Raspberry Pi
C# Other
Latest commit 6a9d3cb Jan 8, 2017 @ebezine ebezine committed on GitHub Merge pull request #79 from lkroliko/patch-1
Add more PWM channels to PCA9685


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.