Раскатка новенькой Raspberry Pi Zero W в качестве сервера автобуса
Пока не наступила весна, и не пришли все оставшиеся инструменты – стремительно тороплюсь сделать автоматизацию. 146% интеллектуальной работы. К счастью, белых пятен всё меньше, и всё больше рутины. Этот пост – про создание сервера, “мозга”, на котором будет крутиться вся логика работы компонент. Эта штука здорово облегчит мне переусложнения автоматизации! Не могу дождаться!
- Зачем оно вообще?
- Что докупил в комплект
- Официальные документашки
- Результат
- Следующие шаги
- Проблемки по пути
Зачем оно вообще?
Pi Zero W выбрал в качестве сервера для автоматики автодомика. По крайней мере, в качестве первой версии.
У неё минимальное энергопотребление, не так много вычислительных ресурсов. Безумно маленькая, и относительно дешёвая.
Изначально я купил сенсорный нетбук-трансформер Irbis NB31 за 6к₽.
Но, при установке на него Linux я закирпичил его BIOS – он у них очень нежный, и чуть что перестаёт загружаться. Экран вечно чёрный.
Что докупил в комплект
- microSD карта Kingston – я уже имею одну из этой линейки, только на 128Гб для видеокамеры. Скорость полностью соответствует заявленной, поэтому не стал морочить голову, и тупо взял ту же, но чуть поменьше.
- Дисплей 320х240 с тачскрином. Подключается к “малинке” по последовательному интерфейсу SPI. То есть никакими привычными HDMI/DP/VGA и прочими даже не пахнет. Хардкоооор!!
- Корпус, в который должно быть удобно всё это впихнуть.
- Часики RTC. По-умолчанию у малинки их нет, и при выключении она сразу забывает текущее время. Поскольку мне надо логгировать на ней события, а не только в реальном времени чем-то регулировать – то нужно помнить время во время выключения системы.
- Маленькая литиевая батарейка в качестве своего независимого ИБП. Много от него не требуется – только выдержать несколько минут для обнаружения пропадания электричества на борту, и корректно завершить работу.
- Преобразователь напряжения 18-30V/5V@3A с USB-выходами для питания этой конструкции.
Официальные документашки
- Распиновка тестовых площадок:
- Распиновка колодки:
- Чтение текущей температуры чипа:
> vcgencmd measure_temp
- Все полезности здесь (оф. сайт).
Результат
Для начала прикрутил мониторинг. Очень уже понравилось соотношение $\frac{Результат}{Усилия}$ для связки node-exporter
+ prometheus
+ grafana
.
Шапка панели
Он даже измеряет температуру "из коробки"! НиштяяяК!
Следующие шаги
- Добавить RTC, чтобы часы сохраняли ход на выключенной системе (по-умолчанию у этой минималистичной системы их нет). Коммуникация – по I2C. Предварительное исследование показало, что уже есть готовые решения. Сами часики I2C уже куплены и ждут установки.
- Подключить дисплей с тач-скрином. Он подключается по SPI. Обновление экрана будет медленным, но мне этого достаточно – это embedded hmi, в конце концов.
Проблемки по пути
Выбор образа
Раскатывал образ системы на microSD карточку с помощью фирменной утилиты rpi-imager
. Во многом потому, что она уже была доступна в качестве пакета в Ubuntu 22.04.
Вот только образ она предлагала неподходящий – 64-bit bookworm.
С ней моя зерошка не заработало. Я понижал верию, пока не заработало на Legacy 32-bit Full.
После установки удалил chromium-browser
и firefox-esr
. Притом, последовательно – при удалении хромиума автоматом ставилась замена в виде файерфокса. А после его установки автоматом на его место apt
установил epiphany-browser
. Забавно, что меня совсем не хотят оставлять без возможности погулять по сайтам:)
Setting locale failed
При первых попытках обновить систему с помощью $ sudo apt update && sudo apt upgrade -y
в консоль посыпались ошибки с локалью:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "ru_RU.UTF-8",
LC_MONETARY = "ru_RU.UTF-8",
LC_ADDRESS = "ru_RU.UTF-8",
LC_TELEPHONE = "ru_RU.UTF-8",
LC_NAME = "ru_RU.UTF-8",
LC_MEASUREMENT = "ru_RU.UTF-8",
LC_IDENTIFICATION = "ru_RU.UTF-8",
LC_NUMERIC = "ru_RU.UTF-8",
LC_PAPER = "ru_RU.UTF-8",
LANG = "en_GB.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_GB.UTF-8").
locale: Cannot set LC_ALL to default locale: No such file or directory
Решение
Даже штатная утилита raspi-config
не Шмогла пофиксить эту проблему, когда я пытался через ней установить новую локаль. Поэтому, я копнул дальше.
В файле /etc/default/locale
изначально только такое содержимое:
# File generated by update-locale
LANG=en_US.UTF-8
Расширьте его до следующего:
# File generated by update-locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_ALL=en_US.UTF-8
После этого проблему больше пока не наблюдал.
Grafana в докере нет
Сам docker встал без проблем. Но вот при попытке подтянуть образ grafana вернулась следующая ошибка:
docker: no matching manifest for linux/arm/v6 in the manifest list entries.
По решению на форуме стягиваем компилированную под raspberry-arm версию.
wget https://dl.grafana.com/oss/release/grafana-rpi_9.4.7_armhf.deb
sudo dpkg -i grafana-rpi_9.4.7_armhf.deb
На официальном сайте опубликовали специальную инструкцию для малиноводов. Но там приколы с подписью репы.
Суть их подхода: добавить репу, установить ARM-компилированную версию прямо на хост, мимо докера.
Поэтому, просто стянул бинарь, и установил с помощью dpkg
.