Allora ho istallato
“esp32 by Espressif Systems” e clicca su Installa .
Libreria Meshtastic by Meshtastic" e clicca su Installa
Libreria “U8g2 by Oliver Kraus” e clicca su Installa .
Libreria Wire (per I2C): Necessaria per la comunicazione con il display. È già inclusa con Arduino IDE, quindi non devi installarla.
- Collega una delle tue schede Heltec LoRa 32 V3.2 al computer tramite USB.
- In Arduino IDE, vai su
Strumenti > Scheda > ESP32 Arduino
.
- Cerca e seleziona la tua scheda:
Heltec WiFi LoRa 32(V3)
.
- Vai su
Strumenti > Porta
e seleziona la porta COM/USB a cui è collegata la tua scheda.
Fase 2: Flash del Firmware Meshtastic su Entrambe le Schede.
Carico questo sketch. (quello del gallegginte)
#include <Meshtastic.h> // Libreria Meshtastic
#include <U8g2lib.h> // Libreria per il display OLED
#include <Wire.h> // Necessaria per I2C (OLED)
// — Configurazione Pin —
const int PIN_GALLEGGIANTE = 2; // Pin GPIO2 per il sensore galleggiante
// — Configurazione Display OLED —
// Per Heltec LoRa 32 V3.2, l’OLED è collegato via I2C sui pin (RST, SCL, SDA).
// RST: GPIO21, SCL: GPIO18, SDA: GPIO19
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=/ 21, / clock=/ 18, / data=*/ 19);
// — Variabili per il Galleggiante —
int statoGalleggiante; // Stato attuale del galleggiante (HIGH/LOW)
// Usiamo un debounce per evitare letture “tremolanti” del galleggiante
long lastDebounceTime = 0;
long debounceDelay = 50; // Millisecondi di ritardo per il debounce
// — Funzione di callback per Meshtastic (necessaria, anche se non riceve comandi qui) —
void onReceive(Meshtastic meshtastic, ReceivedData data) {
// Questa scheda invia solo lo stato del galleggiante.
// Puoi aggiungere qui del codice se volessi che anche questa scheda processasse messaggi in entrata.
}
void setup() {
Serial.begin(115200); // Inizializza comunicazione seriale per il debug
Serial.println(“Avvio scheda sensore galleggiante…”);
// Inizializza il display OLED
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB08_tr); // Scegli un font leggibile
u8g2.clearBuffer();
u8g2.drawStr(0, 10, “Avvio Galleggiante…”);
u8g2.sendBuffer();
// Configura il pin del galleggiante come input con pull-up interno.
// Se il tuo galleggiante chiude a massa (0V) quando c’è acqua, allora LOW = acqua.
pinMode(PIN_GALLEGGIANTE, INPUT_PULLUP);
statoGalleggiante = digitalRead(PIN_GALLEGGIANTE); // Leggi lo stato iniziale
// Inizializza Meshtastic. Il firmware Meshtastic deve essere già flashato.
Meshtastic.begin(onReceive);
Serial.println(“Meshtastic inizializzato.”);
u8g2.clearBuffer();
u8g2.drawStr(0, 10, “Meshtastic OK”);
u8g2.sendBuffer();
delay(1000); // Breve pausa
}
void loop() {
// Meshtastic.update() deve essere chiamata regolarmente per far funzionare la rete.
Meshtastic.update();
int letturaCorrente = digitalRead(PIN_GALLEGGIANTE); // Leggi lo stato del galleggiante
// Debounce: verifica se la lettura è stabile per un certo tempo
if (letturaCorrente != statoGalleggiante) {
lastDebounceTime = millis(); // Riavvia il timer di debounce se il pin è cambiato
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (letturaCorrente != statoGalleggiante) {
statoGalleggiante = letturaCorrente; // Aggiorna lo stato solo dopo il debounce
String messaggioStatoAcqua;
// Adatta questa logica al tuo galleggiante:
// Se LOW significa che c'è acqua (galleggiante chiuso a massa),
// e HIGH significa acqua bassa (galleggiante aperto).
if (statoGalleggiante == LOW) {
messaggioStatoAcqua = "Acqua OK";
Serial.println("Livello acqua: OK");
} else {
messaggioStatoAcqua = "Acqua BASSA!";
Serial.println("Livello acqua: BASSO!");
}
// Invia il messaggio tramite Meshtastic a tutti i nodi della rete
Meshtastic.sendText(messaggioStatoAcqua.c_str());
Serial.print("Messaggio Meshtastic inviato: ");
Serial.println(messaggioStatoAcqua);
// Aggiorna il display OLED
u8g2.clearBuffer();
u8g2.drawStr(0, 10, "Stato Acqua:");
u8g2.drawStr(0, 30, messaggioStatoAcqua.c_str());
u8g2.sendBuffer();
}
}
statoGalleggiante = letturaCorrente; // Aggiorna lo stato per il prossimo ciclo di debounce
delay(500); // Attendi un po’ prima della prossima lettura
}
Lo sketch si carica ma mi cancella il Firmware Meshtastic.
Possono convivere insieme firmaware Meschtastic e codice Arduino?
O devo usare solo uno sketch Arduino senza Meshtastic?