- PVSM.RU - https://www.pvsm.ru -
-Как начать работу с Raspberry Pi?
-Залить на SD-карту образ, подключить к питанию и пойти в магазин докупить всё, чего не хватает.
Raspberry Pi в стандартной поставке — не подарок. По крайней мере, если вы собрались подарить Pi кому-то на этот Новый Год, удостоверьтесь, что счастливому получателю будет доступен комплект клавиатура-монитор-мышь, или хотя бы USB-UART адаптер.
Что же делать, если хочется заняться своим проектом, но есть только плата и к ней проблематично подключить хоть что-либо? Я мучался с такого рода проблемами 3 года, пока не разработал pyLCI. О том, как начать использовать pyLCI и что оно даёт, я и расскажу сегодня.
Начнём с подключения к Pi. Есть много способов, и у каждого свои недостатки.
USB-UART
Требует наличия USB-UART (ещё и на 3.3V)
Требует компьютера с совместимыми драйверами (FTDI, я смотрю на вас)
Монитор(composite/HDMI)+мышь+клавиатура
Требует наличия всего этого добра (монитор ещё и с HDMI), да ещё и питания 220
Компактные варианты либо дороги, либо неудобны
Часто избыточно - подключать кучу всего, чтобы узнать IP?
Монитор должен быть подключен при старте
Ethernet
Требует роутер или DHCP-сервер на компе или Pi
Нужно искать IP, что не всегда легко (они ещё и меняются!)
Нужно Ethernet-подключение к сети ()
WiFi и wpa_supplicant.conf на boot разделе
Плохо документирован
Нужно искать IP (опять!)
Трудно дебажить (ой, WiFi переопределился как wlan2 и не подрубается...)
Как сделать интерфейс для своего умного дома/медиацентра/робота?
GUI
Требуется монитор или VNC
Для VNC требуется отдельный компьютер
Для совсем урезанного GUI нужно ещё и добавлять стандартные функции (Shutdown/Reboot/WiFi/IP/shell commands)
SSH+CLI
Требуется отдельный компьютер
Требуется сетевое подключение
Хорошее знание команд крайне желательно
WEB
Требуется отдельное устройство и сетевой доступ к нему
Нужно добавлять стандартные функции либо дополнительно устанавливать Webmin/Ajenti/whatever
За три года, что я работаю с Raspberry Pi, я обучился Linux, программированию на Python и использованию всего этого для создания различных интересных устройств. Всё это время я натыкался на одни и те же проблемы, корень которых в том, что у Raspberry Pi нету простых встроенных методов взаимодействия с ОС — к примеру, встроенных монитора/клавиатуры. В результате подключить к WiFi какой-нибудь ноутбук с Linux просто, а для Raspberry Pi нужно использовать дополнительное железо, копаться с командами или таскать мониторы. Этого, как по мне, пока не избежать, но можно решить минимальным количеством усилий.
Чем больше я разрабатывал различных проектов, тем больше различных решений пробовал. За это время я использовал:
Всё не то. Получающиеся решения в какой-то момент ясно показывали свои ограничения, да и со всем тем железом, что я использовал, можно было достичь куда большего. Во что в итоге сформировались мои требования?
В итоге — в прошлом (2015) году я начал проект, использующий дешёвые дисплеи и кнопки и дающий мне возможность задействовать базовые функции Raspberry Pi. Казалось бы, идея очень простая — такие интерфейсы были довольно долгое время популярны в различных устройствах — но при поиске готовых решений под Linux был виден только LCDProc, который больше всё-таки status monitor. Большая часть людей, которые хотели использовать такой интерфейс, колхозили что-то на Питоне с готовыми либами для дисплеев и как-то работающим кодом навигации, порой даже не вынесенным в классы для повторного ипользования.
В апреле этого года, кучу проектов и множество ошибок спустя, я допилил проект до версии 1.0, назвал pyLCI и выложил на ГТ [1] на всеобщее обозрение. С того момента многое изменилось — pyLCI использовался в каждом моём Raspberry Pi-проекте, добавлялись фичи, пропадали баги, а изредка я получал письма с вопросами о каких-то нюансах pyLCI. Теперь моя цель — рассказать об этом проекте всем, кому он может оказаться полезен.
pyLCI — это простой интерфейс для настройки и управления функциями Raspberry Pi, использующий 2x16 экраны, кнопки и Python. Он простой, дешёвый и удобный в использовании.
Установить pyLCI легко — ставишь shield за 5$ на Pi, скачиваешь pyLCI на Pi и ставишь в автозагрузку прилагающимся скриптом.
Под спойлерами — красивые гифки pyLCI в работе.
Простой ответ — берите такой шилд с Китая:
Стоит около 5 долларов, а работает безотказно.
Тогда можно взять шилд от Adafruit:
Дороже, но качественнее выполнен и ждать доставки не придётся (шилд из Китая — почти полная копия этого).
Нужен простой дисплей, совместимый с командами HD44780, минимальный размер — 16x2, поддерживаются дисплеи разных размеров. Вот такого типа:
Дисплей можно подключить через GPIO (займёт 6 контактов на Raspberry Pi) или I2C. Такие дисплеи часто попадаются во всяких Starter Kits, доступны в каждом мало-мальски себя уважающем магазине/рынке электроники и стоят 2$ с бесплатной доставкой из Китая.
Нужно как минимум 5 кнопок. Их можно подключать через GPIO, I2C-GPIO экспандеры или же использовать USB HID устройства — типа таких numpad-ов:
pyLCI — это UI-фреймворк, который предоставляет различные UI-элементы для ускорения разработки и даже позволяет полностью встроить своё приложение в pyLCI. Для сложных приложений, которые нужно запускать отдельно, есть отработанный подход — внедрить в него какой-либо RPC-интерфейс и написать pyLCI-приложение, предоставляющее UI и дёргающее RPC-функции.
menu_name = "Hello world"
from ui import Printer
#Callback global for pyLCI
callback = None
#Some globals for us
i = None
o = None
def init_app(input, output):
global callback, i, o
i = input; o = output
callback = lambda: Printer("Hello world!", i, o)
Что для чего:
menu_name
— Название приложения в главном менюi
— устройство ввода [2], ловит нажатия кнопок и вызывает заданные на них callbacks.o
— устройство вывода [3], оперирует дисплеем. Printer
— функция простого вывода данных на дисплей [4]. Использует i и o, имеет разные полезные параметры и способы вызова.init_app
— функция приложения, вызываемая при старте pyLCI. Передаёт приложению i и o, в ней обычно создаются главные UI-элементы приложения.callback
— функция, вызываемая при активации приложения. Обычно активирует главное меню приложения, в нашем случае просто вызывает Printer с нашим сообщением.Документация на различные доступные UI элементы есть на ReadTheDocs [5], к тому же много примеров использования можно увидеть в уже написанных приложениях [6].
В последнее время я часто добавляю различные возможности и чиню баги. Документ с планами на будущее доступен здесь [7], но если вам сильно не хватает какой-либо функции или приложения, пишите мне на почту (crimier yandex ru) или в issues на Гитхабе [8], смогу помочь.
Разработка проекта телефона на Pi Zero, используя pyLCI для изменения настроек системы без подключения по SSH
Автор: CRImier
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ux/226149
Ссылки в тексте:
[1] выложил на ГТ: https://geektimes.ru/post/273794/
[2] устройство ввода: http://pylci.readthedocs.io/en/latest/input.html#inputlistener
[3] устройство вывода: http://pylci.readthedocs.io/en/latest/output.html#screen-object
[4] функция простого вывода данных на дисплей: http://pylci.readthedocs.io/en/latest/ui/printer.html
[5] есть на ReadTheDocs: http://pylci.readthedocs.io/en/latest/ui.html
[6] уже написанных приложениях: https://github.com/CRImier/pyLCI/blob/master/apps
[7] доступен здесь: http://pylci.readthedocs.io/en/latest/plans.html
[8] в issues на Гитхабе: https://github.com/CRImier/pyLCI/issues
[9] Проект на Hackaday.io: https://hackaday.io/project/10001-pylci-linux-control-interface
[10] Документация: http://pylci.rtfd.org
[11] Github: https://github.com/CRImier/pyLCI
[12] Источник: https://geektimes.ru/post/284012/
Нажмите здесь для печати.