Протестирована работа на:
Orange pi 5: https://alii.pub/6lwkwu
Orange pi 4 lts: https://alii.pub/6lwkvo
Orange pi zero 2: https://alii.pub/68uelr
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Когда Вы приобретаете одноплатный компьютер, то вероятнее всего Вы подразумеваете его использование только как какой-нибудь сервер. Но еще как контроллер управления чем либо, ведь на таких мини ПК есть gpio разъемы.
Работа с gpio у плат orange pi отличается от raspberry pi. Один и тот-же метод не сработает.
Для управления gpio разъемами в Orangepi служит wiringOP.
Он изначально не установлен на операционных системах под Orange pi. ЧТоб его установить, нужно выполнить следующее:
зайти в привилегированный режим:
sudo -i
Обновить репозитории:
apt-get update
Установи программу git:
apt-get install -y git
С клонировать репозиторий с wiringOP от разработчиков Orange pi из github.
git clone https://github.com/orangepi-xunlong/wiringOP.git
После этого у Вас появится папка wiringOP – в той директории где вы выполняли команду git.
Переходим в эту директорию:
cd wiringOP
Далее собираем программу wirinOP из скаченных исходников.
sudo ./build clean
sudo ./build
После этого можем ввести команду:
gpio readall
И у нас появится распиновка всех контактов:
Собственно по этим пинам можно понять какой пин какую функцию может выполнять. Так-же тут видно какие номера пинов по порядку, какие им присвоены имена как gpio. И какие у них пины согласно распиновки wpi – WiringOP – эта распиновка нужна если Вы будете программировать на питоне и использовать для нее библиотеку wiringop.
Так-же тут еще видно в каком режиме пины. В IN или OUT. Собственно IN это мод на прием, а OUT на отдачу.
Как этим делом управлять?
Например давайте переведем пит 2 wPi в мод OUT и логический ноль. Для этого служит команда:
gpio mode 2 out
gpio write 2 0
Если хотим подать 1 на выход, то команда будет:
gpio write 2 0
Собственно тут уже можно таким образом управлять реле с логикой 3.3v. Подавая 1 на выход, реле будет включаться подключенное к этому пину.
Так-же есть команда для чтения логической 0 или 1 на входе. Эту нужно например для отслеживания состояния кнопки. Или например состояния датчика движения.
Команда будет такая для пина 2 в wPi:
gpio read 2
Теперь давайте рассмотрим использование wiringOP в Python
Обновляем пакеты
sudo apt-get update
Устанавливаем пакеты для скачивания репозитория и работы python
sudo apt-get -y install git swig python3-dev python3-setuptools
Стягиваем с репозитория wiringOP-Python и устанавливаем его:
git clone –recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next
Переходим в скаченную папку:
cd wiringOP-Python
Далее компилируем и устанавливаем то что скачали:
python3 generate-bindings.py > bindings.i
sudo python3 setup.py install
Все, установка закончена. Для проверки, правильно ли мы установили wiringop-python, можно ввести команду:
python3 -c “import wiringpi; help(wiringpi)”
И если она выводит справочную информацию, значит все ОК.
Можем проверить работу с gpio. Например тот-же порт 2 в wPi переведем в режим OUPUT. В Python это нужно сделать так:
python3 -c “import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \
wiringpi.pinMode(2, GPIO.OUTPUT) ; “
Ну а например, чтоб на пин 2 подать логическую единицу, то используем команду:
python3 -c “import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.HIGH)”
Так-же в этой папке есть папка examples и там есть несколько примеров для работы с gpio. Например Blink.
Он выглядит так:
import wiringpi
import time
import sys
from wiringpi import GPIO
NUM = 17 #26pin
#NUM = 18 #26pin
#NUM = 20 #for Orange Pi Zero 2
#NUM = 19 #for Orange Pi 4
#NUM = 28 #40pin
wiringpi.wiringPiSetup()
for i in range(0, NUM):
wiringpi.pinMode(i, GPIO.OUTPUT) ;
while True:
try:
for i in range(0, NUM):
wiringpi.digitalWrite(i, GPIO.HIGH)
time.sleep(1)
for i in range(0, NUM):
wiringpi.digitalWrite(i, GPIO.LOW)
time.sleep(1)
except KeyboardInterrupt:
print("\nexit")
sys.exit(0)
Где NUM – это номер пина который будет в состоянии HIGH(логической 1) или LOW(логической 0).
На этом можно было бы закончить, но скажу еще пару слов.
Этой статьи бы небыло, так как я в python не силен, я использую для работы с gpio другие платы, такие как esp32 и arduino. Но по работе мне пришлось повозиться с orange pi платой и с ее gpio.
Мне надо было сделать так, чтоб при нажатии на кнопку, срабатывал скрипт .sh в линуксе.
Я взял за основу Blink и немного переделал. Вот что у меня получилось:
PYTHON ПРОГРАММА(СКРИПТ) ДЛЯ ЗАПУСКА SHELL СКРИПТА .sh ПРИ НАЖАТИИ НА КНОПКУ ПОДКЛЮЧЕННУЮ К GPIO ORANGE PI.
import wiringpi
import time
import os
import sys
from wiringpi import GPIO
#NUM = 17 #26pin
#NUM = 18 #26pin
#NUM = 20 #for Orange Pi Zero 2
NUM = 10 #for Orange Pi 4
#NUM = 28 #40pin
wiringpi.wiringPiSetup()
wiringpi.pinMode(NUM, GPIO.INPUT) ;
while True:
try:
if wiringpi.digitalRead(NUM):
# wiringpi.digitalWrite(5, GPIO.LOW)
os.system("/home/orangepi/scripts/get_dial.sh")
time.sleep(0.5)
else:
# os.system("/home/orangepi/scripts/get_dial.sh")
# wiringpi.digitalWrite(5, GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
print("\nexit")
sys.exit(0)
Собственно при нажатии кнопки запускается скрипт /root/test.sh
В котором может быть что угодно собственно. У меня там get Запрос.
Надеюсь это было Вам полезно. Спасибо за внимание.