Pingo provides a uniform API to program devices like the Raspberry Pi, BeagleBone Black, pcDuino etc. just like the Python DBAPI provides an uniform API for database programming in Python.
The API is object-oriented but easy to use: a board is an instance of a Board subclass. Every board has a dictionary called pins which lists all GPIO pins on the board. Each pin is an instance of a Pin subclass with attributes that you can inspect to learn about its capabilities.
The name Pingo is a tribute to Garoa Hacker Clube, where the project started (the words pingo and garoa are related in Portuguese). To our English-speaking friends we like to say that it means “pin, go!” – the main purpose of this package.
Basicly, there are two ways of installing Pingo:
To install Pingo from PyPI (Python Package Index), first, make sure you have pip installed in your machine. On Linux machines, this usually means you have the python-pip package installed. You can check if you have pip in your machine by typing the following text on a shell prompt:
$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)
If the output is similar from the one above, you can install Pingo by simple typing pip install pingo as root on you terminal. That’s it!
Since Pingo is currently in alpha state and under heavy develpment, installing Pingo from Github may be a good idea. Besides that, it will be easy for you to contribute to the project, if you wish. See the Contributing section on the left menu.
To install Pingo from Github, you must have Git installed. Presuming you already have that, just type:
$ git clone https://github.com/garoa/pingo.git
After that, get into the pingo directory and setup Python to use your brand new directory as a library:
$ python setup.py develop
Done! You are ready to program using Pingo!
To use pingo, the first step is to instatiate a concrete Board. Each Pingo driver is a concrete board, for example, pingo.rpi.RaspberryPi and pingo.arduino.ArduinoFirmata are two such boards.
Pingo can automatically detect the board in most common cases. If it is running on a supported board, pingo.detect.MyBoard() returns an proper board instance. If Pingo is running on an unsupported machine (eg. a PC running GNU/Linux), it will try to find a remote Arduino using the Firmata protocol via USB and – if succesfull – will return a pingo.arduino.ArduinoFirmata instance.
Once you have a board instance, its possible to access its pins through the board.pins dict.
import pingo
from time import sleep
board = pingo.detect.MyBoard()
led_pin = board.pins[13]
led_pin.mode pingo.OUT
while True:
led_pin.hi()
sleep(1)
led_pin.lo()
sleep(1)
pingo.udoo.udoo pingo.arduino.yun are examples of drivers, and the respective Udoo and YunBridge are extends the pingo.board.Board interface class.
The following table lists the drivers currently planned or under development.
Board | Type | Module/Package | Status | Notes |
---|---|---|---|---|
Arduino Firmata | remote | arduino | level 1 | requires firmata library on any Arduino board |
Arduino Yún | on-board | arduino.yun | experim. | requires Bridge sketch on the Arduino Yún |
BeagleBone Black | on-board | bbb | experim. | |
Fantasma | fake | ghost | level 1 | not a real board, just a software fake for testing |
Intel Galileo | on-board | galileo | none | |
pcDuino | on-board | pcduino | level 1 | |
Raspberry Pi | on-board | rpi | level 0 | requires RPi.GPIO on the Raspberry Pi |
UDOO | on-board | udoo | level 0 |