• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Работа с gpio разъемами в Orange pi

11 февраля, 2023

 

Протестирована работа на:

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 Запрос.

Надеюсь это было Вам полезно. Спасибо за внимание.

Primary Sidebar

Поиск

Новые записи

  • Интеграция ИИ Deepseek в Home Assistant
  • Выводим уведомления из умного дома Home Assistant на Android TV с помощью программы TvOverlay.
  • Автоматизация оповещения о надвигающимся дожде в Home Assistant
  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·