Apprenez à effectuer des requêtes HTTP GET avec les cartes ESP32 ou ESP8266 programmées avec MicroPython. Nous aborderons d’abord les bases des requêtes HTTP GET, puis nous créerons et expliquerons deux exemples différents à l’aide de la bibliothèque de requêtes.

Les requêtes HTTP sont essentielles pour interagir avec les services Web afin de récupérer des données à partir de sources externes, d’intégrer des API Web pour accéder à des services tiers, et bien plus encore, comme vous le verrez dans ce didacticiel.
Ce tutoriel est compatible avec les cartes ESP32 et ESP8266.
Table des matières
Dans ce didacticiel, nous aborderons les sujets suivants.
Conditions préalables – Micrologiciel MicroPython
Pour suivre ce tutoriel, vous devez installer le firmware MicroPython sur vos cartes ESP32 ou ESP8266. Vous avez également besoin d’un IDE pour écrire et télécharger le code sur votre tableau. Nous vous suggérons d’utiliser Thonny IDE :
Nouveau sur MicroPython ? Consultez notre eBook : Programmation MicroPython avec ESP32 et ESP8266 eBook (2e édition)
Que sont les requêtes HTTP ?
Le moyen le plus courant d’échanger des données avec un autre ordinateur (serveur) sur Internet consiste à utiliser le protocole HTTP.
HTTP (Hypertext Transfer Protocol) fonctionne via un modèle client-serveur. Dans ce modèle, le client communique avec un serveur à l’aide de requêtes HTTP. Une requête HTTP est un message envoyé par le client à un serveur, généralement pour demander une action spécifique ou récupérer des informations. Le serveur renvoie également une réponse au client via HTTP.

