Le protocole MQTT
Le protocole MQTT
Chaque client MQTT a une connexion ouverte en permanence avec le broker. Si la
connexion s’arrête, le broker bufférise les messages et les émet dès que la
reconnexion avec le client est effectuée
Un « topic MQTT » est une chaîne de caractères qui peut posséder une hiérarchie de
niveaux séparés par le caractère « / ». Par exemple, une information de température
du salon pourrait être envoyée sur le topic « maison/salon/temperature » et la
température de la cuisine sur « maison/cuisine/temperature ».
Les messages envoyés peuvent être de toutes sortes mais ne peuvent excéder une taille de
256 Mo
Mqtt:QOS
QoS: En effet le publisher à la possibilité de définir la qualité de son
message. Trois niveaux sont possibles :
• Un message de QoS niveau 0 « At most once » sera délivré tout au plus une
fois. Ce qui signifie que le message est envoyé sans garantie de réception, (le
broker n’informe pas l’expéditeur qu’il l’a reçu et le message)
• Un message de QoS niveau 1 « At least once » sera livré au moins une fois.
Le client transmettra plusieurs fois s’il le faut jusqu’à ce que le Broker lui
confirme qu’il a était transmis sur le réseau.
• Un message de QoS niveau 2 « exactly once » sera obligatoirement
sauvegardé par l’émetteur et le transmettra toujours tant que le récepteur ne
confirme pas son envoi sur le réseau. La principale différence étant que
l’émetteur utilise une phase de reconnaissance plus sophistiquée avec le
broker pour éviter une duplication des messages (plus lent mais plus sûr)
COMMUNICATION ESP32-RASPBERRY
Broker
subscribe
publish
COMMUNICATION ESP32-RASPBERRY
Activation de wifi sur la carte esp32
Bibliothèque « WiFi.h » permet à la carte esp32 de se connecter au wifi
local. Pour l'ESP32 nous utilisons la bibliothèque WiFi
Configurer la carte esp32
Le PubSubClient permet au microcontrôleur ESP8266 ou ESP32 d'être un « publisher »
Les moyens de communication de l’IoT
Paramètre Configuration
MQTT Server @IP de serveur
MQTT Topic home/temperature
home/humidity
MQTT username EA
MQTT password EA2021
MQTT client ID EA_test
WiFi SSID Nom de réseau
WiFi password Mot de passe de réseau
COMMUNICATION ESP32-RASPBERRY
Paramètre Configuration
MQTT Server @IP de serveur
MQTT Topic home/temperature
home/humidity
MQTT username EA
MQTT password EA2021
MQTT client ID EA_test
WiFi SSID Nom de réseau
WiFi password Mot de passe de réseau
COMMUNICATION ESP32-RASPBERRY
Installation de Broker Mosquitto surla carte Raspberry Pi
Installation de MQTT broker/server
sudo apt-get install mosquitto
Configuration de mosquitto
sudo gedit /etc/mosquitto/[Link]
Modification de fichier de configuration par défaut :
Le broker ne doit inclure que les paramètres par défaut. Cela se fait en
commentant la ligne où le fichier conf.d est inclus.
Nous ne voulons pas que des utilisateurs anonymes se connectent au broker
MQTT : allow_anonymous false
Nous voulons enregistrer les mots de passe dans un fichier séparé :
password_file /etc/mosquitto/pwfile
Le broker MQTT doit être accessible sur le port 1883: listener 1883
COMMUNICATION ESP32-RASPBERRY
Username= nom
d’utulisateur dans
notre cas on a choisis
Création d’un nouveau utilisateur « EA »
sudo mosquitto_passwd -c /etc/mosquitto/pwfile username
Username: EA
Password: EA2021
sudo pip install paho-mqtt
COMMUNICATION ESP32-RASPBERRY
def on_connect(client, userdata, flags, rc):
""" The callback for when the client receives a CONNACK
response from the server."""
print('Connected with result code ' + str(rc))
[Link](MQTT_TOPIC)
Appelé lorsque le courtier répond à une demande de connexion.
mqtt_client.on_connect = on_connect
0: Connection successful
1: Connection refused – incorrect protocol
version
2: Connection refused – invalid client
identifier
3: Connection refused – server unavailable
4: Connection refused – bad username or
password
5: Connection refused – not authorised
[Link]
COMMUNICATION ESP32-RASPBERRY
def on_message(client, userdata, msg):
print([Link] + ' ' + str([Link]))
Appelé lorsqu'un message a été reçu sur un sujet auquel le client
est abonné
mqtt_client.on_message = on_message
COMMUNICATION ESP32-RASPBERRY
mqtt_client.connect(MQTT_ADDRESS, 1883)
Lorsque le client reçoit un message CONNACK du courtier en réponse à la
connexion, il génère un rappel on_connect().