Meshtastic in Singapore: A Hobbyist’s First Node

Illustration of Singapore at night as a glowing mesh network: dashed links join radio nodes across the island, with a yellow duck sending out radio waves from Geylang East above HDB blocks with rooftop antennas.

Written by

in

My first Meshtastic node in Singapore is a US$15 to US$45 LoRa board set to the SG_923 region, on the default LongFast channel, with an antenna placed high. This guide covers the rules, the hardware, the setup, and the mistakes one Geylang East gateway made so yours doesn’t.

The rules

Set the region to SG_923 and keep radiated power at or under 100 mW e.r.p.; no licence or approval is needed. IMDA’s short-range device spec (TS SRD, Issue 1 Rev 3, 2023) puts general-purpose devices like Meshtastic under item 30d.

BandMax powerConditionsUse it?
917–925 MHz (item 30d)100 mW e.r.p. (20 dBm)“Suitable mitigation techniques”Yes: Meshtastic region SG_923
433–434 MHz10 mW e.r.p.10% duty cycleOnly with a 433 MHz board (EU_433); few people here use it
866–869 MHz500 mW e.r.p.Under review for refarmingNo: EU_868 boards won’t talk to SG_923 nodes
902–928 MHz US plan—Overlaps mobile networks outside 917–925No: never use the US region
  • Power maths: e.r.p. counts the antenna. A board at 20 dBm with a 3 dBi antenna radiates about 21 dBm e.r.p. (20 + 3 − 2.15), a little over the limit. With a 3 dBi antenna, set TX power to 19 dBm; with a 5 dBi antenna, 17 dBm.
  • Region decides who you hear. Nodes on different regions never hear each other, even through MQTT.
  • Buy the right frequency. Pick the 915 or 923 MHz version of a board; 868 MHz hardware is tuned for the wrong band.

Choosing hardware

For a first node, buy a Heltec WiFi LoRa 32 (V3 or V4) if it will sit at home on WiFi, or a Seeed / Heltec nRF52 device if it will live on a battery. ESP32 boards have WiFi (needed for an MQTT gateway) but drain batteries in a day or two; nRF52 boards have no WiFi but run for days.

DeviceMakerPrice (USD, list)ChipWiFiBest for
WiFi LoRa 32 V3 / V4.3Heltec18–28ESP32-S3YesHome node, WiFi-to-MQTT gateway. Node 7430 is a V3
XIAO ESP32S3 + Wio-SX1262 kitSeeedabout 13–16ESP32-S3YesCheapest node; ships pre-flashed, no screen
Mesh Node T114Heltec18–34nRF52840NoBattery node with a screen
Wio Tracker L1 / L1 ProSeeed28–43nRF52840NoHandheld with GPS, screen, solar input
SenseCAP Card Tracker T1000-ESeeedabout 40nRF52840NoPocket tracker, IP65, no screen
SenseCAP Solar Node P1 / P1 ProSeeed70–90nRF52840NoRooftop or corridor solar repeater
  • Frequency: order the 915 MHz (or “863–928 MHz”) version. Shops in Singapore sometimes stock 868 MHz boards; avoid them.
  • Heltec V4 transmits up to 28 dBm. With region SG_923 the firmware caps it lower, but check TX power after setup (see The rules) and use firmware 2.7.20 or later on a V4.
  • Never power a board without its LoRa antenna attached: transmitting into nothing can damage the radio.
  • Some Heltec boards won’t charge or power from a USB-C to USB-C cable (missing resistors). A USB-A to USB-C cable works (ndoo.sg).
  • The stock antenna is the cheapest upgrade. A tuned 915 MHz dipole of 3 dBi, mounted high and vertical, beats any board swap. In HDB blocks, a corridor or window facing open space matters more than the board.

First setup

An hour gets you from box to a node others can hear. Do the steps in this order; region comes before anything else because nothing transmits until it is set.

  1. Antenna on, then power. Screw the LoRa antenna on before the USB cable goes in.
  2. Flash current firmware at flasher.meshtastic.org in Chrome or Edge, unless the board came pre-flashed and recent. Choose “full erase” on a second-hand or re-purposed board.
  3. Pair the phone app (Meshtastic for Android or iOS) over Bluetooth, or use the web client at client.meshtastic.org over USB.
  4. Set LoRa region to SG_923. Leave the preset on LongFast. Then set TX power for your antenna (The rules).
  5. Name it. Long name and 4-character short name; neighbours see these, so a place-based name (“GeylangEast 7430”) helps them map the mesh.
  6. Role: CLIENT. Leave it there unless the node sits somewhere high and always powered and you have talked to locals first; extra ROUTER nodes in a dense area make the mesh worse, not better.
  7. Position: share it fuzzy. For a home node, set a fixed position and lower position precision on channel 0, so the map shows the neighbourhood, not your flat.
  8. Back up the config once it works: meshtastic --export-config > my-node.yaml (Python CLI, pip install meshtastic). Keep that file private; it holds your WiFi password and channel keys.
  9. Optional, for a home gateway: WiFi + MQTT. On ESP32 boards, turning WiFi on switches Bluetooth off, so finish phone setup first and use the web client or CLI after. Set the MQTT server, then switch uplink on for channel 0 (see the next section for why that matters).
  10. Check you are heard. Send “hello” on LongFast and look for your node on a public map (Joining the Singapore mesh).