- Client : initie la communication via une demande.
- Serveur : reçoit et traite la demande et envoie une réponse en retour.
L’ESP32 peut être soit un client, soit un serveur. Lorsqu’il est client, il envoie des requêtes aux serveurs. Lorsqu’il s’agit d’un serveur, il gère les requêtes du client. Dans ce didacticiel, nous examinerons l’ESP32 et l’ESP8266 en tant que client HTTP qui envoie des requêtes à un serveur.
Voici quelques exemples de ce que vous pouvez faire en utilisant les requêtes HTTP avec l’ESP32/ESP8266 :
- Obtenez des données sur Internet : par exemple, l’heure, la météo actuelle, les cours des actions, les mises à jour du trafic et bien plus encore…
- Datalogging : envoyez des données vers le cloud pour sauvegarder vos données en ligne ;
- Contrôle à distance de votre ESP32 : en interagissant avec des plateformes IoT comme Adafruit IO, Node-RED et autres, vous pouvez interagir avec votre carte à distance en échangeant des données via des requêtes HTTP ;
- Interagissez avec des services tiers pour envoyer des notifications : SMS, emails, notifications et bien plus encore…
Présentation technique des requêtes HTTP
Jetons un coup d’œil rapide aux aspects techniques des requêtes HTTP. Si c’est la première fois que vous traitez des requêtes HTTP de manière technique et que cela semble déroutant, c’est tout à fait normal.
Mais ne vous inquiétez pas, il existe des modules MicroPython qui résument tous les éléments techniques, ce qui rend très simple la création et la gestion des requêtes HTTP. De plus, pour plus d’informations sur les aspects techniques des requêtes HTTP, nous recommandons les ressources suivantes :
Requêtes HTTP GET
La requête HTTP se compose de plusieurs parties. Les principaux éléments sont : la ligne de demande, les en-têtes et le corps.
Ligne de demande
La ligne de requête spécifie la méthode HTTP, la ressource demandée (l’URL) et la version du protocole HTTP utilisé. Les méthodes HTTP courantes incluent GET, POST, PUT et DELETE. Par exemple:
GET /path/to/resource HTTP/1.1
En-têtes
Les en-têtes fournissent des informations sur la demande. Il peut inclure l’hôte auquel le client envoie la demande, le type de contenu envoyé ou accepté, l’agent utilisateur (qui identifie le client qui fait la demande), etc. Par exemple:
Host: example.com
User-Agent: ESP32
Accept: application/json
Corps
Le corps est un contenu facultatif et il contient des données ou des informations que nous souhaitons envoyer au serveur. Ceci est utilisé dans les requêtes POST et PUT. Par exemple:
POST /submit-form HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username=johndoe&password=secretpassword
Méthodes de requête HTTP
Le choix de la méthode HTTP dans une requête indique l’action que l’on souhaite effectuer sur le serveur. Certaines méthodes couramment utilisées incluent :
- GET : récupérer les données du serveur.
- POST : soumettre les données à traiter à une ressource spécifiée.
- PUT : met à jour une ressource sur le serveur.
- DELETE : supprime une ressource du serveur.
Dans ce didacticiel, nous nous concentrerons sur l’utilisation des requêtes GET avec l’ESP32/ESP8266.
Codes d’état HTTP
Après avoir reçu une requête HTTP, le serveur répond avec un code d’état HTTP indiquant le résultat de la requête. Les codes d’état appartiennent à des catégories telles que 2xx (réussi), 3xx (redirection), 4xx (erreur client) et 5xx (erreur serveur). Quelques-uns des plus courants :
- 200 OK : la requête a abouti.
- 404 Not Found : la ressource demandée est introuvable.
Requêtes HTTP avec les NodeMCU ESP32 et ESP8266 (MicroPython)
Le moyen le plus simple d’effectuer des requêtes HTTP avec l’ESP32/ESP8266 programmé avec MicroPython consiste à utiliser la bibliothèque de requêtes, qui utilise une approche de haut niveau. Ceci est très similaire à la bibliothèque de requêtes Python, mais est plus limitée.
Vous pouvez également utiliser le module socket, mais il s’agit d’une approche de plus bas niveau et n’est pas si conviviale pour les débutants.
Le code suivant est un exemple de base de la façon dont vous pouvez effectuer une simple requête HTTP vers une URL à l’aide de la bibliothèque de requêtes. Cet exemple envoie une requête à une page Github que nous avons créée et qui contient simplement le texte « Raspberryme.com »
# Rui Santos & Sara Santos - Raspberryme.com
# Complete project details: https://Raspberryme.com/micropython-http-get-requests-esp32-esp8266/
import network
import requests
import time
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
# Connect to network
def connect_wifi(ssid, password):
# Connect to your network
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
# Wait for connection
timeout = 10
while not station.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
if station.isconnected():
print('Connection successful')
print(station.ifconfig())
return True
else:
print('Connection failed. Timeout reached')
return False
if connect_wifi(ssid, password):
# Make GET request
try:
response = requests.get("https://gist.githubusercontent.com/RuiSantosdotme/9e834367f02c198bc6474938e4e3bb0d/raw/de66b26a95fc2d0b7620a43b49e57607bd4348e3/url.txt")
# Get response code
response_code = response.status_code
# Get response content
response_content = response.content
# Print results
print('Response code: ', response_code)
print('Response content:', response_content)
except Exception as e:
print('An error occurred during the request:', str(e))
else:
print('Failed to connect to WiFi')
Afficher le code brut
Comment fonctionne le code
Commencez par inclure le réseau et la bibliothèque de requêtes.
import network
import requests
Remplacez « REPLACE_WITH_YOUR_SSID » et « REPLACE_WITH_YOUR_PASSWORD » par le nom de votre réseau Wi-Fi (SSID) et votre mot de passe.
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
La fonction suivante connect_wifi() se connecte à un réseau avec le SSID et le mot de passe que vous transmettez lorsque vous appelez la fonction.
# Connect to network
def connect_wifi(ssid, password):
# Connect to your network
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
# Wait for connection
timeout = 10
while not station.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
if station.isconnected():
print('Connection successful')
print(station.ifconfig())
return True
else:
print('Connection failed. Timeout reached')
return False
Vérifiez si nous sommes connectés à Internet avant de tenter de faire la demande :
if connect_wifi(ssid, password):
Si nous disposons d’une connexion Internet réussie, faites la demande. À l’aide du module de requêtes et de la méthode get(), le code envoie une requête GET à l’URL souhaitée. La réponse du serveur est stockée dans la variable de réponse.
response = requests.get("https://gist.githubusercontent.com/RuiSantosdotme/9e834367f02c198bc6474938e4e3bb0d/raw/de66b26a95fc2d0b7620a43b49e57607bd4348e3/url.txt")
La réponse est un objet de type Response. Cet objet possède plusieurs attributs auxquels vous pouvez accéder et qui peuvent être utiles. Par exemple:
- réponse.status_code : renvoie une valeur entière représentant l’état de la réponse ;
- réponse.content : renvoie le contenu réel en octets ;
- réponse.text : renvoie le contenu converti en chaîne, en utilisant un codage de caractères tel que UTF-8 ;
- réponse.json() : renvoie la réponse sous forme d’objet JSON (dictionnaire) ;
- réponse.headers() : accède aux informations sur les en-têtes de la réponse.
Après avoir obtenu la réponse, nous obtenons le statut de la réponse en utilisant l’attribut status_code.
response_code = response.status_code
Nous sauvegardons le contenu de la réponse dans la variable réponse_content en utilisant l’attribut content.
response_content = response.content
Enfin, nous imprimons le code d’état et demandons le contenu au Shell.
print('Response code: ', response_code)
print('Response content:', response_content)
Nous utilisons les instructions try et except en cas d’erreur lors de la requête :
except Exception as e:
print('An error occurred during the request:', str(e))
Tester le code
Après avoir inséré vos informations d’identification réseau, vous pouvez exécuter le code précédent sur votre ESP32 ou ESP8266. Assurez-vous que Thonny IDE a une connexion établie avec la carte. Ensuite, appuyez sur le bouton vert RUN.

