26/10/2023 in News di sergio rame5 minuti
Le reti mesh sono reti wireless in cui i dispositivi sono connessi tra loro in modalità peer-to-peer. Questo significa che ogni dispositivo può comunicare direttamente con qualsiasi altro dispositivo nella rete, senza bisogno di un server centralizzato.
Vengono spesso usate per applicazioni IoT in cui è necessario collegare un gran numero di dispositivi in un’area topografica estesa. Le reti mesh offrono una serie di vantaggi rispetto alle reti Wi-Fi tradizionali:
Le reti mesh presentano anche alcuni svantaggi, tra cui:
In questo post vedremo come con la scheda micontroller ESP32 sia facile creare reti mesh di piccole e grandi dimensioni. Anzitutto vediamo di quali librerie software abbiamo bisogno.
Esistono diverse librerie che possono essere utilizzate per creare reti mesh con ESP32. Una delle librerie più popolari è painlessMesh. Questa libreria è facile da usare e offre una vasta gamma di funzionalità.
A livello operativo, pur avendo risolto il node della libreria, rimangono alcuni passaggi da risolvere:
1 - Installare la libreria painlessMesh.
2 - Programmare ogni dispositivo ESP32 con il codice per creare una rete mesh.
3 - Accendere i dispositivi ESP32.
4 - Una volta che i dispositivi ESP32 saranno accesi, si connetteranno tra loro automaticamente per formare la rete mesh.
In Robotdazero poniamo sempre un forte accento sulle applicazioni ambientali e anche in questo caso abbiamo pensato a delle applicazioni pratiche per controllare e combattere (almeno a livello di informazione) i danni dell’inquinamento.
Le reti mesh possono essere utilizzate per monitorare i livelli di inquinamento, la qualità dell’aria e altri dati ambientali. Vediamo un esempio di partenza su come rilevare e condividere valori ambientali:
Ecco un programma C++ per effettuare il monitoraggio ambientale con le reti mesh per ESP32:
#include <painlessMesh.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Definizione dei parametri della rete mesh
#define MESH_SSID "my-mesh-network"
#define MESH_PASSWORD "my-mesh-password"
#define MESH_PORT 5555
// Definizione dei parametri del sensore
#define SEALEVELPRESSURE_HPA 1013.25
// Crea un oggetto mesh
Mesh mesh;
// Crea un oggetto sensore BME280
Adafruit_BME280 bme;
// Funzione per inizializzare il sensore BME280
void initSensor() {
// Inizializza la comunicazione I2C
Wire.begin();
// Inizializza il sensore BME280
bme.begin(0x76);
}
// Funzione per acquisire i dati dal sensore BME280
void readSensor() {
// Acquisisce la temperatura
float temperature = bme.readTemperature();
// Acquisisce la umidità
float humidity = bme.readHumidity();
// Acquisisce la pressione
float pressure = bme.readPressure() / SEALEVELPRESSURE_HPA;
// Stampa i dati acquisiti
Serial.println("Temperatura: " + String(temperature) + " °C");
Serial.println("Umidità: " + String(humidity) + "%");
Serial.println("Pressione: " + String(pressure) + " hPa");
}
// Funzione per inviare i dati al nodo gateway
void sendData() {
// Crea un messaggio
String message = String(temperature) + "," + String(humidity) + "," + String(pressure);
// Invia il messaggio al nodo gateway
mesh.sendBroadcast(message);
}
// Funzione per eseguire il loop principale
void loop() {
// Verifica se il dispositivo è connesso alla rete mesh
if (!mesh.isConnected()) {
// Tenta di connettersi alla rete mesh
mesh.connect(MESH_SSID, MESH_PASSWORD, MESH_PORT);
}
// Acquisisce i dati dal sensore BME280
readSensor();
// Invia i dati al nodo gateway
sendData();
// Attende 1 secondo prima di eseguire il loop successivo
delay(1000);
}
// Funzione per inizializzare la rete mesh
void setup() {
// Inizializza la seriale
Serial.begin(115200);
// Inizializza il sensore BME280
initSensor();
// Inizializza la rete mesh
mesh.init(MESH_SSID, MESH_PASSWORD, MESH_PORT);
// Imposta il dispositivo come nodo router
mesh.setRouter(true);
// Imposta il dispositivo come nodo gateway
mesh.setRoot();
}
La fase di setup inizializza la seriale, il sensore BME280 e la rete mesh. La funzione loop, molto semplice, acquisisce i dati dal sensore BME280 e li invia i dati al nodo gateway.
Quindi attende 1 secondo prima di eseguire il loop successivo. Per utilizzare questo programma, è necessario collegare un sensore BME280 al dispositivo ESP32. Il sensore BME280 è un sensore ambientale che misura la temperatura, l’umidità e la pressione. Quando il programma “entra a regime”, l’ESP32 acquisisce i dati dal sensore li invia al gateway e il nodo gateway può a sua volta inviare ad una app come la nostra “Kaspian” per visualizzare i dati acquisiti.
Temperatura: 22.5 °C Umidità: 45% Pressione: 1013.25 hPa
Le reti mesh per ESP32 risolvono in economia il difficile problema di rilevare dati su una zona geografica estesa come potrebbe essere un terreno agricolo e sono una valida alternative alle schede LoRa per la tramissione di dati in formato Json.
Robotdazero.it - post - R.118.2.3.2