Rock/LED
The Radxa Rock has 3 LEDs on board.
LED | GPIO ref. | GPIO number |
---|---|---|
Green | GPIO0_B4 | 172 |
Blue | GPIO0_B6 | 174 |
Red | GPIO0_B7 | 175 |
All are programmable using either LEDs class devices or GPIOs.
LEDs as class devices
On the latest kernel images (Ubuntu 14.04 server/desktop), the 3 LEDs are configured as LED class devices.
You can control them via /sys/class/leds/
Read the documentation for more information: https://www.kernel.org/doc/Documentation/leds/leds-class.txt
The default status of the three on board leds are:
- Red: On when there is power
- Green: Flash twice per second after the kernel booting, it's called heartbeat.
- Blue: Flash when the uSD card is reading/writing.
You can change the behaviour of each LED by using the echo command on their trigger property.
root@radxa:~ # echo none > /sys/class/leds/red/trigger root@radxa:~ # echo default-on > /sys/class/leds/red/trigger root@radxa:~ # echo timer > /sys/class/leds/red/trigger root@radxa:~ # echo heartbeat > /sys/class/leds/red/trigger
You can use cat on the trigger property to list all the available values.
root@radxa:~ # cat /sys/class/leds/red/trigger none test_ac-online test_battery-charging-or-full test_battery-charging test_battery-full test_battery-charging-blink-full-solid mmc0 mmc1 timer [heartbeat] backlight gpio default-on sleep rfkill0
Here is the list of current triggers:
- none
- test_ac-online
- test_battery-charging-or-full
- test_battery-charging
- test_battery-full
- test_battery-charging-blink-full-solid
- mmc0
- mmc1
- timer
- heartbeat
- backlight
- gpio
- default-on
- sleep
- rfkill0
LEDs as GPIOs
On the previous kernel images, the LEDs can be controlled as GPIOs.
Below is program in different languages to flash the green led on RR.
C
int main()
{
FILE *fp = fopen("/sys/class/gpio/export", "w");
if( !fp )
{
printf("error open export file");
return 1;
}
fprintf(fp, "%d", 172);
fclose(fp);
fp = fopen("/sys/class/gpio/gpio175/direction", "w");
if( !fp )
{
printf("error open export file");
return 1;
}
fprintf(fp, "%s", "out");
fclose(fp);
fp = fopen("/sys/class/gpio/gpio175/value", "w");
if( !fp )
{
printf("error open export file");
return 1;
}
fprintf(fp, "%d", 1);
}
Python
def initpin(pinnum, mode):
'''
pinnum: pin number, eg. 172, 175 etc.
mode: pin mode, valid values: in or out
'''
with open('/sys/class/gpio/export', 'w') as f:
f.write(str(pinnum))
with open('/sys/class/gpio/gpio' + str(pinnum) + '/direction', 'w') as f:
f.write(str(mode))
def setpin(pinnum, value):
with open('/sys/class/gpio/gpio' + str(pinnum) + '/value', 'w') as f:
f.write(str(value))
if __name__ == '__main__':
initpin(172, 'out')
while True:
setpin(172, 0)
time.sleep(1)
setpin(172, 1)
time.sleep(1)
Shell
# enable the gpio 172 -> green led
echo 172 > /sys/class/gpio/export
# set the direction to output
echo "out" > /sys/class/gpio/gpio172/direction
while true;
do
echo 0 > /sys/class/gpio/gpio172/value #led on
sleep 1
echo 1 > /sys/class/gpio/gpio172/value #led off
sleep 1
done