На примере 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...