Описание:
В этом уроке мы напишем скрипт 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.
Ссылки:
- Raspberry: установка и настройка
- Raspberry: настройка удалённой работы
- Wiki: Trema-модуль кнопка
- Trema+Expander Hat
- Raspberry Pi

Обсуждение