Skip to main content

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.