Nodo radice rete mesh ESP8266


11

Sto lavorando su una rete mesh basata su ESP8266 e tutto sembra funzionare bene usando il codice di esempio di EasyMesh di Coopdis . Nel suo esempio, 3 ESP8266 si registrano nella mesh e servono una semplice interfaccia web. Questo funziona perfettamente anche per me.

Nella mia soluzione, tuttavia, ho bisogno di uno di questi nodi per essere connesso a Internet in modo che l'intera Mesh possa accedervi (o almeno è possibile accedere alla mesh). Questo è anche menzionato nella Documentazione ESP8266 Mesh User Guide (pagina 4) di Espressif . Ho anche trovato un paio di altri documenti che pubblicano tutti parlando di questo in quanto è normale, ma senza alcun codice di esempio che potrei facilmente capire.

Come configuro la mesh per connettermi anche a un router. È semplice come utilizzare lo stesso SSID e la stessa chiave Pass per la rete mesh che sto usando sul mio router Wi-Fi o devo fare qualcosa come un Raspberry Pi parte della rete Wi-Fi che può quindi essere connessa al mio router tramite la connessione Ethernet? Non penso che quest'ultimo dovrebbe essere richiesto dalla ricerca che ho fatto però.

Ho bisogno del codice di esempio ciao mondo per questo. I comandi AT non mi aiuteranno, credo.


1
Per quanto riguarda l'esempio dei 3 nodi, hai installato e in esecuzione anche un'interfaccia web, come quella al telefono in questo video ?
Bence Kaulics,

1
@BenceKaulics Non l'ho testato in modo specifico da quando l'ho fatto prima e questo non è un problema per me. Perché lo chiedi? Stavo pensando che questa potrebbe essere un'opzione di fallback in cui un "Server" potrebbe semplicemente accedere alla rete Mesh tramite chiamate REST ospitate sulla mesh, ma sono incuriosito dall'opzione ROOT NODE, che suona come l'architettura corretta (IMHO).
Gineer,

1
Vedo. Pensavo lo stesso che potesse essere un'opzione alternativa per accedere alla tua rete. Non suggerendo però come soluzione, quindi solo un commento di cosa si trattasse. Non sapevo che ci avessi già pensato. ;)
Bence Kaulics il

Risposte:


6

Un'altra opzione per semplificare la mesh è utilizzare PainlessMesh di BlackEdder e introdurre lì un ponte per il trasferimento dei dati nel mondo esterno.

Si è verificato un problema durante la connessione ad un'altra rete da una mesh in indolore Gitlab mesh che spiega quattro diverse soluzioni. Le soluzioni potrebbero funzionare anche in easyMesh, perché il problema è stato inizialmente sollevato lì, ma sicuramente in PainlessMesh.

Li ho esaminati e le soluzioni più funzionanti necessitavano di entrambi i dispositivi extra sulla rete per gestire la connessione effettiva alla rete esterna.

Il primo introdurrebbe il quarto esp8266 per il tuo progetto. Sarebbe collegato a Internet e comunicare con uno dei tuoi nodi tramite connessione seriale.

Un altro sarebbe utilizzare un dispositivo Raspberry PI per raccogliere i dati e connettersi con un'altra scheda wifi ad altra rete.

Gli altri due non erano buoni, uno era scoraggiato dall'autore e l'altro così complicato e limitato con esp8266 che non avrei provato.

Tutta la guida in gitlab .


5

Modificherei un po 'l'implementazione esistente di EasyMesh, poiché al momento non sembra implementare ruoli di nodo. Ogni nodo è uguale e possono costruire connessioni solo tra loro. Come vedo, non c'è modo di aggiungere un server alle loro tabelle di routing né di contrassegnare un record di connessione specifico nelle tabelle con connettività a un server.

I nodi utilizzano un elenco di connessioni per l'instradamento / inoltro dei messaggi. Ciò di cui hai bisogno è un nodo che ha un record di connessione per il server, questo è il nodo principale.

Ora, attualmente quando viene alimentato un nodo, scansionerà gli AP disponibili (Access Point), filtrerà quelli che non iniziano con il prefisso mesh e quindi si connetterà all'AP con il miglior RSSI. Inoltre ogni nodo crea il proprio AP con un prefisso mesh nome + ID chip univoco nodo .

Se nessun altro nodo è disponibile, semplicemente aspetterà che gli altri si connettano. E questo è il primo punto in cui dovrebbero essere applicate le modifiche. È possibile codificare o rendere in qualche modo configurabile un AP univoco con un nome come prefisso mesh + "Server" e se nessun altro AP EasyMesh è disponibile, il nodo dovrebbe connettersi a questo AP e memorizzare un meshConnectionTypeoggetto predefinito nel suo elenco di connessioni.

L'oggetto archiviato non sarà determinato dallo scambio di messaggi tra il server e il nodo ma può essere un valore fisso, ad eccezione del espconncampo. Quello dovrebbe essere acquisito come negli altri casi. Nella seguente struttura avrai solo bisogno della prima variabile membro.

struct meshConnectionType {
    espconn             *esp_conn;
    uint32_t            chipId = 0;
    String              subConnections;
    timeSync            time;
    uint32_t            lastRecieved = 0;
    bool                newConnection = true;

    (...)
};

Il chipIdsarà l'indirizzo del server nella rete mesh. È necessario scegliere un valore che non può essere un ID chip ESP8266.

Quindi in pratica il primo nodo ad accendersi nella tua rete sarà il nodo "root". Se altri nodi desiderano inviare messaggi al server, il messaggio verrà inviato al nodo "root" in base ai record di connessione diretta (chiamati sub-connessioni nel codice).

Il nodo "root" scoprirà quindi che ha una connessione diretta al server (al router / internet) e poiché è un messaggio al server che dovrebbe inoltrare questo messaggio in un altro modo (non in un modo simile a una mesh) . Ovviamente qui sono necessarie ulteriori informazioni come l'indirizzo IP del server e la porta utilizzata, ad esempio. Anche questi dovrebbero essere memorizzati nel nodo (su ogni nodo) per impostazione predefinita o con un metodo di configurazione.

Quindi, infine, il nodo "root" invierà un messaggio IP al server, questo dovrebbe essere implementato di nuovo da te.


TL; DR; Conclusione:

  • Dovrebbe esserci un AP server e il primo nodo (solo il primo nodo da accendere) dovrebbe connettersi ad esso, questo sarà il nodo principale.
  • Il server dovrebbe avere un indirizzo ( destId) che verrà utilizzato nella rete mesh quando si inviano messaggi al server. Queste informazioni dovrebbero essere disponibili per tutti i nodi per impostazione predefinita.
  • Il nodo principale dovrebbe sapere che è collegato "direttamente" al server / Internet. Ciò può essere ottenuto aggiungendo un record di connessione con il server destIdall'elenco delle connessioni del nodo radice.
  • Il nodo principale, sapendo che è connesso al server, può inoltrare i messaggi in modo appropriato via Internet.

Questa è solo un'idea teorica che mi viene in mente leggendo l'implementazione di EasyMesh. Potrei aver perso alcuni fatti importanti che renderebbero questo compito difficile o impossibile da attuare. Inoltre, potrebbe non essere il modo più efficiente per risolvere il problema. Non sono un esperto di reti mesh.

Avere un nodo radice nella rete chiede "Cosa succede se la radice viene disconnessa? Come verrà scelta una nuova radice?".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.