Join the Global Mesh Network

Connect your Raspberry Pi gateway to the worldwide MeshCore federation. Your field radios will reach any connected mesh on earth. Takes about 30 minutes from scratch.

1Hardware
2Pi OS
3Reflector
4Install
5Verify
6Done

πŸ–₯️ What You Need

Any of these combinations work. Pick what is available and affordable in your country.

ItemRecommendedAlso WorksCost
Raspberry Pi Pi 4 (2GB or 4GB RAM) Pi 3B+, Pi Zero 2W ~$45-75 REQUIRED
LoRa Radio RAK4631 WisBlock + base Waveshare SX1262 HAT, Heltec V3 ~$25-40 REQUIRED
Antenna 5-8 dBi fibreglass omni Stock whip antenna ~$5-40 REQUIRED
MicroSD Card Samsung 32GB Endurance Any Class 10 / A1, 16GB+ ~$8-15 REQUIRED
Power Supply Official Pi USB-C PSU (3A) Any 5V 3A USB-C ~$10-15 REQUIRED
Internet Ethernet to router Wi-Fi, 4G USB modem existing REQUIRED
UPS HAT PiJuice HAT Waveshare UPS HAT C ~$25-45 recommended
4G Backup Huawei E3372 USB dongle Any USB 4G modem ~$30-65 optional
⚠️ Never power a LoRa radio without an antenna attached. The SX1262 chip will be permanently damaged in seconds without an antenna connected.

πŸ“‘ LoRa Frequency for Your Country

Your radio must use the correct frequency for your country. Use this table to find your region code for the installer.

Country / RegionFrequencyInstaller flag
USA, Canada, Mexico, Brazil915 MHz--region us
Philippines915 MHz--region us
Europe, UK, Africa, Middle East868 MHz--region eu868
Australia, New Zealand917 MHz--region au
India865 MHz--region in
Japan920.6 MHz--region jp
South Korea921.9 MHz--region kr
China470 MHz--region cn
Russia868.8 MHz--region ru
SE Asia (Singapore, Thailand, Malaysia)923 MHz--region sea
Taiwan922 MHz--region tw

Not sure? Check the TTN frequency table β†’

πŸ’Ύ Flash Raspberry Pi OS

Download Raspberry Pi Imager from raspberrypi.com/software and install it on your computer.

Open Imager and make these exact selections:

  1. Choose Device β†’ Raspberry Pi 4 (or your model)
  2. Choose OS β†’ Raspberry Pi OS (other) β†’ Raspberry Pi OS Lite (64-bit)
  3. Choose Storage β†’ your MicroSD card
  4. Click the gear icon βš™ before writing:
    • Hostname: meshcore-gw
    • Enable SSH βœ…
    • Username: pi
    • Set a strong password β€” write it down
    • Configure Wi-Fi if not using Ethernet
  5. Click Write and wait for verification to complete

πŸ”Œ First Boot

Insert MicroSD into Pi, connect Ethernet, connect power. Wait 90 seconds.

Find your Pi's IP address in your router's connected devices list, then SSH in from your computer:

# From Windows PowerShell, Mac Terminal, or Linux terminal
ssh pi@192.168.1.xxx   # use your Pi's actual IP
# or try the hostname:
ssh pi@meshcore-gw.local

Once logged in, update the system:

sudo apt update && sudo apt upgrade -y
sudo reboot

Wait 60 seconds, then SSH back in β€” you are ready for the installer.

ℹ️ Green LED not blinking? The Pi is not reading the SD card. Re-flash the card and make sure SSH was enabled in Imager settings. The green LED should blink rapidly within 30 seconds of powering on.

πŸ“‘ Choose Your Reflector

Pick the reflector that best matches your location and use case. You can change this later with a single command.

MESH-GLOBAL-01
Worldwide open network β€” all regions welcome
Loading…

Selected: MESH-GLOBAL-01

πŸ‘€ Operator Account

The installer creates your operator account automatically using the email and password you provide with --fed-email and --fed-pass. No separate signup step needed.

If you prefer to register first (e.g. to claim a specific username), run this on any computer:

# Optional: pre-register via API
curl -X POST https://mesh.meshcorefederationnetwork.org/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username":     "your-username",
    "email":        "you@example.com",
    "password":     "StrongPassword123!",
    "display_name": "Your Name",
    "country":      "US"
  }'

# Response:
{
  "token": "eyJhbGci...jwt-token...",
  "operator": {"id": "uuid", "username": "your-username"}
}

πŸ“₯ Download the Installer to Your Pi

SSH into your Pi and run:

# Download installer
curl -L https://mesh.meshcorefederationnetwork.org/install.sh -o meshcore-all-in-one.sh
chmod +x meshcore-all-in-one.sh

