Programmare il TTGO LoRa32 433MHz
Guida completa alla scheda TTGO LoRa32 433MHz: configurazione dell'ambiente di sviluppo, programmazione del modulo radio SX1276 e del display OLED, fino ai progetti pratici come reti mesh e gateway LoRaWAN.
Panoramica Hardware
Il TTGO LoRa32 è una scheda di sviluppo compatta prodotta da LilyGO che integra su un unico PCB:
- ESP32 dual-core a 240MHz, 520KB SRAM, 4MB Flash, Wi-Fi 802.11 b/g/n e Bluetooth 4.2
- Semtech SX1276 — modulo LoRa/FSK che opera a 433, 868 o 915 MHz (in base alla variante)
- Display OLED 0.96" da 128×64 pixel, controller SSD1306 via I2C (presente nella maggior parte dei modelli)
- Connettore per batteria LiPo 3.7V con circuito di ricarica integrato via USB
- Connettore antenna SMA o IPEX per antenna esterna
- Slot MicroSD via SPI (alcuni modelli)
LilyGO ha prodotto diverse revisioni (v1, v1.6, v2, v2.1). Il pin mapping del modulo LoRa e dell'OLED cambia tra versioni. Verifica sempre lo schema della tua scheda sul repository GitHub di LilyGO prima di caricare il codice.
I pin più comuni per la versione v2.1 (la più diffusa attualmente) sono:
// LoRa SX1276 — TTGO LoRa32 v2.1
#define LORA_SCK 5
#define LORA_MISO 19
#define LORA_MOSI 27
#define LORA_SS 18
#define LORA_RST 23
#define LORA_DI0 26
// Display OLED SSD1306 via I2C
#define OLED_SDA 21
#define OLED_SCL 22
#define OLED_RST 16
// Frequenza LoRa (433 MHz per uso europeo/asiatico)
#define BAND 433E6
Setup Arduino IDE
Arduino IDE è il punto di partenza più semplice. Occorre aggiungere il supporto per la piattaforma ESP32 tramite il board manager.
Apri File → Preferences e incolla questo URL nel campo "Additional boards manager URLs":
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Poi vai su Tools → Board → Boards Manager, cerca "esp32" e installa il pacchetto di
Espressif. Seleziona la scheda TTGO LoRa32-OLED (o ESP32 Dev Module come
fallback).
Installa le librerie necessarie da Tools → Manage Libraries:
- LoRa di Sandeep Mistry — driver base per il SX1276
- RadioLib di jgromes — alternativa più potente, supporta LoRaWAN nativo
- Adafruit SSD1306 + Adafruit GFX Library — per il display OLED
Il TTGO LoRa32 usa il chip USB-to-serial CP2104 o CH340 a seconda del modello. Se la porta COM/tty non appare, installa il driver corrispondente dal sito Silicon Labs o WCH prima di proseguire.
Setup PlatformIO (consigliato)
PlatformIO è l'ambiente professionale per progetti embedded. Installa l'estensione PlatformIO
IDE su VS Code, poi crea un nuovo progetto. Configura il file
platformio.ini come segue:
[env:ttgo-lora32-v1]
platform = espressif32
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa
adafruit/Adafruit SSD1306
adafruit/Adafruit GFX Library
# Opzionale: velocità monitor seriale
monitor_speed = 115200
PlatformIO scarica automaticamente tutte le dipendenze al primo build. Usa
pio run -t upload da terminale oppure il tasto Upload nell'interfaccia di VS Code.
È possibile flashare MicroPython sull'ESP32 e usare la libreria ulora per il
modulo radio. Ottimo per prototipi rapidi ma le prestazioni in tempo reale sono inferiori
rispetto all'approccio Arduino/C++.
Primo sketch — trasmissione LoRa e OLED
Questo sketch invia un pacchetto LoRa ogni 2 secondi e mostra un messaggio sul display OLED. È il punto di partenza ideale per verificare che tutto funzioni correttamente.
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Pin mapping TTGO LoRa32 v2.1
#define LORA_SCK 5
#define LORA_MISO 19
#define LORA_MOSI 27
#define LORA_SS 18
#define LORA_RST 23
#define LORA_DI0 26
#define BAND 433E6
#define OLED_SDA 21
#define OLED_SCL 22
#define OLED_RST 16
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST);
int counter = 0;
void setup() {
Serial.begin(115200);
// Init OLED
Wire.begin(OLED_SDA, OLED_SCL);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED non trovato");
while (true);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Avvio LoRa...");
display.display();
// Init LoRa
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_SS);
LoRa.setPins(LORA_SS, LORA_RST, LORA_DI0);
if (!LoRa.begin(BAND)) {
display.println("LoRa fallito!");
display.display();
while (true);
}
display.println("LoRa OK!");
display.display();
Serial.println("LoRa inizializzato");
}
void loop() {
Serial.print("Invio pacchetto #");
Serial.println(counter);
LoRa.beginPacket();
LoRa.print("Ciao #");
LoRa.print(counter);
LoRa.endPacket();
display.clearDisplay();
display.setCursor(0, 0);
display.println("TX LoRa 433MHz");
display.print("Pacchetto: #");
display.println(counter);
display.display();
counter++;
delay(2000);
}
Per ricevere invece di trasmettere, sostituisci il contenuto del loop() con un handler
basato su LoRa.parsePacket() e leggi i dati con LoRa.readString().
Connessione a LoRaWAN (The Things Network)
Con la libreria RadioLib puoi connettere il TTGO LoRa32 a The Things Network (TTN) e
inviare dati a un cloud IoT globale. Prima crea un account su thethingsnetwork.org e
registra un nuovo device per ottenere le credenziali OTAA.
#include <RadioLib.h>
// Credenziali OTAA dal pannello TTN
#define JOINUI "0000000000000000" // JoinEUI / AppEUI
#define DEVUI "0000000000000000" // DevEUI
#define APPKEY "00000000000000000000000000000000"
SX1276 radio = new Module(18, 26, 23, 33);
LoRaWANNode node(&radio, &EU433);
void setup() {
Serial.begin(115200);
radio.begin(433.175);
node.beginOTAA(JOINUI, DEVUI, nullptr, APPKEY);
node.activateOTAA();
}
void loop() {
// Invia payload (max 51 byte su SF12)
uint8_t payload[] = { 0x01, 0xAB };
node.sendReceive(payload, sizeof(payload), 1);
delay(60000); // rispetta il duty cycle
}
In Europa la banda 433 MHz ha un duty cycle massimo dell'1%. Con Spreading Factor 12 ogni trasmissione dura circa 2 secondi: non inviare più di un pacchetto ogni 3-4 minuti per non violare le normative ETSI.
Rete mesh off-grid con Meshtastic
Meshtastic è un firmware open-source che trasforma il TTGO LoRa32 in un nodo di una rete mesh cifrata, senza bisogno di infrastruttura. È molto usato da escursionisti, radioamatori e team SAR per comunicare in zone senza copertura cellulare.
Flash del firmware via web (senza installare nulla):
- Collegare il TTGO al PC via USB
- Aprire flasher.meshtastic.org con Chrome o Edge
- Selezionare la scheda
TTGO LoRa32 v2.1e la frequenza433 MHz - Cliccare Flash e attendere il completamento
- Configurare il nodo con l'app Meshtastic (Android/iOS) via Bluetooth
Con due TTGO LoRa32 flashati con Meshtastic puoi avere una chat cifrata punto-punto con portata fino a 20 km in line-of-sight, consumando pochissima energia. Con la batteria LiPo da 2000mAh il dispositivo dura diversi giorni in modalità mesh attiva.
Verifica e troubleshooting
Apri il monitor seriale a 115200 baud e carica il primo sketch. Dovresti vedere l'output di inizializzazione:
LoRa inizializzato
Invio pacchetto #0
Invio pacchetto #1
Invio pacchetto #2
Se il modulo LoRa non si inizializza, verifica questi punti:
- Pin errati — il problema più comune. Confronta il pinout con la versione hardware esatta della tua scheda
- Antenna mancante — il SX1276 non si inizializza correttamente senza antenna collegata; anche una semplice filo da 16.4 cm funziona per i test
- Alimentazione insufficiente — alcune porte USB non erogano abbastanza corrente; prova una porta USB 3.0 o un hub alimentato
- Libreria errata — assicurati di usare la libreria LoRa di Sandeep Mistry e non un'altra con lo stesso nome
Se vedi i pacchetti inviati sul monitor seriale e il display OLED mostra il contatore aggiornato, la scheda è configurata correttamente e pronta per i tuoi progetti.