Master Data Sciences 2025/2024
ISAEG
Atelier 9: Implémentation du Protocole CoAP avec
Python
Introduction
Cet atelier présente une implémentation simple du protocole CoAP en utilisant Python pour
lire la valeur de la temperature (générer aléatoirement). Le protocole CoAP est utilisé pour
envoyer ces données à un client à travers un réseau, dans un environnement IoT.
1. Installation des bibliothèques
Installer la bibliothèque Python aiocoap qui implémente le protocole CoAP (Constrained
Application Protocol).
pip install aiocoap
2. Création d’un serveur CoAP
Créer un serveur CoAP qui diffuse les mesures de temperatures en temps reel aux clients
CoAP.
a. Importation des bibliothèques nécessaires:
b. Création de la ressource Temperature: La classe TemperatureResource définit une
ressource CoAP appelée temperature.
— La méthode render_get() gère les requêtes GET (demande de lecture de la
ressource).
1
Master Data Sciences 2025/2024
ISAEG
— temperature = random.uniform(15.0, 30.0) : génère une température
aléatoire entre 15 et 30 degrés Celsius. Cela simule la lecture d'un capteur de
température.
— temp = f"Temperature: {temperature:.2f} °C" : Cette ligne formatte la
température en chaîne de caractères, avec deux décimales.
— return Message(payload=temp.encode('utf8')) : La méthode retourne un
message CoAP contenant la température au format UTF-8.
c. Configuration du serveur CoAP
— root = Site() : Crée un objet Site, qui est l'équivalent d'un serveur CoAP. Ce
serveur pourra gérer plusieurs ressources.
— root.add_resource(['temperature'], TemperatureResource()) :
Enregistre la ressource TemperatureResource sous l'URI /temperature. Cela
signifie que lorsqu'un client envoie une requête GET à
coap://localhost:5684/temperature, la méthode render_get de
TemperatureResource sera appelée.
— await Context.create_server_context(root, bind=('127.0.0.1',
5684)) : Crée un contexte CoAP pour le serveur. Le serveur écoute sur l'adresse
127.0.0.1 (localhost) et le port 5684.
— print("CoAP server running on coap://localhost:5684/temperature")
: Affiche un message dans la console pour indiquer que le serveur est opérationnel.
— await asyncio.sleep(3600) : L'instruction sleep permet au serveur de rester
en fonctionnement pendant 3600 secondes (soit 1 heure). Cela permet au serveur
de continuer à écouter et à traiter les requêtes pendant une période donnée.
d. Démarrage du serveur
e. Résumé du fonctionnement du code
Ce script crée un serveur CoAP simulant un capteur de température. Le serveur
expose une ressource /temperature qui répond à des requêtes GET avec une valeur de
2
Master Data Sciences 2025/2024
ISAEG
température aléatoire. Le serveur est lancé sur localhost (127.0.0.1) et écoute sur le
port 5684.
Chaque fois qu'un client CoAP envoie une requête GET à cette ressource, le serveur
génère une température aléatoire et la renvoie sous forme de message CoAP.
Le serveur continue de fonctionner pendant une heure (3600 secondes) avant de se
fermer.
f. Le code complet du serveur CoAP
3. Création d’un client CoAP
Une fois le serveur démarré, vous pouvez utiliser un client CoAP pour tester la
communication.
a. Importation des bibliothèques nécessaires:
3
Master Data Sciences 2025/2024
ISAEG
b. Configuration du client CoAP
— protocol = await Context.create_client_context() : Cette ligne crée un
contexte client CoAP qui est utilisé pour envoyer des requêtes au serveur.
— request=Message(code = Code.GET, uri = 'coap://127.0.0.1:5684
/temperature') : Ici, un message CoAP est créé. Ce message est de type GET
(demande de lecture) et cible l'URI coap://127.0.0.1:5684/temperature, c'est-
à-dire qu'il essaie d'accéder à la ressource de température sur un serveur CoAP local
(127.0.0.1) à l'adresse 5684.
— response = await protocol.request(request).response : Cette ligne
envoie la requête GET et attend la réponse du serveur. La méthode
protocol.request(request) envoie la requête et response contient la réponse
renvoyée par le serveur.
— print(f"Response: {response.payload.decode('utf8')}") : Si la requête
est réussie, la réponse est affichée dans la console. Le payload de la réponse est
décodé de l'UTF-8 pour le rendre lisible sous forme de texte. Le serveur doit
renvoyer un message de type texte, par exemple la température.
— except Exception as e: : Cette partie du code attrape toute exception qui
pourrait se produire (par exemple, si le serveur est inaccessible ou si une erreur
réseau survient).
c. Démarrage du client
4
Master Data Sciences 2025/2024
ISAEG
g. Le code complet du client CoAP
h. Résumé du fonctionnement du code
Ce script est un client CoAP qui envoie une requête GET pour récupérer la
température d'un serveur CoAP local. Il se connecte au serveur CoAP à l'adresse
127.0.0.1 sur le port 5684, puis attend une réponse. Si la réponse est reçue, elle est
affichée sous forme de texte (décodée depuis l'UTF-8). En cas d'erreur, un message
d'erreur est imprimé.
i. Exemple de sortie attendue
Si le serveur répond correctement, vous pourriez voir une sortie comme ceci :