Qual é uma boa maneira de um dispositivo IoT receber suas configurações de rede?

15

Estou no processo de construção de um dispositivo IoT usando o ESP8266. O dispositivo acabará por conter alguns motores, e eu gostaria de controlar esses motores usando o MQTT. Gostaria de tornar o dispositivo o mais barato possível, para evitar coisas como monitores e teclados.

Portanto, quando o dispositivo é ligado, ele deve se conectar ao WiFi local e, em seguida, a um broker MQTT. Mas como ele sabe sobre o SSID local ao qual se conectar e sobre o nome de usuário e a senha? Como o dispositivo não possui tela ou teclado, não há como inserir essas coisas. E como o usuário sabe se o dispositivo conseguiu se conectar ou não? Para solução de problemas, seria bom se o dispositivo tivesse pelo menos alguma maneira de indicar qual poderia ser o problema.

A solução que eu pensei é ter um botão e um LED no dispositivo. O botão seria marcado como "config" ou similar. Quando o botão é pressionado, o dispositivo começará a operar como um ponto de acesso WiFi com um SSID predefinido. Ele terá um servidor da web, para que o usuário possa se conectar com um laptop ou telefone a esse ponto de acesso predefinido e inserir as configurações de rede local (SSID, nome de usuário e senha), bem como o endereço do broker MQTT. O LED será usado para indicar o modo de operação e também como indicação de erro. Por exemplo, quando o LED está brilhando constantemente, tudo está conectado, pisca longa significa que está no modo de configuração, pisca curta significa que há um erro ou algo semelhante.

Minha pergunta é: a solução que propus é uma maneira padrão de fazer as coisas quando se trata desse problema? Ou seja, parecerá um fluxo familiar para o usuário, ou seria de alguma outra maneira melhor? Depois de pesquisar um pouco, encontrei, por exemplo , isso , que parece ser um fluxo de usuário semelhante. Ainda estaria interessado em saber qual a experiência que você tem disso e como você resolveria isso?

Se for uma maneira boa e útil de resolver esse problema, e como é um tipo de solução genérica, seria bom não reinventar demais a roda. Estou pensando que poderia haver uma biblioteca que pudesse fazer tudo isso. A biblioteca seria configurada com o pino de entrada para o botão e o pino de saída para o LED e, então, cuidará do resto. Ele pode ser construído na biblioteca PubSubClient e com base no tutorial ESP8266: Conectando ao broker do MQTT . Então, existe uma biblioteca que faz isso ou algo semelhante? Caso contrário, vou dar uma facada e criar a minha, mas gostaria de ouvir sobre o que há por aí primeiro.

Obrigado!

Mikael Lindqvist
fonte

Respostas:

14

O que você descreve é ​​realmente uma maneira bastante comum (a mais comum?) De resolver o problema de integrar dispositivos WiFi IoT na sua LAN local.

Por exemplo, da minha experiência, os dispositivos Amazon Echo são configurados dessa maneira ou em uma variedade de comutadores / plugues inteligentes (por exemplo, dispositivos Shelly ).

Dependendo dos seus requisitos, você também pode fugir sem o LED e o botão.
Aqui está uma solução com detalhes técnicos que tentará se conectar à rede configurada e, se não for bem-sucedida, abra um ponto de acesso para configuração.
E aqui uma segunda implementação usando um portal cativo no modo AP.

A implementação da parte do MQTT PubSub e do botão e LED no respectivo esboço deve ser bastante direta.

Alternativas:
para possíveis alternativas ao uso do modo AP para configuração, consulte as técnicas de Wi-Fi Protected Setup (WPS) e o Device Provisioning Protocol .

oh.dae.su
fonte
Obrigado por uma resposta muito boa! A biblioteca WifiManager no seu segundo link parece ser exatamente o que estou procurando. Vou tentar e ver se eu amo. Se não, vou usar as informações no primeiro link para construir a minha própria solução ...
Mikael Lindqvist
1
Oh ... E aqui é uma adição que adiciona a parte MQTT bem: github.com/dreed47/WifiMQTTManager
Mikael Lindqvist
3

Há também o projeto luftdaten.info , que é um sensor de partículas de código aberto com seu próprio firmware. Eles fazem algo semelhante ao que você propôs, apenas sem o botão de configuração. Eles fazem isso, iniciando o servidor da Web por padrão, quando o dispositivo está ligado. Após um certo limite (acho que é algo entre 3 a 10 minutos), o servidor web interno será desligado - para que não seja possível mais configuração até o próximo ciclo de energia.

Essa solução pode ser muito insegura para certos cenários, mas você pode querer saber sobre isso.

Editar:

Para obter a configuração inicial no dispositivo, o seguinte procedimento está em vigor:

Quando o dispositivo é inicializado, ele tenta acessar a WLAN configurada (não há WLAN configurada na primeira inicialização). Se ele não conseguir se conectar à WLAN pré-configurada, ele define um IP estático e abrange sua própria rede sem fio sem uma senha, onde é possível conectar-se e fazer a configuração inicial através do endereço IP estático.

Jens Kohl
fonte
3
Iniciar um servidor da Web não resolve o problema de como passar o SSID / Senha da rede Wi-Fi para o dispositivo para realmente colocá-lo na rede.
hardillb
1
@hardillb É verdade, dê uma olhada no luftdaten.info para obter mais detalhes . Quando o dispositivo é inicializado, ele tenta acessar a WLAN configurada (não há WLAN configurada na primeira inicialização). Se ele não conseguir se conectar à WLAN pré-configurada, ele define um IP estático e abrange sua própria rede sem fio sem senha, onde é possível conectar-se e fazer a configuração inicial através do endereço IP estático.
Jens Kohl