# Accessories and Peripherals

# Displays for LoRa Nodes

Adding a display to a LoRa node provides visual feedback on mesh status, incoming messages, and GPS coordinates - without requiring a phone connection. Different display types make different tradeoffs between power consumption, visibility, and cost.

## Built-in Display Options

Many popular LoRa boards ship with or can be fitted with a display:

<table id="bkmrk-boarddisplay-typesiz"><thead><tr><th>Board</th><th>Display Type</th><th>Size</th><th>Power Draw</th><th>Sunlight Readable</th></tr></thead><tbody><tr><td>Heltec WiFi LoRa 32 V3</td><td>OLED (SSD1306)</td><td>0.96" 128x64</td><td>+15-20 mA when on</td><td>Poor</td></tr><tr><td>T-Beam (most versions)</td><td>OLED (SSD1306, commonly an add-on module)</td><td>0.96" 128x64</td><td>+15-20 mA when on</td><td>Poor</td></tr><tr><td>T-Echo</td><td>E-Ink (1.54")</td><td>1.54" 200x200</td><td>~0 mA when static</td><td>Excellent</td></tr><tr><td>RAK WisBlock + RAK14000</td><td>E-Ink (2.13")</td><td>2.13" 250x122</td><td>~0 mA when static</td><td>Excellent</td></tr></tbody></table>

Note: the 0.96" SSD1306 OLED is commonly a separate add-on module rather than present on every T-Beam revision - some T-Beam versions ship without a screen.

## OLED Displays

SSD1306-based 0.96" OLED displays are inexpensive and common. They connect via I2C (SDA/SCL pins) and the SSD1306 is a natively supported (selectable) driver in Meshtastic firmware.

- **Advantages** - High contrast, works in complete darkness, fast refresh
- **Disadvantages** - Poor in direct sunlight; draws roughly 15-20 mA when on (current varies with displayed content - typically under 15 mA - and is significant for battery nodes); OLED panels can also dim or burn in over thousands of hours of continuous use
- **Power tip** - Set a short screen timeout to minimize power draw, e.g. `meshtastic --set display.screen_on_secs 30`. Note: a value of **0 does NOT disable the screen** - in Meshtastic, 0 maps to 10 minutes (the default). To minimize screen-on power, set a small positive value (e.g. 1); screen-off behavior on solar/battery nodes is governed by the device's power-saving settings, not by `screen_on_secs 0`.
- **Adding to a bare board** - Many ESP32 boards have I2C headers that accept standard 0.96" OLED modules. On the original (classic) ESP32 the common I2C defaults are SDA = GPIO 21 and SCL = GPIO 22; ESP32-S3 boards (e.g. Heltec V3) use different and remappable I2C pins, so always check your board's pinout.

## E-Ink Displays

Electronic ink displays consume power only when the display content changes. Once updated, the image is held with zero power consumption - ideal for battery-operated nodes.

- **Advantages** - Zero standby power, excellent sunlight readability, long battery life, full image visible even when battery is critically low
- **Disadvantages** - Slow refresh (1-2 seconds), ghosting artifacts after many refreshes, limited to black/white (no grayscale on basic modules), higher cost than OLED
- **Best use cases** - Handheld nodes where you need to read position and messages in direct sunlight; any node where battery life is the priority

## TFT Color Displays

Color TFT displays (ST7789, ILI9341) provide higher resolution and color, but draw significantly more power (30-80 mA with the backlight on). Generally not recommended for battery-powered LoRa nodes but suitable for always-powered room server displays or status panels. T-Deck devices (a complete LoRa device with keyboard and color display) use a ST7789 TFT touchscreen.

## Adding an External Display to an Existing Node

Most ESP32 and nRF52840 LoRa boards support adding an external I2C OLED. Steps:

1. Identify I2C pins on your board (SDA, SCL, 3.3V, GND) from the board's pinout documentation
2. Connect a 0.96" SSD1306 OLED module: VCC to 3.3V, GND to GND, SDA to SDA, SCL to SCL
3. In Meshtastic: the OLED is auto-detected on boot, so no manual "enable" is usually needed. If auto-detect fails, set Config → Display → OLED Definition to the correct controller (SSD1306/SH1106/SH1107) and save
4. The display should activate after reboot

# GPS Modules for LoRa Nodes

GPS provides automatic position reporting for mesh mapping and navigation. Many boards include an integrated GPS; for those that don't, external GPS modules can be added via UART or I2C.

## Integrated GPS vs External Module

<table id="bkmrk-approachboardsprosco"><thead><tr><th>Approach</th><th>Boards</th><th>Pros</th><th>Cons</th></tr></thead><tbody><tr><td>Integrated GPS</td><td>T-Beam, T-Echo, some RAK boards</td><td>All-in-one, no wiring</td><td>Higher cost; disabling GPS to save power depends on whether the board provides GPS power gating (some integrated boards switch GPS power via the PMIC/GPIO, others do not)</td></tr><tr><td>External UART GPS</td><td>Any board with UART pins</td><td>Flexible, replaceable, can be positioned for best sky view</td><td>Wiring required, adds bulk</td></tr><tr><td>GPS from phone via BLE</td><td>Any (Meshtastic only)</td><td>No hardware needed</td><td>Requires active phone connection; phone must remain near node</td></tr></tbody></table>

## Popular External GPS Modules

<table id="bkmrk-moduleinterfacettff-"><thead><tr><th>Module</th><th>Interface</th><th>TTFF (cold)</th><th>Current Draw</th><th>Notes</th></tr></thead><tbody><tr><td>u-blox NEO-M8N</td><td>UART</td><td>26s</td><td>23 mA</td><td>Excellent sensitivity; widely supported</td></tr><tr><td>Quectel L76K</td><td>UART</td><td>30s</td><td>~29 mA (acquisition/tracking)</td><td>Used on the LilyGO T-Echo (and some Wio Tracker L1 boards); compact. The T-Beam Supreme uses a u-blox M10-series module, not the L76K</td></tr><tr><td>u-blox MAX-M8Q</td><td>UART</td><td>26s</td><td>15 mA</td><td>Compact form factor; patch antenna</td></tr><tr><td>ATGM336H</td><td>UART</td><td>~35s</td><td>~20 mA</td><td>Inexpensive Chinese alternative; adequate for most uses (figures approximate)</td></tr><tr><td>GT-U7 (NEO-6M clone)</td><td>UART</td><td>60s+</td><td>~45 mA</td><td>Very inexpensive; poor sensitivity; not recommended (figures approximate)</td></tr></tbody></table>

TTFF = Time To First Fix from a cold start in open sky conditions.

## Wiring an External UART GPS

Most GPS modules use 3.3V logic and UART at 9600 baud. Connect:

- GPS VCC → 3.3V on LoRa board
- GPS GND → GND on LoRa board
- GPS TX → UART RX pin on LoRa board
- GPS RX → UART TX pin on LoRa board (needed only if sending commands to GPS)

Configure in Meshtastic: Config → Position → GPS Mode = Enabled; GPS RX pin = RX pin number from your board's pinout.

## GPS Power Management

GPS is one of the largest power consumers on a LoRa node. For battery-powered nodes:

- **Disable GPS if fixed position is configured** - A repeater at a known location doesn't need active GPS
- **Increase GPS update interval** - For slow-moving applications, a 60-300 second GPS update interval with smart beaconing works well
- **GPS power gating** - Some boards route GPS power through a GPIO-controlled switch. Meshtastic can be configured to power-cycle the GPS between fixes, which can substantially reduce average GPS current; the exact average depends on the module and update interval
- **Almanac caching** - After a successful fix, Meshtastic caches almanac data to flash and reloads it on boot, enabling faster warm starts on subsequent power-ups. Meshtastic has no internet/app-based AGPS preload feature; it does not download almanac or ephemeris over WiFi/internet

# Keyboards, Buttons, and Input Devices

Adding physical input to a LoRa node enables sending messages and navigating menus without a phone. Input options range from simple push buttons to full QWERTY keyboards.

## Canned Messages with a Rotary Encoder

The Meshtastic Canned Messages module supports a rotary encoder for scrolling through preset messages and a push button for sending. This is the most practical hardware UI upgrade for a fixed node.

### Rotary Encoder Wiring (typical)

```
Encoder CLK (A) → choose a free GPIO per your board's schematic
Encoder DT (B) → choose a free GPIO per your board's schematic
Encoder SW (button) → choose a free GPIO per your board's schematic
Encoder VCC → 3.3V
Encoder GND → GND
```

**GPIO assignment is board-specific and must be chosen from your board's schematic.** Do not copy fixed pin numbers from another board: on many boards some GPIOs are input-only or do not exist, and the official Meshtastic docs warn that "GPIO access is fundamentally dangerous because invalid options can physically damage or destroy your hardware." Valid encoder port-A/B pins are in the range 1-39 on ESP32-class boards. Pick free, output-capable GPIOs for the pins you use, and verify against your board's pinout before wiring. The KY-040 rotary encoder module (~$1-2) is the most common choice.

### Configuration

```
meshtastic --set canned_message.enabled true
meshtastic --set canned_message.inputbroker_pin_a <your encoder A GPIO>
meshtastic --set canned_message.inputbroker_pin_b <your encoder B GPIO>
meshtastic --set canned_message.inputbroker_event_press SELECT
meshtastic --set-canned-message "OK|On my way|At destination|Need help|ETA 5 min"
```

Note the message list is set with the standalone `--set-canned-message` flag, not a `--set canned_message.messages` key, and the press event value is `SELECT` (an input-event character), not the protobuf enum name.

## T-Deck: Integrated QWERTY Device

The LilyGO T-Deck is a complete Meshtastic/LoRa device with an integrated small QWERTY keyboard, color TFT touchscreen, trackball, LoRa radio, and optional GPS. It's the closest thing to a dedicated LoRa messenger device:

- Native keyboard input for typing full messages without a phone
- Color display shows message history, node list, and map
- Runs Meshtastic firmware with full touchscreen UI
- Battery: the base T-Deck ships with **no battery** (you add your own cell). Only the T-Deck Plus has a built-in 2000 mAh battery, giving roughly 8-12 hours of active use
- Price: approximately $50-70 (as of 2026-06-08; the base T-Deck is often found nearer $45 — verify with a current retailer listing)
- Limitation: higher power consumption than OLED nodes; not ideal for solar/battery long-term deployment

## WisBlock Input Modules (RAK14001 / RAK14004)

For WisBlock-based nodes, RAKwireless offers two distinct input/output modules that mount directly to the WisBlock base board without wiring. These are separate modules, not one combined unit: the **RAK14001** is an RGB LED module (no buttons), and the **RAK14004** is a matrix-scan keypad controller (no LEDs). The RAK14004 uses a matrix-scanning technique supporting up to 8x8 = 64 buttons and is paired with separate RAK keypad modules (such as the RAK14009/14010/14011); it is not itself a fixed 4x4 keypad.

## Simple Button for Alert Sending

A momentary push button connected to a user-accessible GPIO pin can be used with the Meshtastic canned-message input to send a message from the node - useful for panic buttons, check-in buttons, or man-down alerts in safety applications.

```
meshtastic --set canned_message.send_bell true
```

Note: `send_bell` only appends a bell character (ASCII BEL) to a message so receiving nodes can beep on arrival — it does not by itself send a message on a button press. To send with a single press, use a `scanAndSelect` input source (a long press sends the highlighted message) or configure a single-item canned-message list so the one available message is sent immediately.