Qual è un buon modo per un dispositivo IoT di ricevere le sue impostazioni di rete?


15

Sto costruendo un dispositivo IoT usando ESP8266. Il dispositivo alla fine conterrà un paio di motori e vorrei controllarli usando MQTT. Vorrei rendere il dispositivo il più economico possibile, quindi vorrei evitare cose come display e tastiere.

Quindi, quando il dispositivo viene acceso, dovrebbe connettersi al WiFi locale e quindi a un broker MQTT. Ma come fa a sapere dell'SSID locale a cui connettersi e che ne è di nome utente e password? Dal momento che il dispositivo non ha display o tastiera, non c'è modo di inserire queste cose. E come fa l'utente a sapere se il dispositivo è stato in grado di connettersi o meno? Per la risoluzione dei problemi, sarebbe bello se il dispositivo avesse almeno un modo per indicare quale potrebbe essere il problema.

La soluzione a cui ho pensato è di avere un pulsante e un LED sul dispositivo. Il pulsante sarebbe contrassegnato come "config" o simile. Quando si preme il pulsante, il dispositivo inizierà a funzionare come un punto di accesso WiFi con un SSID predefinito. Avrà un server web, quindi l'utente può connettersi con un laptop o un telefono a questo punto di accesso predefinito e inserire le impostazioni della rete locale (SSID, nome utente e password), nonché l'indirizzo per il broker MQTT. Il LED verrà utilizzato per indicare la modalità di funzionamento e anche come indicazione di errore. Ad esempio, quando il LED è acceso fisso tutto è collegato, lampeggi lunghi indicano che è in modalità config, lampeggi brevi indicano che c'è un errore o qualcosa di simile.

La mia domanda è: la soluzione che ho proposto è un modo standard di fare le cose quando si tratta di questo problema? Vale a dire che sembrerà un flusso familiare all'utente o sarebbe meglio in qualche altro modo? Dopo aver fatto un po 'di ricerca, ho trovato ad esempio questo , che sembra essere un flusso utente simile. Sarebbe comunque interessato a sentire quale esperienza hai di questo e sentire come lo risolveresti?

Se si scopre che questo è un modo buono e utile per risolvere questo problema, e poiché è una specie di soluzione generica, sarebbe bello non reinventare troppo la ruota. Sto pensando che potrebbe esserci una biblioteca in grado di fare tutto questo. La libreria verrebbe configurata con il pin di input per il pulsante e il pin di output per il LED, quindi si occuperà del resto. Potrebbe essere basato sulla libreria PubSubClient e basato sul tutorial ESP8266: Connessione al broker MQTT . Quindi c'è una biblioteca che fa questo o qualcosa di simile? Altrimenti prenderò una pugnalata e creerò la mia, ma vorrei sapere cosa c'è prima.

Grazie!

Risposte:


14

Quello che descrivi è in realtà un modo abbastanza comune (il più comune?) Per risolvere il problema dell'integrazione dei dispositivi WiFi IoT nella tua LAN locale.

Ad esempio, dalla mia esperienza, i dispositivi Amazon Echo sono configurati in questo modo o in una varietà di switch / smart plug intelligenti (ad esempio dispositivi Shelly ).

A seconda delle tue esigenze, potresti anche scappare senza il LED e il pulsante.
Ecco una soluzione con dettagli tecnici che proverà a connettersi alla rete configurata e, in caso contrario, aprire un punto di accesso per la configurazione.
E qui una seconda implementazione che utilizza un portale captive in modalità AP.

L'implementazione della parte MQTT PubSub e il pulsante e il LED nel rispettivo schizzo dovrebbero essere abbastanza semplici.

Alternative:
per possibili alternative all'uso della modalità AP per la configurazione, dai un'occhiata alle tecniche di Wi-Fi Protected Setup (WPS) e Device Provisioning Protocol .


Grazie per un'ottima risposta! La libreria WifiManager nel tuo secondo link sembra essere esattamente quello che sto cercando. Ci proverò e vedrò se lo adoro. In caso contrario, userò le informazioni nel primo link per creare la mia soluzione ...
Mikael Lindqvist

1
Oh ... Ed ecco un'aggiunta che aggiunge anche la parte MQTT: github.com/dreed47/WifiMQTTManager
Mikael Lindqvist

3

C'è anche il progetto luftdaten.info che è un sensore di particelle open source con un proprio firmware. Fanno una cosa simile a quella che hai proposto, solo senza il pulsante di configurazione. Lo fanno, avviando il web server per impostazione predefinita, quando il dispositivo è acceso. Dopo una certa soglia (penso che sia da qualche parte tra 3-10 minuti), il web server interno verrà spento - quindi non sarà più possibile eseguire alcuna configurazione fino al prossimo ciclo di accensione.

Questa soluzione potrebbe essere troppo insicura per alcuni scenari, ma potresti voler sapere comunque.

Modificare:

Per ottenere la configurazione iniziale nel dispositivo, è in atto la seguente procedura:

Quando il dispositivo viene avviato, tenta di raggiungere la WLAN configurata (non vi è alcuna WLAN configurata al primo avvio). Se non riesce a connettersi alla WLAN preconfigurata, imposta un IP statico e si estende sulla propria rete wireless senza una password, dove è possibile connettersi e fare la configurazione iniziale tramite l'indirizzo IP statico.


3
L'avvio di un server Web non risolve il problema di come passare il SSID / password per la rete wifi al dispositivo per farlo effettivamente sulla rete.
Hardillb

1
@hardillb Vero, dai un'occhiata a luftdaten.info per maggiori dettagli . Quando il dispositivo viene avviato, tenta di raggiungere la WLAN configurata (non vi è alcuna WLAN configurata al primo avvio). Se non riesce a connettersi alla WLAN preconfigurata, imposta un IP statico e si estende sulla propria rete wireless senza una password, dove è possibile connettersi e fare la configurazione iniziale tramite l'indirizzo IP statico.
Jens Kohl,
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.