Je voulais jouer avec MQTT depuis un certain temps maintenant, et j’ai finalement décidé de sauter le pas un soir de la semaine dernière. J’avais trois capteurs de température et d’humidité à la maison bon marché et j’étais gêné qu’ils ne soient souvent pas d’accord. Étonnamment, alors que l’analogique avait un réglage de calibrage à l’arrière, je ne sais pas comment calibrer les deux numériques. J’ai pris cela comme un signe qu’il était temps d’apprendre MQTT et de pouvoir installer mes propres capteurs précis. Bien sûr, j’ai commencé par commander les capteurs les moins chers que j’ai pu trouver, mais je peux toujours mettre à niveau plus tard.

Trois capteurs bon marché

Bien que nous ayons beaucoup écrit sur MQTT dans Hackaday, j’ai dû remonter jusqu’en 2016 pour trouver cette série introductive en quatre parties d’Elliot Williams. Cinq ans, c’est long dans le monde de la technologie, mais j’ai quand même décidé de l’essayer.

Construire un courtier

Le premier article a parfaitement fonctionné, même si au lieu d’un Raspberry Pi, j’ai utilisé un vieux bureau que ma femme était sur le point de jeter. Après avoir effacé Windows, doublé la RAM et installé Debian, j’avais une nouvelle machine de laboratoire opérationnelle. J’ai installé le mosquitto paquets des référentiels standard, et les a utilisés sans problèmes à suivre avec cet article (j’ai aussi brièvement testé sur une machine Ubuntu et Mac). L’installation est aussi simple que:

  • Debian et Ubuntu
    • sudo apt install mosquitto
    • sudo apt install mosquitto-clients
  • MacOS

Nœuds en réseau

Le problème a commencé avec le deuxième article. Elliot a utilisé un module ESP-8266 et NodeMCU. J’avais voulu essayer NodeMCU, alors j’ai plongé en avant. Bien que je n’avais pas de modules 8266 sous la main, j’avais un module ESP32 DevKitC. Dans le passé, j’ai évoqué ces modules et des modules similaires exécutant GRBL, Micropython et bare metal – «À quel point cela pourrait-il être difficile?», Me suis-je dit.

Eh bien, en fait, cela s’est avéré assez difficile. J’ai commencé à créer des images personnalisées NodeMCU en ligne, j’ai pu faire le esptool.py parler et programmer mon tableau. Mais essayez comme je pourrais, et j’ai essayé pendant des heures, je ne pouvais pas faire démarrer ma carte sans erreurs. La carte a programmé et haché correctement, mais a toujours donné des erreurs au démarrage. J’ai lu de nombreux rapports similaires d’utilisateurs en ligne, donc au moins je ne suis pas seul dans mon problème dans ma frustration.

J’ai contacté quelques programmeurs professionnels et le conseil que j’ai reçu était de passer à autre chose. Ils ont suggéré que NodeMCU était obsolète et n’étaient pas surpris que j’aie des difficultés. Je suis convaincu que j’aurais pu éventuellement faire fonctionner NodeMCU – les preuves indiquent un problème de démarrage matériel (broche d’E / S ou paramètre), l’image en ligne était chargée à la mauvaise adresse, ou c’était tout simplement faux. Mais après tant d’heures perdues, je voulais expérimenter MQTT, pas devenir un expert NodeMCU.

Ayant déjà utilisé Micropython et voyant qu’il y avait un module MQTT que je pouvais simplement importer, j’ai décidé d’adopter cette approche. La configuration de la chaîne d’outils est un peu compliquée, mais les instructions du référentiel Micropython Github étaient assez faciles à suivre.

Des informations sur le serveur MQTT dans Micropython peuvent être trouvées ici, et j’ai trouvé ce tutoriel en deux parties en [boneskull] très utile aussi:

Une fois que tout était installé, je pouvais ouvrir une REPL et commencer la programmation. J’utilise généralement rshell lors de l’utilisation de Micropython sur des systèmes embarqués:

pip install rshell
rshell --editor nvim --port /dev/cu.usbserial-1410 --baud 115200

Si vous préférez vous connecter sans fil, il existe également la méthode WebREPL que j’ai testée et qui semble fonctionner correctement. Et bien sûr, vous pouvez simplement vous connecter avec un émulateur de terminal, mais l’enregistrement et l’édition de fichiers deviennent un problème.

J’ai créé mon nœud de capteur de démonstration dans le même sens que celui de l’article original. Voir ce référentiel Github qui contient le lecteur flash Micropython résultant. Copiez ceci sur votre tableau, en modifiant les détails MQTT et WiFi:

MOGI_ID = 'esp32a-mogi'
MOGI_BROKER = 'underdog.lan'
WIFI_SSID = 'Covid-19-Laboratory'
WIFI_PASSWORD = 'yourpasswordhere'

Entrez le REPL en utilisant rshell ou quelle que soit la méthode que vous préférez, et démarrez le nœud en exécutant mystation(). Une fois testé, vous pouvez faire un main.py fichier afin qu’il démarre automatiquement au démarrage si vous le souhaitez. (Noter: MOGI est le mot coréen pour moustique.)

Contrôle et clients

Je ne suis pas allé trop loin dans le troisième article de la série. J’ai trouvé quelques applications iOS qui fonctionnaient bien avec mon serveur hors de la boîte.

Puissance et confidentialité

Je pense que la viande de l’article final est toujours valable. Je n’ai pas encore mis mon nœud de capteur de test sur les batteries, je ne peux donc pas confirmer ces chiffres. Ce sera un projet pour un autre jour.

Dans l’ensemble, le matériel de base de la série originale d’Elliot est toujours d’actualité. Sans surprise, les détails du logiciel ont un peu changé au fil des ans. Plutôt que de me creuser dans un trou plus profond avec NodeMCU, j’ai changé et j’ai mis en place une démo similaire avec Micropython. Maintenant que je suis accro à MQTT, je vais bientôt approfondir les nœuds alimentés par batterie et les jolis affichages graphiques de données. Mon plan ultime est de pirater le réseau domotique de ma maison.