¿Cuál es una buena manera para que un dispositivo IoT reciba su configuración de red?

15

Estoy en el proceso de construir un dispositivo IoT usando ESP8266. El dispositivo eventualmente contendrá un par de motores, y me gustaría controlar estos motores usando MQTT. Me gustaría hacer que el dispositivo sea lo más barato posible, por lo que me gustaría evitar cosas como pantallas y teclados.

Entonces, cuando se enciende el dispositivo, se supone que debe conectarse al WiFi local y luego a un agente MQTT. Pero, ¿cómo sabe sobre el SSID local para conectarse y qué pasa con el nombre de usuario y la contraseña? Como el dispositivo no tiene pantalla ni teclado, no hay forma de ingresar estas cosas. ¿Y cómo sabe el usuario si el dispositivo pudo conectarse o no? Para la resolución de problemas, sería bueno que el dispositivo al menos tuviera alguna forma de indicar cuál podría ser el problema.

La solución que he pensado es tener un botón y un LED en el dispositivo. El botón se marcaría "config" o similar. Cuando se presiona el botón, el dispositivo comenzará a funcionar como un punto de acceso WiFi con un SSID predefinido. Tendrá un servidor web, por lo que el usuario puede conectarse con una computadora portátil o teléfono a este punto de acceso predefinido e ingresar la configuración de la red local (SSID, nombre de usuario y contraseña), así como la dirección del agente MQTT. El LED se usará para indicar el modo de operación y también como indicación de error. Por ejemplo, cuando el LED se ilumina de manera constante, todo está conectado, los destellos largos significan que está en modo de configuración, los destellos cortos significan que hay un error o algo similar.

Mi pregunta es, ¿es la solución que he propuesto una forma estándar de hacer las cosas cuando se trata de este problema? Es decir, ¿se sentirá como un flujo familiar para el usuario, o sería mejor de alguna otra manera? Después de buscar un poco, he encontrado, por ejemplo , esto , que parece ser un flujo de usuario similar. ¿Todavía le interesaría saber qué experiencia tiene de esto y saber cómo lo resolvería?

Si resulta que esta es una forma buena y útil de resolver este problema, y ​​dado que es un tipo de solución genérica, sería bueno no reinventar demasiado la rueda. Estoy pensando que podría haber una biblioteca que pudiera hacer todo esto. La biblioteca se configuraría con el pin de entrada para el botón y el pin de salida para el LED, y luego se encargaría del resto. Podría construirse sobre la biblioteca PubSubClient y basarse en el tutorial ESP8266: Conexión al agente MQTT . Entonces, ¿hay una biblioteca que haga esto o algo similar? Si no, voy a apuñalar y crear el mío, pero me gustaría saber primero qué hay ahí fuera.

¡Gracias!

Mikael Lindqvist
fuente

Respuestas:

14

Lo que describe es en realidad una forma bastante común (¿la más común?) De resolver el problema de integrar dispositivos WiFi IoT en su LAN local.

Por ejemplo, desde mi experiencia, los dispositivos Amazon Echo se configuran de esta manera o una variedad de interruptores inteligentes / enchufes inteligentes (por ejemplo, dispositivos Shelly ).

Dependiendo de sus requisitos, también podría escapar sin el LED y el botón.
Aquí hay una solución con detalles técnicos que intentará conectarse a la red configurada y, si no tiene éxito, abrir un punto de acceso para la configuración.
Y aquí una segunda implementación usando un portal cautivo en modo AP.

La implementación de la parte MQTT PubSub y el botón y el LED en el boceto respectivo debe ser bastante sencilla.

Alternativas:
Para posibles alternativas al uso del modo AP para la configuración, eche un vistazo a las técnicas de Configuración protegida de Wi-Fi (WPS) y Protocolo de aprovisionamiento de dispositivos .

oh.dae.su
fuente
Gracias por una muy buena respuesta! La biblioteca WifiManager en su segundo enlace parece ser exactamente lo que estoy buscando. Lo intentaré y veré si me encanta. Si no, usaré la información en el primer enlace para crear mi propia solución ...
Mikael Lindqvist
1
Oh ... Y aquí hay una adición que agrega la parte MQTT también: github.com/dreed47/WifiMQTTManager
Mikael Lindqvist
3

También está el proyecto luftdaten.info , que es un sensor de partículas de código abierto con su propio firmware. Hacen algo similar a lo que propusiste, solo que sin el botón de configuración. Lo hacen, iniciando el servidor web por defecto, cuando el dispositivo está encendido. Después de un cierto umbral (creo que es entre 3 y 10 minutos), el servidor web interno se apagará, por lo que no es posible realizar más configuraciones hasta el próximo ciclo de encendido.

Esta solución puede ser demasiado insegura para ciertos escenarios, pero es posible que desee saber de todos modos.

Editar:

Para obtener la configuración inicial en el dispositivo, se aplica el siguiente procedimiento:

Cuando el dispositivo se inicia, intenta alcanzar la WLAN configurada (no hay una WLAN configurada en el primer inicio). Si no se conecta a la WLAN preconfigurada, establece una IP estática y abarca su propia red inalámbrica sin contraseña, donde uno puede conectarse y realizar la configuración inicial a través de la dirección IP estática.

Jens Kohl
fuente
3
El simple hecho de iniciar un servidor web no resuelve el problema de cómo pasar el SSID / Contraseña de la red wifi al dispositivo para obtenerlo realmente en la red.
hardillb
1
@hardillb Es cierto, eche un vistazo a luftdaten.info para obtener más detalles . Cuando el dispositivo se inicia, intenta alcanzar la WLAN configurada (no hay una WLAN configurada en el primer inicio). Si no se conecta a la WLAN preconfigurada, establece una IP estática y abarca su propia red inalámbrica sin contraseña, donde uno puede conectarse y realizar la configuración inicial a través de la dirección IP estática.
Jens Kohl