OLED display for an MMDVM hotspot: wiring and what it shows

Category: HotspotsDifficulty: ★★☆~8 minutes

A tiny 0.96″ screen turns a hotspot from a "box with blinking LEDs" into a real instrument: you can see the mode, who is being heard right now, the frequency and the IP address — no need to dig into the web dashboard to confirm the node is alive and working. It costs next to nothing and connects with four wires, but those four wires are exactly where people get stuck most often. Let's go through it honestly: what to solder, what to put in the config, what the screen actually shows and where the gotchas are.

Which display to get

The standard for hotspots is a monochrome OLED 128×64 on an SSD1306 controller with an I2C interface (four pins: VCC, GND, SCL, SDA). The most common size is 0.96″; there is also 1.3″, which is larger and readable from across the room.

Two-color panelsOLEDs are often sold where the top ~16 pixels are yellow and the rest is blue. Physically this is a single monochrome die with a colored filter. It will work, but the status header will be tinted yellow in a "stripe" — that's not a defect, just keep it in mind when buying.

I2C wiring: four wires

I2C is nice because there are only two lines — data SDA and clock SCL — plus power and ground. On the Raspberry Pi header these are adjacent pins at the start of the row:

Display pinRaspberry Pi pin (physical number)
VCCPin 1 — 3.3 V
SDAPin 3 — GPIO2 / SDA1
SCLPin 5 — GPIO3 / SCL1
GNDPin 6 — GND
Power — 3.3 V only, not 5 VPower the SSD1306 module from Pin 1 (3.3 V). The Pi's I2C lines are also logically 3.3 V. Feeding 5 V into the VCC of some cheap modules can "leak" onto the I2C bus and damage both the display and the Pi's own port. If the board has no built-in regulator (and often it doesn't), 5 V kills the die. When in doubt — use 3.3 V.

A small subtlety: on some modules the pins are labeled in the order GND VCC SCL SDA, on others VCC GND SDA SCL. Don't solder "by position" — solder by the labels. Swapped GND and VCC are a common cause of a dead screen.

Soldering and ESDThe OLED die and controller are sensitive to static and overheating. Solder quickly (tip at 300–320 °C), don't hold the contact for 5 seconds, and ground yourself if possible (wrist strap / touch the chassis). If the display arrives without the header soldered on, attach it cleanly — a "blob" between SDA/SCL can easily short the bus.

Check that the Pi sees the display

Before touching the hotspot config, make sure the board is even "visible" on the bus. Enable I2C (in Pi-Star / plain Raspberry Pi OS — via raspi-config → Interface → I2C → Enable), then:

sudo i2cdetect -y 1

The table should show a cell at 3c (more rarely 3d) — that's the display's address, usually 0x3C:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
...
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --

Enable the display in the config

The hotspot draws to the screen via MMDVMHost (the engine under the hood of any firmware). In classic Pi-Star the display is enabled in one click: Configuration → MMDVM Display Type → OLED → Apply Changes. "Under the hood" this edits the MMDVM.ini file:

[General]
Display=OLED

[OLED]
Type=3
Brightness=0
Invert=0
Rotate=0

The key parameter is Type. It sets the panel model:

TypeWhat it is
3I2C 128×64 — the regular 0.96″ SSD1306 (the default choice for a hotspot)
6Panel on an SH1106 controller (often the "wonky" 1.3″ ones)
2I2C 128×32 — narrow "stripe" display (different height)
0–1SPI variants on 6 pins (different pinout, not used for a hotspot)

The full list of Type values (0–6, including the Adafruit SPI variants and Seeed panels) is in the MMDVMHost documentation, but for the vast majority of I2C hotspots you only need 3 and 6.

Simpler with the RadioStar imageIn our image the OLED is already supported: just enable the display in the dashboard, and the type and address are picked up automatically. No need to SSH into MMDVM.ini — see how the image differs from Pi-Star.

What the screen actually shows

When idle (nobody transmitting) the display draws a status splash: the node's callsign/name, the mode (DMR), sometimes an antenna icon and the network state. As soon as someone keys up, the screen switches to a "live" view:

In other words, the OLED is essentially a local "air monitor": a glance at the screen tells you who's on and how they're being received, without opening a browser.

The display is one thing, the airwaves are governed by lawThe little screen changes nothing in the radio side: a hotspot is a transmitter. You may only transmit (TX) if you hold an amateur license and callsign and strictly within the allotted bands — see where operation is permitted. The OLED merely shows what is already happening on the radio channel.

Common problems and how to fix them

  1. Screen is black, nothing there. Start with i2cdetect. No address — soldering/power/I2C is off. Address shows up but blank — almost always Display=OLED is not enabled in the config.
  2. Image shifted 2 pixels to the left / junk along the edge. This is the signature symptom: you have an SH1106, but the driver is set for an SSD1306. The SH1106 has 132 columns of RAM internally with 128 visible, so it needs a 2-pixel offset — set Type=6 (or SH1106 mode in the firmware).
  3. Image is upside down (the module was mounted the other way up). Fix with rotation: Rotate=1 in the [OLED] section, or the rotation option in the dashboard.
  4. I2C conflict. If something else with address 0x3C hangs on the bus, you get garbage. A hotspot usually has just one display, so simply don't put a second device on the same address.
  5. Display not soldered / cold joint. Buzz out the contacts, wiggle them — flicker and dropouts are almost always mechanical, not software.
An alternative — NextionIf you want a bigger color graphical screen, there are Nextion displays (connected over UART, with their own layout "firmware"). They're more attractive and informative, but pricier, they take up a serial port and require a separate layout upload. For a home node an honest 0.96″ OLED covers 95% of needs.

A hotspot with a screen — into the DMRhub network

Built a node and want to see live network traffic on the display? Build an image for your board in the wizard — the node registers itself on the portal, and the OLED is enabled with a single checkbox in the dashboard.

Sources

  1. F5UII — installing an OLED SSD1306 on MMDVM/MMDVMHost: f5uii.net
  2. HamOperator — "MMDVM .96″ OLED Now Works" (Type 3/6, SSD1306 vs SH1106): wp.hamoperator.com
  3. Adafruit — wiring an SSD1306 OLED over I2C on a Raspberry Pi: learn.adafruit.com
  4. Universal-Solder — "random pixels": SSD1306 vs SH1106: universal-solder.ca