Описание:
В этом уроке мы напишем скрипт 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
Обсуждение