Blinking an LED is the ‘Hello World’ of hardware. BeagleBone Black’s LEDs can be controlled by the user and the device can be connected with external LEDs.
BBB has 4 onboard LEDs that serve as indicators for various bits of the hardware and their interfaces can be accessed under
ls /sys/class/leds/ beaglebone:green:usr0 beaglebone:green:usr1 beaglebone:green:usr2 beaglebone:green:usr3
The blinking ‘heartbeat’ LED that indicates BBB is alive and well is
## 'trigger' determines what event is monitored ls /sys/class/leds/beaglebone\:green\:usr0/ brightness device max_brightness power subsystem trigger uevent cat /sys/class/leds/beaglebone\:green\:usr0/trigger none nand-disk mmc0 mmc1 timer oneshot [heartbeat] backlight gpio cpu0 default-on transient ## stop the heart echo none > /sys/class/leds/beaglebone\:green\:usr0/trigger ## turn LED on (no blinking) echo none > /sys/class/leds/beaglebone\:green\:usr0/trigger echo 1 > /sys/class/leds/beaglebone\:green\:usr0/brightness ## strobe LED (get BeagleBone's heart racing at 20 'beats' per second) echo timer > /sys/class/leds/beaglebone\:green\:usr0/trigger echo 25 > /sys/class/leds/beaglebone\:green\:usr0/delay_off echo 25 > /sys/class/leds/beaglebone\:green\:usr0/delay_on ## *whew* ... restore default heartbeat echo heartbeat > /sys/class/leds/beaglebone\:green\:usr0/trigger
How to Use the GPIO Pins
BeagleBone Black has 65 General Purpose Input/Output (GPIO) pins distributed on the board’s P8 and P9 headers. These software-controlled pins can be configured to work with external hardware and are accessed through the Linux kernel’s GPIO interfaces under
ls /sys/class/gpio/ export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport
What can be confusing at first glance is that a pin’s number on the BeagleBone header and its GPIO number are different. Each
gpiochipX controls 32 pins and is used to calculate the GPIO address of a pin (some of the GPIO pins are dedicated to BBB’s onboard hardware and unavailable by default).
P8_12 is controlled by
gpio1 which translates as pin 12 on the second controller (starting from zero) … (32 * 1) + 12 = 44. To add a pin for use I map GPIO_44 into the filesystem by echoing its pin number to the GPIO
export file …
echo 44 > /sys/class/gpio/export ls /sys/class/gpio/ export gpio44 gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport ls /sys/class/gpio/gpio44/ active_low direction edge power subsystem uevent value
… and a new
gpio44 directory is created and the pin is available for work.
Breadboard Blinking LED
For my external LED experiment I use:
- red LED
- 470 ohm resistor
- 2 jumper wires
- penguin (optional)
P8_2 are both
P8_2 to the LED cathode and our newly-enabled
GPIO_44 pin (
P8_12) to the LED anode.
To turn the LED on and off I input settings HIGH and LOW …
## ON echo high > /sys/class/gpio/gpio44/direction ## OFF echo low > /sys/class/gpio/gpio44/direction
I created a tiny shell script to blink the LED …
#!/bin/sh # Blink an LED on breadboard PIN="44" # P8_12 is gpio1 = (32 * 1) + 12 = 44 GPIOPIN="/sys/class/gpio/gpio$PIN" if [ -d "$GPIOPIN" ]; then echo "Blinking LED connected to Pin $PIN ..." else echo $PIN > /sys/class/gpio/export echo "Blinking LED connected to Pin $PIN ..." sleep 1 fi while true; do echo high > $GPIOPIN/direction sleep 2 echo low > $GPIOPIN/direction sleep 2 done
CTRL-C to kill the script.
To remove a GPIO pin from use simply
unexport the pin …
echo 44 > /sys/class/gpio/unexport
- Linux Kernel GPIO Interfaces
- Adafruit’s Blinking an LED with BBB tutorial using Python
- Derek Molloy’s tables for the P8 and P9 header pins