Community project
Voglio Creare Un Ripetitore/nodo Per Meshtastic
Build a solar-powered Meshtastic repeater node that extends mesh network coverage outdoors. This project combines an ESP32 with a 868 MHz LoRa radio, solar charging system, and weatherproof enclosure to create an autonomous relay that receives and forwards Meshtastic messages across extended distances.
This guide provides a complete parts list, wiring diagram, assembly steps, and Arduino firmware to get the node receiving and relaying LoRa packets. The solar panel and MPPT charger keep the system running continuously, while the boost converter ensures stable 5V power for the radio module. Once assembled and deployed, the repeater will automatically extend your mesh network's range without requiring manual intervention.
Wiring diagram

Gather all the parts
Assemble it in 6 steps
1. Prepara la scatola e il pannello
Fissa il pannello solar_panel all'esterno della scatola, in un punto non ombreggiato e rivolto verso sud. Fai entrare i suoi due fili attraverso un pressacavo, così la pioggia non può entrare.
- Lascia un piccolo gocciolatoio nel cavo prima del pressacavo: l'acqua scende via invece di arrivare alla scatola.
- Non forare o piegare il pannello: un pannello danneggiato può lasciar entrare acqua e smettere di caricare la batteria.
2. Collega pannello e caricatore
Con il pannello coperto o al buio, collega il filo positivo del solar_panel V+ al morsetto SOLAR+ del solar_charger (carica dal sole). Collega il filo negativo del solar_panel GND al morsetto SOLAR- del solar_charger (ritorno della corrente).
- Di solito il positivo è rosso e il negativo è nero, ma controlla sempre i simboli + e − stampati sul modulo.
- Non scambiare i fili del pannello: un collegamento invertito può danneggiare il caricatore.
3. Collega la batteria protetta
Collega B+ della battery_pack a BAT+ del solar_charger (energia accumulata) e B- della battery_pack a BAT- del solar_charger (ritorno della corrente). Usa un pacco batteria già protetto, non celle sciolte saldate a mano.
- Metti un piccolo fusibile sul filo positivo vicino alla batteria, seguendo le indicazioni del pacco batteria.
- Non cortocircuitare mai i due fili della batteria: possono scaldarsi molto, danneggiare il pacco e provocare un incendio. Non caricare celle Li-ion quando sono sotto 0 °C.
4. Aggiungi il convertitore a 5 V
Collega OUT+ del solar_charger a IN+ del boost_5v (alimentazione dalla batteria) e OUT- del solar_charger a IN- del boost_5v (ground). Prima di collegare la Heltec, misura con un multimetro tra OUT+ e OUT- del boost_5v: deve leggere 5 V stabili.
- Regola il convertitore, se ha una piccola vite di regolazione, prima di collegare la scheda.
- Se il convertitore supera 5 V puoi danneggiare la porta USB-C e la Heltec.
5. Alimenta e antenna la Heltec
Collega l'uscita OUT+ del boost_5v al positivo di un cavetto USB-C e OUT- al suo ground, poi inserisci il cavetto nella Heltec V3. Avvita o innesta antenna_868, con il pigtail adatto, nel piccolo connettore LoRa della Heltec prima di darle alimentazione (segnale radio).
- Tieni il cavo tra antenna e Heltec più corto possibile e monta l'antenna in verticale.
- Non alimentare la Heltec senza antenna collegata: durante la trasmissione la radio può danneggiarsi. Assicurati che l'antenna sia davvero per 868 MHz.
6. Sistema tutto nella scatola
Fissa Heltec, solar_charger, battery_pack e boost_5v dentro la scatola, senza schiacciare fili o lasciare parti metalliche scoperte. La Heltec usa il display spento; lascia comunque un po' di spazio attorno alla scheda per non intrappolare troppo calore.
- Metti la batteria lontana da sole diretto e controlla che i pressacavi stringano bene i cavi.
- Una batteria lasciata al sole dentro una scatola chiusa può surriscaldarsi e perdere capacità o diventare pericolosa.
Review all connections
1. Connections between "solar_panel" and "ESP32"
2. Connections between "battery_pack" and "ESP32"
3. Connections between "solar_charger" and "ESP32"
4. Connections between "boost_5v" and "ESP32"
5. Connections between "antenna_868" and "ESP32"
Deploy the firmware
#include <Arduino.h>
#include <WiFi.h>
#include <esp_bt.h>
#include <RadioLib.h>
// Heltec WiFi LoRa 32 V3: these are hard-wired to its onboard SX1262.
// Forward declarations
void IRAM_ATTR onReceive();
void stopUnusedHardware();
static constexpr int LORA_NSS = 8;
static constexpr int LORA_DIO1 = 14;
static constexpr int LORA_RST = 12;
static constexpr int LORA_BUSY = 13;
// Heltec V3 onboard display controls. VEXT HIGH removes display power;
// OLED_RST LOW also holds the display controller inactive.
static constexpr int VEXT_CONTROL = 36;
static constexpr int OLED_RST = 21;
// EU_868 receive-test parameters. This sketch is not Meshtastic firmware.
static constexpr float RF_FREQUENCY_MHZ = 868.0F;
static constexpr float RF_BANDWIDTH_KHZ = 125.0F;
static constexpr uint8_t RF_SPREADING_FACTOR = 11;
static constexpr uint8_t RF_CODING_RATE = 5;
static constexpr uint8_t RF_SYNC_WORD = 0x12;
static constexpr int8_t RF_POWER_DBM = 14;
static constexpr uint16_t RF_PREAMBLE_LENGTH = 8;
SX1262 radio = new Module(LORA_NSS, LORA_DIO1, LORA_RST, LORA_BUSY);
volatile bool packetReceived = false;
void IRAM_ATTR onReceive() {
packetReceived = true;
}
void stopUnusedHardware() {
pinMode(VEXT_CONTROL, OUTPUT);
digitalWrite(VEXT_CONTROL, HIGH);
pinMode(OLED_RST, OUTPUT);
digitalWrite(OLED_RST, LOW);
WiFi.mode(WIFI_OFF);
btStop();
}
void setup() {
stopUnusedHardware();
Serial.begin(115200);
delay(100);
const int state = radio.begin(RF_FREQUENCY_MHZ, RF_BANDWIDTH_KHZ,
RF_SPREADING_FACTOR, RF_CODING_RATE,
RF_SYNC_WORD, RF_POWER_DBM,
RF_PREAMBLE_LENGTH);
if (state != RADIOLIB_ERR_NONE) {
Serial.printf("SX1262 start failed: %d\n", state);
while (true) {
delay(1000);
}
}
radio.setDio1Action(onReceive);
const int receiveState = radio.startReceive();
Serial.printf("EU_868 receive test started: %d\n", receiveState);
}
void loop() {
if (!packetReceived) {
delay(50);
return;
}
packetReceived = false;
String packet;
const int state = radio.readData(packet);
if (state == RADIOLIB_ERR_NONE) {
Serial.printf("Packet received, RSSI %.1f dBm, SNR %.1f dB, %u bytes\n",
radio.getRSSI(), radio.getSNR(), packet.length());
} else {
Serial.printf("Receive error: %d\n", state);
}
radio.startReceive();
}Remix this project
Make it yours in one click
Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.




