Quelle est la bonne façon pour un appareil IoT de recevoir ses paramètres réseau?


15

Je suis en train de construire un appareil IoT en utilisant ESP8266. L'appareil contiendra éventuellement quelques moteurs, et je voudrais contrôler ces moteurs à l'aide de MQTT. Je voudrais rendre l'appareil aussi bon marché que possible, donc je voudrais éviter des choses comme les écrans et les claviers.

Ainsi, lorsque l'appareil est tourné, il est censé se connecter au WiFi local, puis à un courtier MQTT. Mais comment connaît-il le SSID local auquel se connecter et qu'en est-il du nom d'utilisateur et du mot de passe? Étant donné que l'appareil n'a ni écran ni clavier, il n'y a aucun moyen de saisir ces éléments. Et comment l'utilisateur sait-il si l'appareil a pu se connecter ou non? Pour le dépannage, ce serait bien si l'appareil avait au moins un moyen d'indiquer quel pourrait être le problème.

La solution à laquelle j'ai pensé est d'avoir un bouton et une LED sur l'appareil. Le bouton serait marqué "config" ou similaire. Lorsque le bouton est enfoncé, l'appareil commencera à fonctionner comme un point d'accès WiFi avec un SSID prédéfini. Il aura un serveur Web, afin que l'utilisateur puisse se connecter avec un ordinateur portable ou un téléphone à ce point d'accès prédéfini et entrer les paramètres du réseau local (SSID, nom d'utilisateur et mot de passe) ainsi que l'adresse du courtier MQTT. La LED sera utilisée pour indiquer le mode de fonctionnement et également comme indication d'erreur. Par exemple, lorsque la LED est allumée en continu, tout est connecté, des clignotements longs signifient qu'elle est en mode de configuration, des clignotements courts signifient qu'il y a une erreur ou quelque chose de similaire.

Ma question est la suivante: la solution que j'ai proposée est-elle une manière standard de faire les choses en ce qui concerne ce problème? C'est-à-dire que cela ressemblera à un flux familier à l'utilisateur, ou une autre façon serait-elle meilleure? Après avoir fait un peu de recherche, j'ai trouvé par exemple ceci , qui semble être un flux d'utilisateurs similaire. Seriez-vous toujours intéressé à savoir quelle expérience vous en avez et à savoir comment vous le résoudriez?

S'il s'avère que c'est un bon et utile moyen de résoudre ce problème, et puisqu'il s'agit d'une sorte de solution générique, il serait bien de ne pas trop réinventer la roue. Je pense qu'il pourrait y avoir une bibliothèque qui pourrait faire tout cela. La bibliothèque serait configurée avec la broche d'entrée pour le bouton et la broche de sortie pour la LED, puis s'occuperait du reste. Il pourrait être construit sur la bibliothèque PubSubClient et basé sur le tutoriel ESP8266: Connexion au courtier MQTT . Y a-t-il donc une bibliothèque qui fait ceci ou quelque chose de similaire? Sinon, je vais essayer de créer le mien, mais j'aimerais d'abord savoir ce qui existe.

Merci!

Réponses:


14

Ce que vous décrivez est en fait une façon assez courante (la plus courante?) De résoudre le problème de l'intégration des appareils WiFi IoT dans votre réseau local.

Par exemple, d'après mon expérience, les appareils Amazon Echo sont configurés de cette façon ou une variété de commutateurs intelligents / prises intelligentes (par exemple, les appareils Shelly ).

Selon vos besoins, vous pourrez également vous en sortir sans la LED et le bouton.
Voici une solution avec des détails techniques qui tentera de se connecter au réseau configuré et en cas d'échec, ouvrir un point d'accès pour la configuration.
Et voici une deuxième implémentation utilisant un portail captif en mode AP.

La mise en œuvre de la partie MQTT PubSub et du bouton et de la LED dans le croquis respectif devrait être assez simple.

Alternatives:
Pour des alternatives possibles à l'utilisation du mode AP pour la configuration, veuillez consulter les techniques de Wi-Fi Protected Setup (WPS) et du Device Provisioning Protocol .


Merci pour une très bonne réponse! La bibliothèque WifiManager de votre deuxième lien semble être exactement ce que je recherche. Je vais essayer et voir si je l'aime. Sinon, je vais utiliser les informations du premier lien pour créer ma propre solution ...
Mikael Lindqvist

1
Oh ... Et voici un ajout qui ajoute également la partie MQTT: github.com/dreed47/WifiMQTTManager
Mikael Lindqvist

3

Il y a aussi le projet luftdaten.info qui est un capteur de particules open source avec son propre firmware. Ils font une chose similaire à ce que vous avez proposé, mais sans le bouton de configuration. Ils le font, en démarrant le serveur Web par défaut, lorsque l'appareil est allumé. Après un certain seuil (je pense que cela se situe entre 3 et 10 minutes), le serveur Web interne sera arrêté - donc plus de configuration n'est possible avant le prochain cycle d'alimentation.

Cette solution peut être trop peu sûre pour certains scénarios, mais vous voudrez peut-être tout de même en savoir plus.

Éditer:

Pour obtenir la configuration initiale dans l'appareil, la procédure suivante est en place:

Lorsque l'appareil est démarré, il essaie d'atteindre le WLAN configuré (il n'y a pas de WLAN configuré au premier démarrage). S'il ne parvient pas à se connecter au WLAN préconfiguré, il définit une adresse IP statique et s'étend sur son propre réseau sans fil sans mot de passe, où l'on peut se connecter et effectuer la configuration initiale via l'adresse IP statique.


3
Le simple démarrage d'un serveur Web ne résout pas le problème de la façon de transmettre le SSID / mot de passe du réseau wifi à l'appareil pour le récupérer sur le réseau.
hardillb

1
@hardillb True, jetez un œil à luftdaten.info pour plus de détails . Lorsque l'appareil est démarré, il essaie d'atteindre le WLAN configuré (il n'y a pas de WLAN configuré au premier démarrage). S'il ne parvient pas à se connecter au WLAN préconfiguré, il définit une adresse IP statique et s'étend sur son propre réseau sans fil sans mot de passe, où l'on peut se connecter et effectuer la configuration initiale via l'adresse IP statique.
Jens Kohl
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.