# Or use wget:
wget https://mesh.meshcorefederationnetwork.org/install.sh -O meshcore-all-in-one.sh
chmod +x meshcore-all-in-one.sh

πŸš€ Run the Installer

Replace the values below with your actual information, then run on your Pi:

sudo bash meshcore-all-in-one.sh \
  --install gateway \
  --region us \                        # your region code from Step 1
  --site-name "MyGateway" \            # your gateway name
  --federation-server mesh.meshcorefederationnetwork.org \   # this federation server
  --reflector "MESH-GLOBAL-01" \    # your chosen reflector
  --fed-email "you@example.com" \      # your email (creates account)
  --fed-pass "StrongPass123!" \        # choose a strong password
  -y
ℹ️ The interactive wizard is easier if you prefer: sudo bash meshcore-all-in-one.sh Just answer the questions β€” it handles account creation, gateway registration, reflector joining, and service startup automatically.
βœ… The installer automatically: registers your operator account, registers your gateway with the federation, joins your chosen reflector, and starts the meshcore-fed-client service.

πŸ“» Flash Your Gateway Radio

The RAK4631 plugged into your Pi needs MeshCore Companion firmware:

  1. Go to flasher.meshcore.io
  2. Connect your gateway RAK4631 to your computer via USB
  3. Select: RAK4631 β†’ Companion β†’ latest version
  4. Click Flash and wait for completion
  5. Plug the flashed radio into your Pi via USB
⚠️ Flash the radio as Companion β€” not Repeater or Node. Companion mode lets the Pi control the radio. The other modes are for standalone radios.

βœ… Check Everything is Running

On your Pi via SSH:

# Check all services
sudo systemctl status meshcore-gateway
sudo systemctl status meshcore-fed-client
sudo systemctl status meshcore-roomserver
sudo systemctl status mosquitto

# All should show: active (running) in green
# Watch live federation client logs
sudo tail -f /var/log/meshcore/fed-client.log

# Should see:
Federation client starting | server=mesh.meshcorefederationnetwork.org
Connected to mesh.meshcorefederationnetwork.org reflector=MESH-GLOBAL-01
Local MQTT connected

🌐 Confirm Gateway on the Federation

Check that your gateway appears in the public gateway list:

# From any computer
curl -s https://mesh.meshcorefederationnetwork.org/api/gateways/list | python3 -m json.tool

# Should show your gateway with "is_online": true

πŸ—ΊοΈ Check the Global Map

Open your browser and go to:

https://mesh.meshcorefederationnetwork.org/map

Your gateway will appear in the sidebar list immediately. To show as a pin on the map, set your coordinates when re-running the installer or update your gateway record via the API.

ℹ️ If your gateway does not have GPS coordinates set, it will appear in the sidebar list but not on the map. That is normal β€” add --lat 14.5995 --lon 120.9842 to set your location.

πŸ’¬ Send a Test Message

Open the MeshCore companion app, connect to your Pi, and send a message. It will route through the federation to all gateways on MESH-GLOBAL-01 within 1-2 seconds.

You can also test message routing via the reflector API:

# Check recent messages on your reflector
curl -s "https://mesh.meshcorefederationnetwork.org/api/reflectors/MESH-GLOBAL-01/messages" \
  | python3 -m json.tool

πŸŽ‰ Welcome to the Global Mesh Network!

Your gateway is now part of the worldwide MeshCore federation. Your field radios can reach any connected mesh on earth.

  • Gateway running on Raspberry Pi
  • Connected to mesh.meshcorefederationnetwork.org
  • Joined reflector MESH-GLOBAL-01
  • Appearing in the global gateway list
  • Messages routing to all connected gateways

πŸ”§ Useful Commands

# Check federation client status
sudo systemctl status meshcore-fed-client
sudo tail -f /var/log/meshcore/fed-client.log

# Switch to a different reflector
GW_TOKEN=$(python3 -c "import json; print(json.load(open('/opt/meshcore-gateway/federation.json'))['gateway_token'])")
curl -X GET https://mesh.meshcorefederationnetwork.org/api/gateways/join/MESH-EMCOMM \
  -H "X-Gateway-Token: $GW_TOKEN"
sudo systemctl restart meshcore-fed-client

# View all MQTT traffic on your Pi
mosquitto_sub -h localhost -t '#' -v

# Restart all gateway services
sudo systemctl restart meshcore-gateway meshcore-fed-client meshcore-roomserver

πŸ†˜ Troubleshooting

ProblemFix
Gateway not in list Check sudo systemctl status meshcore-fed-client β€” check federation.json exists
Federation not connecting Check internet: ping 8.8.8.8 β€” check token in /opt/meshcore-gateway/federation.json
Radio not detected ls /dev/ttyACM* β€” must show /dev/ttyACM0
Messages not routing Check both gateways are on same reflector with curl .../api/gateways/list
Need help Discord: discord.gg/meshcore