How to Control BeagleBone’s GPIOs

By Rui Santos, Luis Miguel Costa Perestrelo

Following is a handy reference that you can use to control and access your BeagleBone’s general purpose input/output (GPIOs) with the file system, BoneScript, and Python.

Controlling the GPIO with the file system

You can use the following commands to control the GPIO with the file system.

  • Exporting a pin:

    echo 40 > /sys/class/gpio/export
  • Setting a pin OUTPUT:

    echo out > /sys/class/gpio/gpio40/direction
  • Writing a pin HIGH:

    echo 1 > /sys/class/gpio/gpio40/value
  • Writing a pin LOW:

    echo 0 > /sys/class/gpio/gpio40/value
  • Setting a pin INPUT:

    echo in > /sys/class/gpio/gpio40/direction
  • Reading the value from an INPUT pin (returns 1 for HIGH and 0 for LOW):

  • cat /sys/class/gpio/gpio40/value

Controlling the GPIO with BoneScript

You can use the following BoneScript commands to control the GPIO.

  • Loading a BoneScript module:

    var b = require('bonescript');
  • Setting a pin OUTPUT:

    b.pinMode("P9_14", b.OUTPUT);
  • Writing a pin HIGH:

    b.digitalWrite("P9_14", b.HIGH);
  • Writing a pin LOW:

    b.digitalWrite("P9_14", b.LOW);
  • Setting a pin INPUT:

    b.pinMode("P8_11", b.INPUT);
  • Reading the value from a digital INPUT pin (returns HIGH or LOW):

    b.digitalRead("P8_11");
  • Setting a pin for pulse-width modulation (PWM) with 50 percent duty cycle:

    b.pinMode('P9_14', b.OUTPUT);
    b.analogWrite('P9_14', 0.5);
  • Reading the value from an analog INPUT pin (returns a value between 0 and 1):

  • b.analogRead('P9_40');

Controlling the GPIO with Python

You can use the following Python commands to control the GPIO.

  • Importing Adafruit’s BeagleBone Input Output Library:

    import Adafruit_BBIO.GPIO as GPIO
  • Setting a pin OUTPUT:

    GPIO.setup("P9_14", GPIO.OUT)
  • Writing a pin HIGH:

    GPIO.output("P9_14", GPIO.HIGH)
  • Writing a pin LOW:

    GPIO.output("P9_14", GPIO.LOW)
  • Setting a pin INPUT:

    GPIO.setup("P8_11", GPIO.IN)
  • Reading the value from a digital INPUT pin (returns HIGH or LOW):

    GPIO.input("P8_11")
  • Setting a pin for PWM with 50 percent duty cycle:

    import Adafruit_BBIO.PWM as PWM
    PWM.start("P9_14", 50)
  • Setting an analog INPUT:

    import Adafruit_BBIO.ADC as ADC
    ADC.setup()
  • Reading the value from an analog INPUT pin (returns a value between 0 and 1):

  • analogReading = ADC.read("P9_40")