pigpio is a C library for the Raspberry which allows control of the General Purpose Input Outputs (GPIO).
C Roff Python Shell C++ Makefile CMake
Switch branches/tags
Nothing to show
Clone or download
Permalink
Failed to load latest commit information.
EXAMPLES pep8:E711 comparison to None should be `if cond is not None:` Apr 27, 2016
util wave delete comments Feb 8, 2018
.gitignore Add dist, *pyc and .egg-info to .gitignore Dec 21, 2016
MakeRemote V67: #198 added process exit codes for pigs Mar 11, 2018
Makefile V67: #198 added process exit codes for pigs Mar 11, 2018
README V67: #198 added process exit codes for pigs Mar 11, 2018
README.md Update README.md Oct 18, 2017
UNLICENCE V6 Dec 12, 2013
command.c V67: use with for Python locks, show_errors flag Mar 20, 2018
command.h V57 Oct 30, 2016
custom.cext V26 Feb 2, 2015
pig2vcd.1 Docs plus reverse PR #164 flag meaning Feb 4, 2018
pig2vcd.c V6 Dec 12, 2013
pigpio.3 V67: use with for Python locks, show_errors flag Mar 20, 2018
pigpio.c V67: #160 buffer size to 512, improved active test Mar 13, 2018
pigpio.h V67: use with for Python locks, show_errors flag Mar 20, 2018
pigpio.py V67: use with for Python locks, show_errors flag Mar 20, 2018
pigpiod.1 Issues #131 and #141 Feb 6, 2018
pigpiod.c V65 Feb 8, 2018
pigpiod_if.3 wave delete comments Feb 8, 2018
pigpiod_if.c V63 May 13, 2017
pigpiod_if.h wave delete comments Feb 8, 2018
pigpiod_if2.3 V66: #178 update script parameters command PROCU Feb 13, 2018
pigpiod_if2.c V66: #178 update script parameters command PROCU Feb 13, 2018
pigpiod_if2.h V66: #178 update script parameters command PROCU Feb 13, 2018
pigs.1 V67: #198 added process exit codes for pigs Mar 11, 2018
pigs.c V67: #198 added process exit codes for pigs Mar 11, 2018
pigs.h V67: #198 added process exit codes for pigs Mar 11, 2018
setup.py V67: use with for Python locks, show_errors flag Mar 20, 2018
x_pigpio.c wave delete comments Feb 8, 2018
x_pigpio.py V48 Mar 8, 2016
x_pigpiod_if.c Corrected test list argument errors Feb 6, 2018
x_pigpiod_if2.c Corrected test list argument errors Feb 6, 2018
x_pigs V66: #178 update script parameters command PROCU Feb 13, 2018
x_pipe V48 Mar 8, 2016

README.md

pigpio

pigpio is a C library for the Raspberry which allows control of the General Purpose Input Outputs (GPIO).

Features

  • Sampling and time-stamping of GPIO 0-31 between 100,000 and 1,000,000 times per second
  • Provision of PWM on any number of the user GPIO simultaneously
  • Provision of servo pulses on any number of the user GPIO simultaneously
  • Callbacks when any of GPIO 0-31 change state (callbacks receive the time of the event accurate to a few microseconds)
  • Notifications via pipe when any of GPIO 0-31 change state
  • Callbacks at timed intervals
  • Reading/writing all of the GPIO in a bank (0-31, 32-53) as a single operation
  • Individually setting GPIO modes, reading and writing
  • Socket and pipe interfaces for the bulk of the functionality in addition to the underlying C library calls
  • Construction of arbitrary waveforms to give precise timing of output GPIO level changes (accurate to a few microseconds)
  • Software serial links, I2C, and SPI using any user GPIO
  • Rudimentary permission control through the socket and pipe interfaces so users can be prevented from "updating" inappropriate GPIO
  • Creating and running scripts on the pigpio daemon

Interfaces

The library provides a number of control interfaces

  • the C function interface,
  • the /dev/pigpio pipe interface,
  • the socket interface (used by the pigs utility and the Python module).

Utilities

A number of utility programs are provided:

  • the pigpiod daemon,
  • the Python module,
  • the piscope digital waveform viewer,
  • the pigs command line utility,
  • the pig2vcd utility which converts notifications into the value change dump (VCD) format (useful for viewing digital waveforms with GTKWave).

Documentation

See http://abyz.me.uk/rpi/pigpio/

Example programs

See http://abyz.me.uk/rpi/pigpio/examples.html

GPIO

ALL GPIO are identified by their Broadcom number. See http://elinux.org.

There are 54 GPIO in total, arranged in two banks.

Bank 1 contains GPIO 0-31. Bank 2 contains GPIO 32-54.

A user should only manipulate GPIO in bank 1.

There are at least three types of board:

  • Type 1
    • 26 pin header (P1)
    • Hardware revision numbers of 2 and 3
    • User GPIO 0-1, 4, 7-11, 14-15, 17-18, 21-25
  • Type 2
    • 26 pin header (P1) and an additional 8 pin header (P5)
    • Hardware revision numbers of 4, 5, 6, and 15
    • User GPIO 2-4, 7-11, 14-15, 17-18, 22-25, 27-31
  • Type 3
    • 40 pin expansion header (J8)
    • Hardware revision numbers of 16 or greater
    • User GPIO 2-27 (0 and 1 are reserved)

It is safe to read all the GPIO. If you try to write a system GPIO or change its mode you can crash the Pi or corrupt the data on the SD card.