Собираю PipBoy на Raspberry Pi

Pip Boy на Raspberry Pi – часть 2. Переключатели и wi-fi адаптер

от автора

в

Перед тем как окончательно тестировать ПО PipBoy, нужно разобраться с подключением всех аппаратных штук. Хочется все собрать/спаять и заняться уже только доработкой ПО. Просмотрев код от Adafruit стало понятно, что программа почти не имеет функций и gpio почти все закомментированы. Например, энкодер совсем никуда не подключен в оригинальном руководстве:

You’ll notice at this point our rotary encoder actually isn’t wired to anything. That’s because we haven’t written any custom code to make it work with the pypboy software. This is more of a prop but it can totally be implemented in the future. If you’re a programmer and know how to do this, we’d love to hear about it!

В любом случае я решил подключить многопозиционный переключатель и энкодер, этого должно хватить для базовых функций в будущем. Начнем с переключателя. У себя в Ростове-на-Дону, в наличии, нашёл только 6-позиционный в Чип и Дип, что в целом подходит, просто один контакт не буду задействовать.

Если в случае микроконтроллера еще можно понадеяться на pull-up встроенные резисторы, тут как мне показалось надежнее распаять подтягивающие аппаратным способом. Схем как правильно подключить кнопку ко входу Raspberry PI много, я придерживаюсь такой (300 Ом можно исключить, если лень паять лишний резистор и вы уверены что все сконфигурировано правильно в ПО). Пример с подключением кнопки в 18 контакту GPIO

Как подключить кнопку к raspberry pi

Резисторы 10кОм распаял прямо около переключателя, а 300 Ом в разрыв провода прямо на GPIO одноплатника.

многопозиционный переключатель пип бой

Экран отдельно распаять не получилось, в корпусе мало высоты, а выпаивать родную гребенку с феном то-еще развлечение. Модных переходников, как в инструкции adafruit у нас тоже не продается. Поэтому не придумал ничего лучше, как припаяться в самое начало гребенки GPIO самого одноплатника Raspberry PI. Экран спокойно подключается сверху и все работает.

raspberry pi pipboy fallout

Для проверки кнопок, подключенных к Raspberry я использую родную утилиту raspi-gpio. Например, мы спаяли 5 контактов переключателя и нужно их проверить – вводим raspi-gpio get <номера GPIO через запятую (или один)>. Меняя положение переключателя, и запрашивая команду заново можно видеть изменения. Через эту же программу можно поменять конфигурацию пинов, но лучше пусть это делает питон-скрипт на старте. Например изначально я не заметил, что 17 пин используется экраном 3.5 TFT для прерываний (тачскрина?) и кнопка на нем не работала. Пришлось перепаять на 18 пин.

raspi-gpio для проверки контактов raspberry pi

По такой же схеме я распаял инкрементальный энкодер. Временно подключил A и B энкодера на 14 и 15 пин Raspberry PI, ведь UART я не использую.

инкрементальный энкодер подключение

Следующим шагом я уже хотел все упаковать, но смущало что в 1 raspberry нет wi-fi. Заказав китайский самый простой адаптер wi-fi на озон за 350р меня ждало разочарование. Как я не собирал разные драйвера, не смог заставить его работать. Оказалось такие проблемы есть и существует список “одобренных” адаптеров для raspbian. Один из таких (TP-Link wn727n) у меня был давно куплен для настольного ПК, но после переезда у меня был выведен ethernet под стол, так-что я пустил его под нож. Проверяем, что все работает

raspberry и tl-wn727n

И да, все работает. Интерфейс wlan0 сразу появился, и я принялся за настройку. Если Raspberry Pi видит ваш wifi usb-адаптер, то настроить wi-fi очень просто. Заранее в файле /etc/wpa_supplicant/wpa_supplicant.conf прописал параметры своей сети.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="имя сети"
        psk="пароль сети"
        key_mgmt=WPA-PSK
}

Далее в /etc/network/interfaces добавил беспроводной интерфейс.

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Ну и прописал статику для проводного и wlan интерфейса в /etc/dhcpcd.conf. Раскомментировал готовые строчки для eth0 и добавил для wlan0.

# Example static IP configuration:
interface eth0
static ip_address=192.168.1.30/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8

interface wlan0
static ip_address=192.168.1.31/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8

Сделал reboot и проверил что все успешно соединяется. Теперь надо разместить адаптер внутри, а места в коробочке все меньше). Разбираю адаптер и распаиваю напрямую. Включаю – не работает. Потратил почти час на прозвонку, даже подумать не мог что 10см провода не витой пары могу сыграть роль. Только заплел МГТФ на глаз в витую пару (на data + и data -), запустил – все работает!

тест usb wifi адаптера к raspberry pi

Предварительно все упаковав, еще раз проверяю все переключатели и ssh через wi-fi.

сборка pip boy своими руками

Больше паять особо не придется, поэтому в следующий раз финализирую внешний вид. Нужно выровнять краску ржавчины, надежно все собрать и взяться наконец-таки за ПО.

загрузка pip boy

Думаю оставить пару дефолтных экранов из этой версии и дописать часы и погоду. Получится классный элемент интерьера!

pip boy raspberry pi