КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Raspberry для мейкеров #2. Азы: Кнопка.

Описание:

В этом уроке мы напишем скрипт Python для Raspberry Pi, который будет управлять проигрывателем YouTube в браузере Chromium при помощи кнопок, подключённых к GPIO. 

Для этого мы воспользуемся редактором Thonny Python IDE, подключим кнопки к выводам основного назначения Raspberry Pi при помощи Trema+Expander Hat. Скрипт будет считывать их состояние и симулировать нажатия на клавиатуре. Казалось бы, зачем это делать, если под рукой есть клавиатура? Предположим, что вы хотите встроить Raspberry в какой-нибудь HDMI монитор или телевизор и вывести на переднюю панель кнопки управления воспроизведения YouTube, при этом клавиатура Вам совсем ненужна.

Нам понадобится:

  • Raspberry Pi
  • Trema+Expander Hat
  • 3x Trema-модуль кнопка
  • SD карта не менее 8 ГБ
  • Периферия (Клавиатура, мышь, дисплей)
  • Блок питания для Raspberry Pi
  • Установить модуль для Python pyautogui

Подключение:

Если Ваша Raspberry не настроена, Вы можете воспользоваться этой инструкцией.

Для удобства подключения мы воспользуемся Trema+Expander Hat.

Установим Trema+Expander Hat на Raspberry Pi (в данном случае это Raspberry Pi 3 model B, но процедура для других Raspberry схожая):

Далее шлейфами ­«мама-мама» подключим три кнопки к выводам 6, 7 и 8 на Trema+Expander Hat:

Thonny Python IDE

Для написания скриптов мы будем использовать всё тот же Thonny Python IDE. Если Вы не знаете что это и как его запустить — обратитесь к уроку №1.

Для работы скрипта необходимо установить модуль Python для работы с графическим пользовательским интерфейсом под названием pyautogui. Сделать это можно прямо в редакторе Thonny. Нажимаем в меню программы Tools -> Manage Packages... Откроется окно установки модулей. В поиске набираем pyautogui и устанавливаем. Ссылка на подробное описание установки модулей. Модуль для Python это как аналог библиотеки для Arduino IDE.

Скрипт:

Вводим следующий скрипт в окно редактора:

import RPi.GPIO as GPIO                 # Подключаем модуль для работы с GPIO
from pyautogui import press, hotkey     # Подключаем методы press и hotkey
                                        #   из модуля pyautogui
from time import sleep                  # Подключаем метод ожидания
                                        #   из модуля времени
                                        #
BACKPIN = 6                             # Назначаем вывод кнопки "назад"
NEXTPIN = 7                             # Назначаем вывод кнопки "вперёд"
PLAYPIN = 8                             # Назначаем вывод кнопки "играть/пауза"
                                        #
GPIO.setmode(GPIO.BCM)                  # Устанавливаем режим нумерации выводов
GPIO.setup(BACKPIN, GPIO.IN)            # Устанавливаем вывод в режим "вход"
GPIO.setup(NEXTPIN, GPIO.IN)            # Устанавливаем вывод в режим "вход"
GPIO.setup(PLAYPIN, GPIO.IN)            # Устанавливаем вывод в режим "вход"
                                        #
try:                                    # Пытаемся выполнить следующий код:
    while True:                         #   Бесконечный цикл:
        if GPIO.input(BACKPIN):         #     Если была нажата кнопка "назад"
            print("назад")              #       Выводим сообщение в stdout
            hotkey('alt', 'left')       #       симулируем нажатие клавиш
        if GPIO.input(NEXTPIN):         #     Если была нажата кнопка "вперёд"
            print("вперёд")             #       выводим сообщение,
            hotkey('shift', 'N')        #       симулируем нажатие клавиш.
        if GPIO.input(PLAYPIN):         #     Если была нажата кнопка "играть"
            print("играть/пауза")       #       выводим сообщение,
            press('k')                  #       симулируем нажатие клавиш.
        sleep(.1)                       #     Ожидаем в основном цикле
                                        #     100 миллисекунд,
                                        #     чтобы не загружать процессор
except:                                 # Если код выполнить не удалось
                                        #   (поднято исключение или
                                        #    другое прерывание выполнения)
    GPIO.cleanup()                      #   Возвращаем выводы в
                                        #   исходное состояние.
    print("Программа завершена, "       #   Выводим сообщение.
          "выводы GPIO возвращены "     #
          "в исходное состояние.")      #

Нажимаем кнопку «Run»: сохраняем скрипт:

После сохранения программа начнёт выполняться. Открываем браузер Chromium (вторая иконка слева сверху), переходим на сайт Youtube.com и открываем любое видео. Например, вот это "Вибромодуль, датчик наклона и вибрации для Arduino/ESP/Piranha/PI". Убеждаемся, что авто воспроизведение включено и проверяем работу кнопок. 

При этом стоит заметить, что возврат выводов в исходное состояние в блоке except будет выполняться только если программа завершила свою работу некорректно или кто-то завершил её, нажав ctrl+c на клавиатуре в окне stdout редактора Thonny. Если нажать красную кнопку STOP редактора, выводы не будут возвращены в исходное состояние, так как кнопка STOP не выполняет прерывание программы, а перезапускает или останавливает весь бэк-енд Python и у скрипта просто не возможности выйти на код выполнения блока except.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями