OLED-дисплей для MMDVM-хотспота: подключение и что он показывает

Категория: ХотспотыСложность: ★★☆~8 минут

Крошечный экранчик 0.96″ превращает хотспот из «коробочки с лампочками» в наглядный прибор: видно режим, кого слышно прямо сейчас, частоту и IP-адрес — не нужно лезть в веб-кабинет, чтобы понять, что узел жив и работает. Стоит он копейки, подключается четырьмя проводами, но на этих четырёх проводах люди застревают чаще всего. Разберём по-честному: что паять, что писать в конфиге, что экран реально выводит и где грабли.

Какой дисплей брать

Стандарт для хотспотов — монохромный OLED 128×64 на контроллере SSD1306 с интерфейсом I2C (четыре пина: VCC, GND, SCL, SDA). Самый ходовой размер — 0.96″; бывает и 1.3″ — он крупнее и читается с другого конца стола.

Двухцветные панелиЧасто продают OLED, где верхние ~16 пикселей жёлтые, а остальное синее. Физически это один монохромный кристалл с цветным светофильтром. Работать будет, но шапка статуса окрасится в жёлтый «полосой» — это не брак, просто учитывайте при покупке.

Подключение по I2C: четыре провода

I2C хорош тем, что линий всего две — данные SDA и тактовая SCL, плюс питание и земля. На гребёнке Raspberry Pi это соседние пины в начале ряда:

Пин дисплеяПин Raspberry Pi (физ. номер)
VCCPin 1 — 3.3 V
SDAPin 3 — GPIO2 / SDA1
SCLPin 5 — GPIO3 / SCL1
GNDPin 6 — GND
Питание — только 3.3 В, не 5 ВМодуль SSD1306 запитываем от Pin 1 (3.3 V). Линии I2C на Pi тоже логически 3.3-вольтовые. Подача 5 V на VCC некоторых дешёвых модулей «дотягивается» до шины I2C и может повредить как дисплей, так и порт самого Pi. Если на плате нет встроенного стабилизатора (а его часто нет) — 5 V убивает кристалл. Сомневаетесь — берите 3.3 V.

Маленькая тонкость: на части модулей пины подписаны в порядке GND VCC SCL SDA, на части — VCC GND SDA SCL. Не паяйте «по позиции» — паяйте по подписям. Перепутанные местами GND и VCC — частая причина мёртвого экрана.

Пайка и ESDOLED-кристалл и контроллер чувствительны к статике и перегреву. Паяйте быстро (жало 300–320 °C), не держите контакт по 5 секунд, по возможности заземлите себя (браслет/касание корпуса). Если дисплей пришёл без распаянной гребёнки — припаивайте ровно, «соплёй» между SDA/SCL легко устроить замыкание шины.

Проверяем, что 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 -- -- --

Включаем дисплей в конфиге

Хотспот рисует на экране силами 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Что это
3I2C 128×64 — обычный 0.96″ SSD1306 (выбор по умолчанию для хотспота)
6Панель на контроллере SH1106 (часто это «кривые» 1.3″)
2I2C 128×32 — узкий «полосатый» дисплей (другая высота)
0–1SPI-варианты на 6 пинов (другая распайка, для хотспота не используются)

Полный список значений Type (0–6, включая SPI-варианты Adafruit и панели Seeed) есть в документации MMDVMHost, но для подавляющего большинства I2C-хотспотов нужны только 3 и 6.

В образе RadioStar прощеВ нашем образе OLED уже поддержан: достаточно включить дисплей в кабинете, а тип и адрес подхватываются автоматически. Лезть в MMDVM.ini по SSH не нужно — см. чем образ отличается от Pi-Star.

Что экран реально показывает

В простое (никто не передаёт) дисплей рисует заставку статуса: позывной/имя узла, режим (DMR), иногда иконку антенны и состояние сети. Как только кто-то выходит в эфир — экран переключается на «живой» вид:

То есть OLED — это, по сути, локальный «монитор эфира»: глянул на экран и видишь, кто на связи и как принимается, без захода в браузер.

Дисплей дисплеем, а эфир по законуЭкранчик ничего не меняет в радиочасти: хотспот — это передатчик. Выходить в эфир (TX) можно только при наличии любительской лицензии и позывного и строго в отведённых диапазонах — см. где разрешено работать. OLED лишь показывает то, что уже происходит в радиоканале.

Частые проблемы и как лечить

  1. Экран чёрный, ничего нет. Сначала i2cdetect. Нет адреса — пайка/питание/выключен I2C. Адрес есть, но пусто — почти всегда не включён Display=OLED в конфиге.
  2. Картинка сдвинута на 2 пикселя влево / по краю «мусор». Это фирменный симптом: у вас SH1106, а драйвер настроен на SSD1306. У SH1106 внутри 132 столбца ОЗУ при 128 видимых, нужен сдвиг на 2 — поставьте Type=6 (или SH1106-режим в прошивке).
  3. Изображение перевёрнуто (узел поставили «вверх ногами»). Лечится поворотом: Rotate=1 в секции [OLED] либо опцией поворота в кабинете.
  4. Конфликт I2C. Если на шину висит что-то ещё с адресом 0x3C — будет каша. На хотспоте обычно один дисплей, так что просто не вешайте второе устройство на тот же адрес.
  5. Дисплей не припаян / «холодная» пайка. Прозвоните контакты, пошевелите — мерцание и пропадания почти всегда механика, а не софт.
Альтернатива — NextionЕсли хочется цветной графический экран побольше — есть дисплеи Nextion (подключаются по UART, со своими «прошивками» компоновки). Они нагляднее и красивее, но дороже, занимают последовательный порт и требуют отдельной заливки макета. Для домашнего узла честный 0.96″ OLED закрывает 95% потребностей.

Хотспот с экранчиком — в сеть DMRhub

Собрали узел и хотите видеть на дисплее живой эфир сети? Соберите образ под свою плату в мастере — узел сам пропишется на портал, а OLED включается одной галочкой в кабинете.

Источники

  1. F5UII — установка OLED SSD1306 на MMDVM/MMDVMHost: f5uii.net
  2. HamOperator — «MMDVM .96″ OLED Now Works» (Type 3/6, SSD1306 vs SH1106): wp.hamoperator.com
  3. Adafruit — распайка SSD1306 OLED по I2C на Raspberry Pi: learn.adafruit.com
  4. Universal-Solder — «случайные пиксели»: SSD1306 vs SH1106: universal-solder.ca