What libraries are available for interfacing with the GPIO?

  • not a complete list, but here are a few - although I think this question will be closed, as list-type questions tend not to work well on the stack sites, as there will be a never-ending stream of answers Commented Jun 22, 2015 at 4:05

9 Answers 9


I'm going to interpret what I think you might be asking more broadly as "How can I control GPIO from userland?"

A very nice way to get started using GPIO is using the /sys filesytem. You can do it all from the command line.

For example,

cd sys/class/gpio
echo 0 > export
cd gpio0
echo high > direction

More documentation is in linux/Documentation/gpio.txt.

  • 1
    Does this work with every OS?
    – Alex L
    Commented Jun 13, 2012 at 7:12
  • This is linux-specific.
    – blueshift
    Commented Jun 13, 2012 at 9:03
  • 1
    Are there any tutorials that use this method? I have only seen libraries (mainly the python one). Commented Jun 13, 2012 at 13:56
  • 2
    This isn't necessarily a library as per the request of the OP. Commented Jun 18, 2012 at 17:04
  • 1
    The other answers for this question are much better - this answer does not answer the question about libraries.
    – recantha
    Commented Jan 2, 2013 at 13:29

There is one that I've found here. I haven't had the chance to test it, as my Pi hasn't arrived. It does, however, look assuring. There's even a forum thread here that professes promising payoff. If you want a down-to-the-basics C example using standard libraries, there's one here from eLinux.

  • What was your experiece of this library, then? Commented Aug 9, 2015 at 9:53

RPi.GPIO is a Python package for GPIO control.

This tutorial video shows the basic usage of the package.


quick2wire can be used by regular users (not root):

Quick2Wire Python API

A Python library for controlling the hardware attached to the Raspberry Pi's header pins, without running as the root user.

  • While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes.
    – Mark Booth
    Commented Feb 7, 2013 at 0:59
  • @MarkBooth : "the essential part of the answer" is "can be used by regular users" unlike other answers.
    – dugres
    Commented Feb 7, 2013 at 14:51

I use Wiring PI and it works really great. I use it with language C and had no problems so far. It is easy to understand and simple to handle.


I realize I'm answering a question that is years old, but there is one that hasn't been mentioned yet: gpiozero. https://gpiozero.readthedocs.io/en/stable/

It should already be installed on new versions of Raspbian. You can also install it on other versions of Linux. https://gpiozero.readthedocs.io/en/stable/installing.html


Pi4J allows you to control the GPIO pins using Java. I'm not sure how it works but there's an explanation at http://pi4j.com/


It is really simple to control the GPIO ports in any language as shown on http://elinux.org, so I believe that you actually do not need a framework for the direct control.

You need to know which additional features you expect of a framework, like

  • Remote control via a browser
  • A pretty browser UI or maybe a standalone program
  • Automatic timebased control (cron jobs)

I ended up writing a framework for myself: Control GPIO ports over HTTP and with cron jobs which perfectly fits my needs. I wanted to have something for home-automation. So I needed cron jobs and a JSON web interface to run a native app on my iPhone. Therefore I did not write a browser UI. I believe it would also be good for an alarm system.

I did not find a (complete) list of frameworks yet. There are some mentioned on the forum of raspberrypi.org.


Johny-Five is quite easy to use for those familiar with Node.js or JavaScript. See http://johnny-five.io/examples/raspi-io/

npm install johnny-five raspi-io
var five = require("johnny-five");
var Raspi = require("raspi-io").RaspiIO;
var board = new five.Board({
  io: new Raspi()

board.on("ready", function() {
  var led = new five.Led("P1-13");

Specially useful for Pi projects controlling GPIO through a Web server

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.