Library for working with I2C bus on Raspberry Pi
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


I2C library on C# for Raspberry Pi. About connecting Arduino and Raspberry Pi read this blog posts: hardware part and software part.


The library provides basic read/write functionality with I2C-devices for Mono v. 2.10.x. It uses device files exposed by the I2C kernel drivers in Arch Linux.


  1. Update your system to get I2C kernel drivers. For Arch Linux:
$ pacman -Syu
  1. Load I2C kernel module. You can do
$ modprobe i2c-dev

Or if you want to load the module automatically on boot add i2c-dev to /etc/modules/. If you're on Arch Linux create file /etc/modules-load.d/i2c.conf and add i2c-dev to the file.

Library Usage

  1. The RPi.I2C.Net library requires a native-C library, which is a part of this project.
    • It's precompiled for Arch Linux. If you need to compile it, run make from Lib/LibNativeI2C/src.
    • Put to /usr/lib/ or to the same folder where RPi.I2C.Net.dll is located.
  2. Create I2CBus instance with I2CBus.Open(). The function accepts path to an I2C device file, which is "/dev/i2c-0" for RPi rev.1 and "/dev/i2c-1" for RPi rev.2 by default.
  3. Use I2CBus.WriteBytes() or I2CBus.ReadBytes().
using (var bus = RPi.I2C.Net.I2CBus.Open("/dev/i2c-1"))
	bus.WriteByte(42, 77);


The performance testing was done using:

  • Raspberry Pi, Rev.2, not overclocked
  • Arduino Uno

####Writing Sending 3-byte packets to Arduino. Results: 1428 transactions per second (4284 Bytes/s)

####Reading Reading 3-byte packets from Arduino. Results: 1660 transactions per second (4980 Bytes/s)

####Reading and Writing Sending 3-byte packet to Arduino and reading back the respose 3-byte packet. Results: 830 transactions per second (4980 Bytes/s total)


The project uses MIT license: do whatever you want wherever you want it.