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.
Any of these combinations work. Pick what is available and affordable in your country.
| Item | Recommended | Also Works | Cost | |
|---|---|---|---|---|
| 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 |
Your radio must use the correct frequency for your country. Use this table to find your region code for the installer.
| Country / Region | Frequency | Installer flag |
|---|---|---|
| USA, Canada, Mexico, Brazil | 915 MHz | --region us |
| Philippines | 915 MHz | --region us |
| Europe, UK, Africa, Middle East | 868 MHz | --region eu868 |
| Australia, New Zealand | 917 MHz | --region au |
| India | 865 MHz | --region in |
| Japan | 920.6 MHz | --region jp |
| South Korea | 921.9 MHz | --region kr |
| China | 470 MHz | --region cn |
| Russia | 868.8 MHz | --region ru |
| SE Asia (Singapore, Thailand, Malaysia) | 923 MHz | --region sea |
| Taiwan | 922 MHz | --region tw |
Not sure? Check the TTN frequency table β
Download Raspberry Pi Imager from raspberrypi.com/software and install it on your computer.
Open Imager and make these exact selections:
meshcore-gwpiInsert 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.
Pick the reflector that best matches your location and use case. You can change this later with a single command.
Selected: MESH-GLOBAL-01
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"} }
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
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
sudo bash meshcore-all-in-one.sh
Just answer the questions β it handles account creation, gateway registration,
reflector joining, and service startup automatically.
meshcore-fed-client service.
The RAK4631 plugged into your Pi needs MeshCore Companion firmware:
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
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
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.
--lat 14.5995 --lon 120.9842 to set your location.
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
Your gateway is now part of the worldwide MeshCore federation. Your field radios can reach any connected mesh on earth.
# 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
| Problem | Fix |
|---|---|
| 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 |