Si tout se passe comme prévu, le code de réponse devrait être 200 et il imprimera le contenu de la page GitHub, qui devrait être « Raspberryme.com ».

Obtenir des données du Web à l’aide de requêtes HTTP GET
Maintenant que vous savez comment effectuer une requête HTTP GET de base, nous allons vous montrer un exemple différent pour obtenir des données utiles sur Internet. Nous demanderons des informations sur la météo actuelle à l’aide de l’API Météo.
Prévisionniste météo ESP32/ESP8266 (requête HTTP GET)
Dans cet exemple, nous utiliserons l’API Météo pour créer un prévisionniste météo. Cette API est gratuite et fournit des informations utiles sur la météo dans presque tous les endroits du monde.

Nous obtiendrons les données météorologiques de votre emplacement et les afficherons sur la coque.
Obtenir votre clé API
- Accédez au site Web de l’API Météo : Weatherapi.com
- Inscrivez-vous pour créer un compte ou connectez-vous si vous en avez déjà un.
- Après avoir vérifié votre compte, connectez-vous à votre compte.
- Sur votre tableau de bord sur Weatherapi.com/my/ , vous trouverez votre clé API.

Copiez la clé API dans un endroit sûr car vous en aurez besoin plus tard.
Pour obtenir des informations sur la météo dans l’emplacement choisi, saisissez l’URL suivante dans votre navigateur Web, mais insérez votre emplacement et votre clé API aux bons endroits :
https://api.weatherapi.com/v1/current.json?q=YOUR_LOCATION+&key=YOUR_API_KEY
Par exemple, dans mon cas :
https://api.weatherapi.com/v1/current.json?q=Oporto+&key=d1578a064b07xxxc917164350240106
Copiez votre URL et collez-la dans votre navigateur, et l’API renverra les informations correspondant à votre météo locale. Par exemple:
{
"location": {
"name": "Oporto",
"region": "Porto",
"country": "Portugal",
"lat": 41.15,
"lon": -8.6167,
"tz_id": "Europe/Lisbon",
"localtime_epoch": 1762168698,
"localtime": "2025-11-03 11:18"
},
"current": {
"last_updated_epoch": 1762168500,
"last_updated": "2025-11-03 11:15",
"temp_c": 16.1,
"temp_f": 61,
"is_day": 1,
"condition": {
"text": "Partly Cloudy",
"icon": "//cdn.weatherapi.com/weather/64x64/day/116.png",
"code": 1003
},
"wind_mph": 4,
"wind_kph": 6.5,
"wind_degree": 142,
"wind_dir": "SE",
"pressure_mb": 1023,
"pressure_in": 30.21,
"precip_mm": 0,
"precip_in": 0,
"humidity": 68,
"cloud": 0,
"feelslike_c": 16.1,
"feelslike_f": 61,
"windchill_c": 14.8,
"windchill_f": 58.6,
"heatindex_c": 14.7,
"heatindex_f": 58.4,
"dewpoint_c": 7.5,
"dewpoint_f": 45.5,
"vis_km": 10,
"vis_miles": 6,
"uv": 2.3,
"gust_mph": 5.1,
"gust_kph": 8.2
}
}
Pour plus d’informations sur l’API, consultez la documentation : Documentation de l’API Météo.
Code – Requête HTTP GET : API Météo (MicroPython)
Le code suivant envoie une requête à l’API Météo pour obtenir des données météorologiques sur votre emplacement. Ensuite, nous affichons les données sur le shell. Nous afficherons des informations sur la météo, la température, l’humidité et la pluie actuelles.
# Rui Santos & Sara Santos - Raspberryme.com
# Complete project details: https://Raspberryme.com/micropython-http-get-requests-esp32-esp8266/
import network
import time
import requests
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
api_key = 'REPLACE_WITH_YOUR_API_KEY'
location ='REPLACE_WITH_YOUR_LOCATION'
# Request URL
url = f'https://api.weatherapi.com/v1/current.json?q={location}+&key={api_key}'
# Connect to network
def connect_wifi(ssid, password):
# Connect to your network
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
# Wait for connection
timeout = 10
while not station.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
if station.isconnected():
print('Connection successful')
print(station.ifconfig())
return True
else:
print('Connection failed - timeout reached')
return False
if connect_wifi(ssid, password):
try:
# Make the request
response = requests.get(url)
#Print the response code
print('Response code: ', response.status_code)
# Get response content
weather = response.json()
# Close the request
response.close()
# Print bulk weather data
print('Weather JSON: ', weather)
# Get specific weather data
weather_description = weather['current']['condition']['text']
print('Current weather: ', weather_description)
# Temperature and humidity
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
humidity = weather['current']['humidity']
print(f'Temperature in Celsius: {temperature_c:.2f}')
print(f'Temperature in Fahrenheit: {temperature_f:.2f}')
print(f'Humidity (%): {humidity:.2f}')
# Precipitation
precipitation = weather['current']['precip_mm']
print(f'Precipitation in mm: {precipitation}')
# Wind
wind_speed = weather['current']['wind_kph']
print('Wind speed in kph:', wind_speed)
except Exception as e:
# Handle any exceptions during the request
print('Error during request:', e)
Afficher le code brut
Comment fonctionne le code
Tout d’abord, vous devez insérer vos informations d’identification réseau pour connecter votre carte à Internet.
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
Ensuite, insérez votre clé API Météo et la ville d’où vous souhaitez obtenir les données.
api_key = 'REPLACE_WITH_YOUR_API_KEY'
location = 'REPLACE_WITH_YOUR_CITY'
Par exemple, dans mon cas :
api_key = 'd1578a064b07xxxc917164350240106'
location ='Oporto'
Nous enregistrons l’URL de la requête dans la variable url. Il s’agit d’une chaîne f avec des espaces réservés afin que l’URL soit mise à jour avec vos informations au moment de l’exécution.
url = f'https://api.weatherapi.com/v1/current.json?q={location}+&key={api_key}'
Ensuite, on se connecte à internet en appelant la fonction connect_wifi() (créée auparavant) et en passant le SSID et le mot de passe en arguments :
if connect_wifi(ssid, password):
Si nous sommes connectés avec succès à Internet, nous ferons la demande.
Comme nous l’avons vu dans l’exemple précédent, faire la requête est aussi simple que d’utiliser la méthode get() du module de requêtes et de passer l’URL en argument.
response = requests.get(url)
Cela renverra un objet JSON. Ainsi, nous pouvons convertir le résultat en un dictionnaire Python en utilisant la méthode json().
weather = response.json()
Ensuite, nous fermons la connexion pour libérer les ressources.
# Close the request
response.close()
Nous avons désormais toutes les données que vous avez vues sur votre navigateur Web lors des étapes précédentes enregistrées dans la variable météo.
Vous accédez à des informations spécifiques en utilisant les clés des données que vous souhaitez obtenir. Nous obtenons une description météorologique, la température, l’humidité, les précipitations et la vitesse du vent. Vous pouvez également obtenir d’autres propriétés en accédant aux clés correspondantes sur l’objet JSON.
# Get specific weather data
weather_description = weather['current']['condition']['text']
print('Current weather: ', weather_description)
# Temperature and humidity
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
humidity = weather['current']['humidity']
print(f'Temperature in Celsius: {temperature_c:.2f}')
print(f'Temperature in Fahrenheit: {temperature_f:.2f}')
print(f'Humidity (%): {humidity:.2f}')
# Precipitation
precipitation = weather['current']['precip_mm']
print(f'Precipitation in mm: {precipitation}')
# Wind
wind_speed = weather['current']['wind_kph']
print('Wind speed in kph:', wind_speed)
Tester le code
Après avoir inséré vos informations d’identification réseau, votre clé API et votre ville, vous pouvez exécuter le code sur votre carte ESP32 ou ESP8266.
Vous devriez obtenir quelque chose comme indiqué dans la capture d’écran ci-dessous, mais avec les informations relatives à l’emplacement choisi.

