OLED-дисплей для MMDVM-хотспота: подключение и что он показывает
Крошечный экранчик 0.96″ превращает хотспот из «коробочки с лампочками» в наглядный прибор: видно режим, кого слышно прямо сейчас, частоту и IP-адрес — не нужно лезть в веб-кабинет, чтобы понять, что узел жив и работает. Стоит он копейки, подключается четырьмя проводами, но на этих четырёх проводах люди застревают чаще всего. Разберём по-честному: что паять, что писать в конфиге, что экран реально выводит и где грабли.
Какой дисплей брать
Стандарт для хотспотов — монохромный OLED 128×64 на контроллере SSD1306 с интерфейсом I2C (четыре пина: VCC, GND, SCL, SDA). Самый ходовой размер — 0.96″; бывает и 1.3″ — он крупнее и читается с другого конца стола.
- 0.96″ SSD1306, I2C — золотая середина: дёшево, поддерживается «из коробки».
- 1.3″ — крупнее, но тут засада: многие 1.3″ панели стоят не на SSD1306, а на близком, но другом контроллере SH1106. Об этом ниже — это причина №1 «кривого» экрана.
- SPI-версия (6–7 пинов) — тоже бывает, но для хотспота берите именно I2C: меньше проводов и проще.
Подключение по I2C: четыре провода
I2C хорош тем, что линий всего две — данные SDA и тактовая SCL, плюс питание и земля. На гребёнке Raspberry Pi это соседние пины в начале ряда:
| Пин дисплея | Пин Raspberry Pi (физ. номер) |
|---|---|
| VCC | Pin 1 — 3.3 V |
| SDA | Pin 3 — GPIO2 / SDA1 |
| SCL | Pin 5 — GPIO3 / SCL1 |
| GND | Pin 6 — GND |
Маленькая тонкость: на части модулей пины подписаны в порядке GND VCC SCL SDA, на части — VCC GND SDA SCL. Не паяйте «по позиции» — паяйте по подписям. Перепутанные местами GND и VCC — частая причина мёртвого экрана.
Проверяем, что Pi видит дисплей
Прежде чем лезть в конфиг хотспота, убедитесь, что плата вообще «видна» на шине. Включите I2C (в Pi-Star/чистой Raspberry Pi OS — через raspi-config → Interface → I2C → Enable), затем:
sudo i2cdetect -y 1
В таблице должна появиться ячейка 3c (реже 3d) — это и есть адрес дисплея, обычно 0x3C:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
...
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
- Пусто, ничего не видно — проверьте пайку SDA/SCL, питание и что I2C вообще включён.
- Виден 3d вместо 3c — на модуле перемычкой/резистором задан другой адрес. Запомните его, пригодится для драйвера.
Включаем дисплей в конфиге
Хотспот рисует на экране силами MMDVMHost (это движок под капотом любой прошивки). В классическом Pi-Star дисплей включается в один клик: Configuration → MMDVM Display Type → OLED → Apply Changes. «Под капотом» это правит файл MMDVM.ini:
[General]
Display=OLED
[OLED]
Type=3
Brightness=0
Invert=0
Rotate=0
Ключевой параметр — Type. Он задаёт модель панели:
| Type | Что это |
|---|---|
| 3 | I2C 128×64 — обычный 0.96″ SSD1306 (выбор по умолчанию для хотспота) |
| 6 | Панель на контроллере SH1106 (часто это «кривые» 1.3″) |
| 2 | I2C 128×32 — узкий «полосатый» дисплей (другая высота) |
| 0–1 | SPI-варианты на 6 пинов (другая распайка, для хотспота не используются) |
Полный список значений Type (0–6, включая SPI-варианты Adafruit и панели Seeed) есть в документации MMDVMHost, но для подавляющего большинства I2C-хотспотов нужны только 3 и 6.
Что экран реально показывает
В простое (никто не передаёт) дисплей рисует заставку статуса: позывной/имя узла, режим (DMR), иногда иконку антенны и состояние сети. Как только кто-то выходит в эфир — экран переключается на «живой» вид:
- Last heard — позывной и DMR ID того, кого хотспот слышит прямо сейчас (а после — кто говорил последним).
- Talkgroup / слот — на какую группу идёт трафик, TS1 или TS2.
- Режим — DMR (на мультимоде также может всплывать YSF/D-STAR и т.п.).
- IP-адрес хотспота в локальной сети — удобно, чтобы зайти в кабинет, не сканируя сеть.
- BER (Bit Error Rate, %) во время приёма — индикатор качества сигнала и того, не уплыла ли частота. Подробнее в статье про калибровку.
- Иногда — температура CPU и время работы, если включено в прошивке.
То есть OLED — это, по сути, локальный «монитор эфира»: глянул на экран и видишь, кто на связи и как принимается, без захода в браузер.
Частые проблемы и как лечить
- Экран чёрный, ничего нет. Сначала i2cdetect. Нет адреса — пайка/питание/выключен I2C. Адрес есть, но пусто — почти всегда не включён Display=OLED в конфиге.
- Картинка сдвинута на 2 пикселя влево / по краю «мусор». Это фирменный симптом: у вас SH1106, а драйвер настроен на SSD1306. У SH1106 внутри 132 столбца ОЗУ при 128 видимых, нужен сдвиг на 2 — поставьте Type=6 (или SH1106-режим в прошивке).
- Изображение перевёрнуто (узел поставили «вверх ногами»). Лечится поворотом: Rotate=1 в секции [OLED] либо опцией поворота в кабинете.
- Конфликт I2C. Если на шину висит что-то ещё с адресом 0x3C — будет каша. На хотспоте обычно один дисплей, так что просто не вешайте второе устройство на тот же адрес.
- Дисплей не припаян / «холодная» пайка. Прозвоните контакты, пошевелите — мерцание и пропадания почти всегда механика, а не софт.
Хотспот с экранчиком — в сеть DMRhub
Собрали узел и хотите видеть на дисплее живой эфир сети? Соберите образ под свою плату в мастере — узел сам пропишется на портал, а OLED включается одной галочкой в кабинете.
Источники
- F5UII — установка OLED SSD1306 на MMDVM/MMDVMHost: f5uii.net
- HamOperator — «MMDVM .96″ OLED Now Works» (Type 3/6, SSD1306 vs SH1106): wp.hamoperator.com
- Adafruit — распайка SSD1306 OLED по I2C на Raspberry Pi: learn.adafruit.com
- Universal-Solder — «случайные пиксели»: SSD1306 vs SH1106: universal-solder.ca