GPIO – General Purpose I/O • Digital I/O pins – 0/1 == HIGH/LOW • Analog pins – A/D converter • Digital pins with PWM support – Stand-in for analog output without a real D/A converter
• Python onboard, when they run embedded GNU/Linux • Remotely controlled by Python in another computer – ex: Arduino via Firmata over serial with the PyMata library
INPUT = LOW = "0" OUTPUT = HIGH = "1" def pin_mode(pin, mode): with open(GPIO_PATH+'mode/gpio%s' % pin, 'w') as f: f.write(mode) def digital_write(pin, value): with open(GPIO_PATH+'pin/gpio%s' % pin, 'w') as f: f.write(str(value)) def analog_read(pin): with open(ADC_PATH+'adc%d' % pin) as f: f.seek(0) return int(f.read(16).split(':')[1]) def setup(): for i in range(18): pin_mode(i, OUTPUT) digital_write(i, LOW) setup() while True: for i in [0, 1, 7, 5, 4, 2]: digital_write(i, 1) delay = analog_read(5)/4096.0 time.sleep(delay) digital_write(i, 0) No special libraries used in this script SysFS: GPIO mapped on the filesystem
ADC.setup() from time import sleep pinos = [16, 21, 22, 13, 12, 11] for pino in pinos: GPIO.setup("P9_" + str(pino), GPIO.OUT) while True: for pino in pinos: GPIO.output("P9_" + str(pino), GPIO.HIGH) tempo = ADC.read('P9_39') print tempo sleep(tempo) GPIO.output("P9_" + str(pino), GPIO.LOW) Specific library: Adafruit_BBIO
%s' % board) pot = board.pins['A0'] leds = board.digital_pins[6:13] for led in leds: led.mode = pingo.OUT while True: for led in leds: if led.location == 9: continue led.high() time.sleep(pot.ratio()) led.low() AnalogPin 'A0' DigitalPins 6 to 12 This script should run on any supported board that has analog input pins. Depending on the board layout, the pin ids may have to be changed.
in July 2015: driver operation functionality Raspberry Pi on board digital + PWM ArduinoFirmata remote digital + PWM + ADC Intel Edison/Galileo on board digital + ADC PcDuino on board digital + ADC UDOO on board digital
• Split drivers into core and contributed – make it easier to accept contributions • Implement specialized pins: PWM, DAC... • Implement more protocols: SPI, I2C... • Implement more parts
Interesting architectural decisions yet to be made – Any contribution is noted and makes a difference • Docs: http://pingo.io • Repo: http://github.com/pingo-io • Google Groups: pingo-io http://groups.google.com/forum/#!forum/pingo-io • Me: Luciano Ramalho – Twitter: @ramalhoorg – [email protected] – slides: http://speakerdeck.com/ramalho