Et c’est tout. Vous avez demandé avec succès des données à l’API Météo.
Conclusion
Dans ce didacticiel, vous avez découvert les requêtes HTTP GET avec ESP32 et ESP8266 programmés avec MicroPython. Vous avez appris pourquoi ils sont utiles pour les projets IoT et comment obtenir des données sur Internet à l’aide de requêtes HTTP GET.
À titre d’exemple, nous vous avons montré comment obtenir des données météorologiques. Vous pouvez pousser ce projet plus loin en affichant les données sur un écran, comme un écran LCD, OLED ou TFT. Vous pouvez créer une boucle while ou une interruption de minuterie pour demander des données périodiquement, ou vous pouvez même demander des données pour plusieurs emplacements simplement en modifiant la valeur de la variable d’emplacement.
Nous avons quelques tutoriels qui peuvent vous être utiles :
Si vous souhaitez en savoir plus sur la programmation des cartes ESP32 et ESP8266 à l’aide de MicroPython, consultez nos ressources :
Merci d’avoir lu.
Plongez dans l’histoire de Raspberry Pi avec cette vidéo :

-
ELEGOO 3PCS Carte de Développement ESP32 Type-C, 2,4 GHz WiFi + Bluetooth Dual Core Carte de Contrôle pour Arduino, Support MicroPython, NodeMCU, AP/STA/AP+STA, Puce CP2102
-
ELEGOO 2PCS ESP32 Carte de développement Type-C, 2,4 GHz WiFi + Bluetooth Dual Core Microcontrôleur pour Arduino, Support MicroPython, NodeMCU, AP/STA/AP+STA, Puce CP2102
