Skip to main content

A module to control BeagleBone IO channels

Project description

**PLEASE NOTE: This library may have breaking changes as development continues. Please read the changelog anytime you update the library!**

**The PWM Duty Cycle range was reversed in 0.0.15 from 100(off)-0(on) to 0(off)-100(on). Please update your code accordingly.**

**Adafruit's BeagleBone IO Python Library**

This is a set of Python tools to allow GPIO, PWM, and ADC access on the BeagleBone using the Linux 3.8 Kernel and above (latest releases).

It has been tested on the 5-20 and 6-6 Angstrom image on the BeagleBone Black.

**Note: BBIO has been renamed to Adafruit_BBIO.**

**Installation on Angstrom**


/usr/bin/ntpdate -b -s -u
opkg update && opkg install python-pip python-setuptools
pip install Adafruit_BBIO


git clone git://
#set the date and time
/usr/bin/ntpdate -b -s -u
#install dependency
opkg update && opkg install python-distutils
cd adafruit-beaglebone-io-python
python install

**Installation on Ubuntu/Debian**


sudo ntpdate
sudo apt-get update
sudo apt-get install build-essential python-dev python-pip -y
#easy_install -U distribute //debian only
sudo pip install Adafruit_BBIO


sudo ntpdate
sudo apt-get update
sudo apt-get install build-essential python-dev python-pip -y
git clone git://
cd adafruit-beaglebone-io-python
sudo python install
cd ..
sudo rm -rf adafruit-beaglebone-io-python


Using the library is very similar to the excellent RPi.GPIO library used on the Raspberry Pi. Below are some examples.

**GPIO Setup**

Import the library, and setup as GPIO.OUT or GPIO.IN::

import Adafruit_BBIO.GPIO as GPIO
GPIO.setup("P8_14", GPIO.OUT)

You can also refer to the pin names::

GPIO.setup("GPIO0_26", GPIO.OUT)

**GPIO Output**

Setup the pin for output, and write GPIO.HIGH or GPIO.LOW. Or you can use 1 or 0.::

import Adafruit_BBIO.GPIO as GPIO
GPIO.setup("P8_14", GPIO.OUT) GPIO.output("P8_14", GPIO.HIGH)

**On-Board LEDs**

On-board LEDs (USR0-USR3) are handled by LED class driver rather than the GPIO pin driver.

They have a different path in the /sys/ filesystem.

Setup the pin for output and write GPIO.HIGH or GPIO.LOW::

import Adafruit_BBIO.GPIO as GPIO
import time

for i in range(4):
GPIO.setup("USR%d" % i, GPIO.OUT)

while True:
for i in range(4):
GPIO.output("USR%d" % i, GPIO.HIGH)
for i in range(4):
GPIO.output("USR%d" % i, GPIO.LOW)

**GPIO Input**

Inputs work similarly to outputs.::

import Adafruit_BBIO.GPIO as GPIO
GPIO.setup("P8_14", GPIO.IN)

Polling inputs::

if GPIO.input("P8_14"):

Waiting for an edge (GPIO.RISING, GPIO.FALLING, or GPIO.BOTH::

GPIO.wait_for_edge(channel, GPIO.RISING)

Detecting events::

GPIO.add_event_detect("P9_12", GPIO.FALLING)
#your amazing code here
#detect wherever:
if GPIO.event_detected("P9_12"):
print "event detected!"


import Adafruit_BBIO.PWM as PWM
#PWM.start(channel, duty, freq=2000, polarity=0)
#duty values are valid 0 (off) to 100 (on)
PWM.start("P9_14", 50)
PWM.set_duty_cycle("P9_14", 25.5)
PWM.set_frequency("P9_14", 10)


#set polarity to 1 on start:
PWM.start("P9_14", 50, 2000, 1)


import Adafruit_BBIO.ADC as ADC

#read returns values 0-1.0
value ="P9_40")

#read_raw returns non-normalized value
value = ADC.read_raw("P9_40")

**Running tests**

Install py.test to run the tests. You'll also need the python compiler package for py.test.::

opkg update && opkg install python-compiler
#Either pip or easy_install
pip install -U pytest
easy_install -U pytest

Execute the following in the root of the project::



The BeagleBone IO Python library was originally forked from the excellent MIT Licensed [RPi.GPIO]( library written by Ben Croston.


Written by Justin Cooper, Adafruit Industries. BeagleBone IO Python library is released under the MIT License.
* Merge pull request #108 from MatthewWest for PWM support in Linux kernel 4.1+
* Merge pull request #96 from PeteLawler for ADC support in Linux kernel 4.1+
* Finally publish new version to PyPi
* Bump major version number to signify long duration since last release

* Merge Python 3 compatibility fixes from Github user westphahl.
* Moved old Angstrom build fix for missing py_compile from to separate file.

* Fix for SPI not loading spidevX.X correctly based on load order
* Initialize ctrl_dir in unload_device_tree #63
* Clean up unused/dead code

* Fix for SPI.xfer crashes python after 3 calls
* Added a retry to reading for the analog inputs to avoid a bug where reading back and forth between two analog inputs would cause the resource to be unavailable every 16 scans (zthorson)
* Updated the build_path to be more selective over what paths it chooses (zthorson)
* Update Debian installation instructions in README (justinledwards)
* Increase the size of the buffer used for storing device tree names (SaintGimp)

* UART - Include UART overlays, and compile upon installation
* UART - Rename UART overlays
* Adafruit_I2C - Remove readU16Rev and readS16Rev
* Adafruit_I2C - Updated readU16/readS16 for correct 16-bit reads

* Fix SPI memory leaks
* Clean up of PWM code (bit-hacker, jwcooper)
* Remove UART debug statements

* Add polarity as optional fourth parameter to PWM.start(). Valid values are 0 and 1. Default is still 0.
* Fix for actually setting the polarity in start.
* Add new unit tests to check that the polarity is being set properly, and valid values passed in.

* Fix PWM duty cycle so 0 is off and 100 is on. Set polarity to 0 by default.
* Give extra buffer space in export, and unexport functions for gpio that are more than 2 digits (Chris Desjardins)
* Add new test case for 3 digit gpio (Chris Desjardins)
* Fix for test_direction_readback. gpio_get_direction wasn't properly null terminating the direction string (Chris Desjardins)

* Fix GPIO.gpio_function to work with the IO name (zthorson)
* Fix IOErrors not getting raised when fopen fails while loading overlays into device tree (bradfordboyle, jwcooper)
* Add new UART tests

* Remove the gpio parameter from callbacks (cdesjardins)

* Bump version due to pypi issues

* New UART module to export UART overlays
* Alpha support for SPI
* Add small delay after loading any device tree overlays

* Fix direction for event detection code
* Fix for segmentation faults on add_event_detect

* Fix for ADC Segmentation Faults

* Temp remove overlay compilation. Ubuntu failures.

* Refactor and clean up adc and pwm
* Fix tests for Adafruit_BBIO rename

* Include as top-level module

* Rename from BBIO to Adafruit_BBIO to reduce library conflicts and confusion.

* Support for pip and easy_install

* ADC enabled

* PWM enabled

* Initial Commit
* GPIO mostly working
* Initial GPIO unit tests
* PWM in progress

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Adafruit_BBIO-1.0.0.tar.gz (43.7 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page