Lessons from node 7430

Node 7430 is a Heltec V3 in Geylang East that relays the mesh to a home server over WiFi and MQTT. It went silent while looking healthy: it heard five neighbours, was on WiFi, and logged in to its broker, but one switch was off. Every lesson below came from getting it back, in November 2026.

What you seeWhat was wrongWhat fixed it
“My node vanished” from the app and the mapIt had been renamed (“GOSH-gsh1” to “GeylangEast 7430”) and its WiFi hostname changed with itFind a node by its ID, not its name. !433c7430 never changes: it is the end of the board’s MAC address (…74:30)
Node hears the mesh, but nothing arrives over MQTTChannel 0 uplink was off. Editing settings in the app had reset itAfter any settings change, check uplinkEnabled: true on channel 0. MQTT on is not enough
A CLI command says it worked, but the setting is unchangedOver WiFi, the write was lost when the connection closed too soonWrite, wait about 20 s, disconnect, reconnect, and read the setting back. USB is more reliable than WiFi for changes
Config backup over WiFi times outFull exports are slow over the TCP APITake backups over USB
Broker log: disconnected: protocol errorOld firmware (2.5.x) against a newer broker; a likely mismatch, not confirmedKeep firmware current; read the broker log first when packets stop
Topic changed from msh/... to msh/SG_923/...The app now sets a regional MQTT rootFine, as long as whatever reads the broker subscribes to msh/#
Reboot counter above 40,000The board restarts on its own: weak USB supply or a crash loopA solid 5 V 2 A supply and short cable; watch the counter for a day

The habits that would have caught it the same day:

  • Diagnose read-only first. List USB ports, look the node up on the LAN (the Meshtastic API answers on TCP port 4403), and read the broker log before changing anything.
  • Back up before every change, and keep the backups dated; comparing two of them shows what moved.
  • Give the gateway’s server a fixed LAN address (a DHCP reservation in your router). The radio’s MQTT setting points at an IP, and a new IP silently cuts it off.
  • Put a check on a schedule. A daily “did any packets arrive?” alert turns a silent failure into a message.

Joining the Singapore mesh

The mesh here is patchy: urban range is about 2 km between nodes without line of sight, and the clusters have gaps, so MQTT over the internet still links them. Join the chat first; locals know which rooftops and corridors carry traffic.

  • Talk to people: the 9V1 Meshtastic Telegram group run by the LPWAN & IoT Interest Group Singapore (aligned with SARTS), which holds meetups; and the Singapore LPWAN Group listed on Meshtastic’s local groups page.
  • Radio settings that match everyone else: region SG_923, preset LongFast, default channel 0, frequency slot left at its default. Node 7430 runs exactly this and hears five neighbours from Geylang East.
  • MQTT for a gateway: the shared Malaysia/Singapore config uses the community server mqtt.lucifernet.com with root msh/SG_923. You can also point a gateway at your own broker, as node 7430 does, to log your area’s traffic.
  • Privacy before you uplink: MQTT publishes your node’s messages and position to the public internet. The shared config sends full-precision position; lower position precision on channel 0 and in map reports if the node is at home.
  • See yourself on a map: with map reporting on, your node appears on public maps such as meshmap.net within the hour.
  • Be a good neighbour: CLIENT role unless asked otherwise, no spamming LongFast with test pings, and keep ROUTER or repeater roles for well-sited, always-on nodes agreed with the group.

Where your node can go next: CitizenQuack and PLANETAI

A Meshtastic node can carry more than chat: it can carry sensor readings to a place that acts on them. Node 7430 does exactly that for two Edible Makerspace projects.

  • CitizenQuack SG puts environmental sensors inside 3D-printed creatures, mostly ducks, so air quality and humidity get a face people notice. The project started at the “Smart Citizen Meets Meshtastic” hackathon, and the Singapore duck’s live readings sit a few meters from node 7430.
  • PLANETAI is a Fab City programme: one open machine per place that reads local conditions, suggests what to do, and records whether anyone acted. Edible Makerspace runs an unofficial Singapore node in alpha testing, fed by NEA data, the CitizenQuack kit, indoor sensors and node 7430 as its radio gateway.
  • How the radio fits: a PLANETAI node runs its own MQTT broker, and one gateway radio passes what the mesh hears into it. LoRa sensor nodes (temperature, humidity, PM, CO2, water level) report over the mesh, and their readings are filed under the radio that measured them (PLANETAI radios docs).
  • Run your own: the node software installs in a few minutes on a spare computer; check which machines it supports first (PLANETAI docs). Your first Meshtastic board from this guide can be its gateway.
  • Or just add a sensor near us: if you are in the east of Singapore, a LoRa sensor node on SG_923 within range of Geylang East can report into the Singapore node. Get in touch through Edible Makerspace.

Sources