Internet des Objets (IdO) pour Rasberry PI

Une question, un problème ou une suggestion, n'hésitez pas : un petit mail

Retour à Raspberry PI

Applications de l'Internet des Objets (IdO) utilisant un serveur MQTT Mosquitto sur la Raspberry PI :

- Installation du serveur MQTT sur Raspberry PI,

- Horloge MQTT avec Sense Hat de l'Astro PI,

- Serveur méteo avec capteurs basés sur des ESP8266.

MQTT

Iot_002.gif

MQTT (à l'origine Message Queuing Telemetry Transport) est un protocole d'échange de messages sur TCP/IP. Il est léger d'où son utilisation dans l'Internet des Objets (IoT).

Il utilise un brocker pour la gestion des messages (ici installé sur une Raspberry PI), et un certain nombre de clients qui peuvent soit écouter (Listener), soit publier (Publisher) soit les deux.

Les messages sont constitués d'un canal (Topic) et d'un corps de message (Payload).

Installation du broker MQTT
sur une Raspberry PI

Iot_003.gif

Avec Bookworm, dans Add/Remove Software chercher "mosquitto" et sélectionner "MQTT version 5.0/3.1.1/3.1 compatible message broker". J'ai utilisé "mosquitto-2.0.11-1.2".

Pour tester, dans un LXTerminal taper mosquitto_sub -h localhost -v -t "\$SYS/#" puis Ctl^C puis mosquitto_sub -h localhost -v -t "#" &

Dans un second LXterminal taper mosquitto_pub -h localhost -t test/topic -m "My first hello world for Mosquitto" et vous devriez voir sur le premier terminal "test/topic My first hello world for Mosquitto".

Pour pouvoir effectuer des connections annonymes, il faut modifier le ficher de configuration avec sudo nano /etc/mosquitto/mosquitto.conf et ajouter à la fin :

# Listen for messages from clients on remote machines
listener 1883
# Allow anonymous pub/sub, allow_anonymous is false by default
allow_anonymous true
# Require client user/password authentication
#password_file /etc/mosquitto/passwd

L'image donne une idée du trafic sur mon réseau (avec les messages pour l'heure, la pression et les température+humidité).

Pour utiliser MQTT avec des scripts Python, ne pas oublier d'installer la couche paho (avec le bureau : MQTT client class (Python3) python3-paho.mqtt-1.6.1-1)

Serveur de temps avec la Raspberry

Iot_004.gif

Mon serveur de temps utilise le canal "Heure" du serveur MQTT. Chaque minute, l'heure est publiée sous la forme "hh:mm".

Sur l'image, vous trouverez le script python (cliquer dessus pour accéder au source) qui est excécuté périodiquement par le planificateur de tâche de la Raspberry.

Il suffit de lancer la commande sudo crontab -e et d'ajouter à la fin du fichier la ligne :

* * * * * python3 /home/WhereYouHavePutTheFile/publisher_time.py

Horloge avec le Hat de l'AstroPI

Iot_005.jpg

Iot_006.gif

Pour afficher l'heure, j'ai utilisé une Raspebrry PI avec le Hat de l'AstroPI qui a un afficheur de 8x8 leds et un boitier transparent.

Sur l'image, vous trouverez le script python (cliquer dessus pour accéder au source) et qui écoute le canal "Heure" du serveur MQTT et qui l'affiche sur le Hat.

Il écoute aussi le canal "Info" que j'utilise pour afficher quelques informations au boot de la Raspberry.

En bas, cliquez sur l'image pour voir une petite vidéo de l'affichage.

Serveur Méteo

Iot_008.gif

Iot_009.gif

Iot_010.jpg

Ce projet rassemble un certain nombre de capteurs (chez moi 6 capteurs de température/humidité et un capteur de pression) qui envoient leur données via MQTT à la Raspberry.


La Rasberry les compile et génère une page web à laquelle il est possible d'accéder (via le serveur Apache) par un PC, un smartphone et même un petit boitier ESP32.

La page web contient les courbes de température, humidité et pression du jour courant et de la veille ainsi que les dernières mesures faites.


En option, on peut recevoir les courbes par email. Je l'ai programmé pour les recevoir une fois par jour.


- En haut, la page web générée (cliquer pour la voir complètement)

- Au milieu, un snapshot de l'écran de mon smartphone affichant cette même page,

- En bas, une photo de l'écran de mon boitier domotique basé sur un ESP32 (boitier AZ-Touch acheté chez AZ-Delivery).

Ce projet est maintenant terminé, si vous voulez plus de détails que ceux ci-dessous, écrivez moi !

Senseur température et humidité

Iot_001.jpg

Les senseurs de température et d'humidité sont basés sur un capteur AM2322 et un micro-contôleur ESP-12E (de la famille ESP8286).

Une page spécifique pour le circuit imprimé et le programme arrive bientôt.

J'en ai fabriqué une dizaine que j'ai répartis dans la maison et un pour l'extérieur, ce dernier alimenté par 4 batteries NiMH).

Senseur de pression

Iot_005.jpg

Iot_012.jpg

Pour la pression atmosphérique, j'ai utilisé soit le senseur monté sur le Sense Hat de l'Astro PI (un LPS25HB) soit le même circuit qu'on peut acheter monté sous forme d'un petit module Pololu (référence 2867) connecté au bus I2C de la Raspberry (photo du bas).

Vous trouverez :

- ici le source Python pour le Sence Hat,

- ici celui pour le module Pololu.

Dans les deux cas, il faut lancer périodiquement le programme pour publier la pression sur le réseau MQTT.

Pour celà, lancer la commande sudo crontab -e et d'ajouter à la fin du fichier la ligne :

*/2 * * * * python3 /home/WhereYouHavePutTheFile/publisher_pressure.py

La compensation d'altitude (au-dessus du niveau de la mer) peut-être faite avec le logiciel ci-dessus.