На примере Orange Pi PC 2 c ARMBIAN Ubuntu 16.04 покажем как можно легко управлять выводами GPIO. С не большими отступлениями все примеры из этой статьи можно использовать на всех моделях Orange Pi b Raspberry Pi, Raspberry Pi 2, Raspberry Pi 3. О программировании GPIO подробно можно посмотреть в статье Orange PI PC 2 GPIO доступ через sysfs, а здесь – практика и тесты.

Программа для управления GPIO Orange Pi b (Raspberry Pi, Raspberry Pi 2, Raspberry Pi 3) написана на bash:

#!/bin/bash

# gpio0 PA0 pin 13
echo 0 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio0/direction

# gpio1 PA1 pin11
echo 1 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio1/direction

# gpio2 PA2 pin22
echo 2 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio2/direction

# gpio3 PA3 pin15
echo 3 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio3/direction

# gpio6 PA6 pin7
echo 6 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio6/direction

# gpio7 PA7 pin29
echo 7 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio7/direction

# gpio8 PA8 pin31
echo 8 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio8/direction

# gpio9 PA9 pin33
echo 9 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio9/direction

# gpio10 PA10 pin35
echo 10 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio10/direction

# gpio11 PA11 pin5
echo 11 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio11/direction

# gpio12 PA12 pin3
echo 12 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio12/direction

# gpio13 PA13 pin24
echo 13 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio13/direction

# gpio14 PA14 pin23
echo 14 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio14/direction

# gpio15 PA15 pin19
echo 15 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio15/direction

# gpio16 PA16 pin21
echo 16 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio16/direction

# gpio18 PA18 pin28
echo 18 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio18/direction

# gpio19 PA19 pin27
echo 19 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio19/direction

# gpio21 PA21 pin26
echo 21 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio21/direction

# gpio68 PC4 pin16
echo 68 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio68/direction

# gpio69 PC5 pin8
echo 69 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio69/direction

# gpio70 PC6 pin10
echo 70 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio70/direction

# gpio71 PC7 pin18
echo 71 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio71/direction

# gpio107 PD11 pin37
echo 107 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio107/direction

# gpio110 PD14 pin12
echo 110 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio110/direction

# gpio198 PG6 pin38
echo 198 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio198/direction

# gpio199 PG7 pin40
echo 199 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio199/direction

# gpio200 PG8 pin32
echo 200 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio200/direction

# gpio201 PG9 pin36
echo 201 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio201/direction

S=0.2
Y=1

while [ "$Y" != "-1" ]

echo $Y > /sys/class/gpio/gpio0/value
sleep $S
echo $Y > /sys/class/gpio/gpio1/value
sleep $S
echo $Y > /sys/class/gpio/gpio2/value
sleep $S
echo $Y > /sys/class/gpio/gpio3/value
sleep $S
echo $Y > /sys/class/gpio/gpio6/value
sleep $S
echo $Y > /sys/class/gpio/gpio7/value
sleep $S
echo $Y > /sys/class/gpio/gpio8/value
sleep $S
echo $Y > /sys/class/gpio/gpio9/value
sleep $S
echo $Y > /sys/class/gpio/gpio10/value
sleep $S
echo $Y > /sys/class/gpio/gpio11/value
sleep $S
echo $Y > /sys/class/gpio/gpio12/value
sleep $S
echo $Y > /sys/class/gpio/gpio13/value
sleep $S
echo $Y > /sys/class/gpio/gpio14/value
sleep $S
echo $Y > /sys/class/gpio/gpio15/value
sleep $S
echo $Y > /sys/class/gpio/gpio16/value
sleep $S
echo $Y > /sys/class/gpio/gpio18/value
sleep $S
echo $Y > /sys/class/gpio/gpio19/value
sleep $S
echo $Y > /sys/class/gpio/gpio21/value
sleep $S
echo $Y > /sys/class/gpio/gpio68/value
sleep $S
echo $Y > /sys/class/gpio/gpio69/value
sleep $S
echo $Y > /sys/class/gpio/gpio70/value
sleep $S
echo $Y > /sys/class/gpio/gpio71/value
sleep $S
echo $Y > /sys/class/gpio/gpio107/value
sleep $S
echo $Y > /sys/class/gpio/gpio110/value
sleep $S
echo $Y > /sys/class/gpio/gpio198/value
sleep $S
echo $Y > /sys/class/gpio/gpio199/value
sleep $S
echo $Y > /sys/class/gpio/gpio200/value
sleep $S
echo $Y > /sys/class/gpio/gpio201/value
sleep $S

Y=`expr $Y - 1`

  done

Дайте программе права на выполнение и запускайте под root.

В первой части программы вы можете видеть комментарии # gpio0 PA0 pin 13, где pin 13 номер вывода GPIO разъема платы Orange Pi b (Raspberry Pi, Raspberry Pi 2, Raspberry Pi 3). Соберите схему с 28 светодиодами катод каждого из них соедините с резистором на 1 кОм. а все резисторы соедините между собой и подключите к общему проводу на разъеме GPIO вашего микрокомпьютера. Аноды каждого светодиода подключите к ножкам разъема GPIO в том порядке, в котором они перечислены в первой части программы.

GPIO pin 13, 11, 22, 15, 7, 29, 31, 33, 35, 5, 3, 24, 23,19, 21, 28, 27, 26, 16, 8 , 10, 18, 37, 12, 38, 40, 32, 36.

Мы постарались составить максимально простую для понимания программу и описание электронной схемы и все же, сверяйте номера выводов по альбому схем своей платы микрокомпьютера. Только тогда, Вы сможете избежать ошибок подключения и не повредите свою плату. Тем более, если вы используете плату микрокомпьютера отличную от Orange Pi PC 2, например, Orange Pi Zero, Orange Pi One, Orange Pi Lite, Orange Pi PC, Orange Pi PC Plus, Orange Pi Plus 2E, Orange Pi Plus, Orange Pi PC Plus2 или Raspbery Pi Zero, Raspbery Pi 1 Model A+, Raspbery Pi 2 Model B, Raspbery Pi 3 Model B и другие.

По ссылке Вы можете посмотреть видео, на котором мы запускаем эту программу и тестируем переключение состояние pin GPIO платы Orange Pi PC 2. Приятного просмотра.

От этой программы совсем не далеко до практически полезных решений – Умный дом, управление исполнительными устройствами через интернет, управление роботами со смартфона по WiFi...