ESP32 HTTP GET et HTTP POST avec Arduino IDE

ESP32 HTTP GET et HTTP POST avec Arduino IDE

Dans ce guide, vous apprendrez à faire des requêtes HTTP GET et HTTP POST avec la carte ESP32 avec Arduino IDE. Nous couvrirons des exemples sur la façon d’obtenir des valeurs, de publier des objets JSON, des requêtes encodées en URL, etc.

ESP32 HTTP GET et HTTP POST avec Arduino IDE (JSON, URL codée, texte)

Conseillé: ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE (JSON, URL codé, texte)

Méthodes de requête HTTP : GET vs POST

Le protocole de transfert hypertexte (HTTP) fonctionne comme un protocole de requête-réponse entre un client et un serveur. Voici un exemple :

  • L’ESP32 (client) soumet une requête HTTP à un Raspberry Pi exécutant Node-RED (serveur) ;
  • Le serveur renvoie une réponse à l’ESP32 (client) ;
  • Enfin, la réponse contient des informations sur l’état de la demande et peut également contenir le contenu demandé.

HTTP OBTENIR

AVOIR est utilisé pour demander des données à une ressource spécifiée. Il est souvent utilisé pour obtenir des valeurs à partir d’API.

Par exemple, vous pouvez avoir :

GET /update-sensor?temperature=value1

Notez que la chaîne de requête (nom = température et valeur = valeur1) est envoyé dans l’URL de la requête HTTP GET.

Ou vous pouvez utiliser une simple requête pour renvoyer une valeur ou un objet JSON, par exemple :

GET /get-sensor

(Avec HTTP GET, les données sont visibles par tout le monde dans la demande d’URL.)

POSTE HTTP

PUBLIER est utilisé pour envoyer des données à un serveur pour créer/mettre à jour une ressource. Par exemple, publiez des lectures de capteurs sur un serveur.

Les données envoyées au serveur avec POST sont stockées dans le corps de la requête HTTP :

POST /update-sensor HTTP/1.1
Host: example.com
api_key=api&sensor_name=name&temperature=value1&humidity=value2&pressure=value3
Content-Type: application/x-www-form-urlencoded

Dans le corps de la requête, vous pouvez également envoyer un objet JSON :

POST /update-sensor HTTP/1.1
Host: example.com
{api_key: "api", sensor_name: "name", temperature: value1, humidity: value2, pressure: value3}
Content-Type: application/json

(Avec HTTP POST, les données ne sont pas visibles dans la demande d’URL. Cependant, si elles ne sont pas chiffrées, elles sont toujours visibles dans le corps de la demande.)

HTTP GET/POST avec ESP32

Dans ce guide, nous allons explorer les scénarios suivants :

  1. ESP32 HTTP GET : valeur ou requête dans l’URL
  2. ESP32 HTTP GET : objet de données JSON ou texte brut
  3. ESP32 HTTP POST : URL encodée, objet de données JSON, texte brut

Conditions préalables

Avant de poursuivre ce didacticiel, assurez-vous de remplir les conditions préalables suivantes.

EDI Arduino

Nous allons programmer l’ESP32 à l’aide de l’IDE Arduino, alors assurez-vous que le module complémentaire ESP32 est installé.

Bibliothèque Arduino_JSON

Vous devez également installer le Bibliothèque Arduino_JSON. Vous pouvez installer cette bibliothèque dans le gestionnaire de bibliothèque Arduino IDE. Allez juste à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et recherchez le nom de la bibliothèque comme suit :

Installer la bibliothèque Arduino JSON Arduino IDE

Pièces requises

Pour ce tutoriel, vous avez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1644228011 712 ESP32 HTTP GET et HTTP POST avec Arduino IDE

Préparation de Node-RED (optionnel)

Par exemple, nous allons créer un service Web avec un Raspberry Pi et Node-RED pour agir en tant que service Web (comme une API). Fondamentalement, vous ferez des requêtes HTTP GET et HTTP POST à ​​votre Raspberry Pi pour obtenir des valeurs ou les mettre à jour. Vous pouvez utiliser n’importe quel autre service Web.

Si vous n’avez pas installé Node-RED, suivez les tutoriels suivants :

Avec Node-RED en cours d’exécution sur votre Raspberry Pi, accédez à l’adresse IP de votre Raspberry Pi suivie de :1880.

http://raspberry-pi-ip-address:1880

L’interface Node-RED devrait s’ouvrir. Vous pouvez simplement importer le flux final :

Node-RED-Flow-HTTP-GET-POST-Request-Methods-ESP32-ESP8266-Arduino

Aller à Menu > Importer et copiez ce qui suit dans votre Presse-papiers pour créer votre flux Node-RED.

[{"id":"599740b7.efde9","type":"http response","z":"b01416d3.f69f38","name":"","statusCode":"200","headers":{},"x":420,"y":689,"wires":[]},{"id":"1618a829.76f638","type":"json","z":"b01416d3.f69f38","name":"","property":"payload","action":"obj","pretty":true,"x":410,"y":809,"wires":[["d0089cc7.d25ac"]]},{"id":"c7410fa2.1c2fa","type":"debug","z":"b01416d3.f69f38","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":850,"y":709,"wires":[]},{"id":"75a22f74.f1aba","type":"ui_text","z":"b01416d3.f69f38","group":"2b7ac01b.fc984","order":1,"width":0,"height":0,"name":"","label":"Sensor Name","format":"{{msg.payload}}","layout":"row-spread","x":860,"y":769,"wires":[]},{"id":"1c8f9093.8bc2bf","type":"ui_gauge","z":"b01416d3.f69f38","name":"","group":"2b7ac01b.fc984","order":2,"width":0,"height":0,"gtype":"gage","title":"Temperature","label":"ºC","format":"{{value}}","min":0,"max":"38","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":850,"y":829,"wires":[]},{"id":"a5bd2706.54e108","type":"ui_gauge","z":"b01416d3.f69f38","name":"","group":"2b7ac01b.fc984","order":3,"width":0,"height":0,"gtype":"gage","title":"Humidity","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#0080ff","#0062c4","#002f5e"],"seg1":"","seg2":"","x":840,"y":889,"wires":[]},{"id":"105ac2cc.7b3cfd","type":"ui_gauge","z":"b01416d3.f69f38","name":"","group":"2b7ac01b.fc984","order":4,"width":0,"height":0,"gtype":"gage","title":"Pressure","label":"hPa","format":"{{value}}","min":0,"max":"1200","colors":["#b366ff","#8000ff","#440088"],"seg1":"","seg2":"","x":840,"y":949,"wires":[]},{"id":"d0089cc7.d25ac","type":"function","z":"b01416d3.f69f38","name":"JSON or URL Encoded","func":"var msg0 = { payload: msg.payload.api_key };\nvar msg1 = { payload: msg.payload.sensor };\nvar msg2 = { payload: msg.payload.value1 };\nvar msg3 = { payload: msg.payload.value2 };\nvar msg4 = { payload: msg.payload.value3 };\n\nreturn [msg0, msg1, msg2, msg3, msg4];","outputs":5,"noerr":0,"x":610,"y":809,"wires":[["c7410fa2.1c2fa"],["75a22f74.f1aba"],["1c8f9093.8bc2bf"],["a5bd2706.54e108"],["105ac2cc.7b3cfd"]]},{"id":"5d9ab0d2.66b92","type":"http in","z":"b01416d3.f69f38","name":"","url":"update-sensor","method":"post","upload":false,"swaggerDoc":"","x":200,"y":740,"wires":[["599740b7.efde9","c7410fa2.1c2fa","1618a829.76f638"]]},{"id":"7f5cf345.63f56c","type":"http response","z":"b01416d3.f69f38","name":"","statusCode":"200","headers":{},"x":540,"y":420,"wires":[]},{"id":"6530621.95b429c","type":"http in","z":"b01416d3.f69f38","name":"","url":"/get-sensor","method":"get","upload":false,"swaggerDoc":"","x":180,"y":600,"wires":[["9471d1a0.68588"]]},{"id":"5ddc9f47.4b555","type":"http response","z":"b01416d3.f69f38","name":"","statusCode":"200","headers":{},"x":540,"y":560,"wires":[]},{"id":"9471d1a0.68588","type":"function","z":"b01416d3.f69f38","name":"","func":"msg.payload = {\"value1\":24.25, \"value2\":49.54, \"value3\":1005.14};\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":600,"wires":[["5ddc9f47.4b555","13aea59.7430e5a"]]},{"id":"13aea59.7430e5a","type":"debug","z":"b01416d3.f69f38","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":550,"y":628,"wires":[]},{"id":"e71c7a7d.e7c598","type":"debug","z":"b01416d3.f69f38","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":550,"y":500,"wires":[]},{"id":"c7807102.3f433","type":"http in","z":"b01416d3.f69f38","name":"","url":"/update-sensor","method":"get","upload":false,"swaggerDoc":"","x":190,"y":460,"wires":[["60410cde.562a34"]]},{"id":"60410cde.562a34","type":"function","z":"b01416d3.f69f38","name":"","func":"msg.payload = msg.payload.temperature;\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":460,"wires":[["e71c7a7d.e7c598","7f5cf345.63f56c"]]},{"id":"2b7ac01b.fc984","type":"ui_group","z":"","name":"SENSORS","tab":"99ab8dc5.f435c","disp":true,"width":"6","collapse":false},{"id":"99ab8dc5.f435c","type":"ui_tab","z":"","name":"HTTP","icon":"dashboard","order":1,"disabled":false,"hidden":false}]

Afficher le code brut

Autres services Web ou API

Dans ce guide, l’ESP32 effectue des requêtes HTTP vers Node-RED, mais vous pouvez utiliser ces exemples avec d’autres services comme ThingSpeak, IFTTT.com (service Web Hooks), OpenWeatherMap.org, serveur PHP, etc… Tous les exemples présentés dans ce guide fonctionnera également avec d’autres API.

En résumé, pour rendre ce guide compatible avec n’importe quel service, vous devez rechercher la documentation de l’API de service. Ensuite, vous avez besoin du nom du serveur (URL ou adresse IP) et des paramètres à envoyer dans la requête (chemin de l’URL ou corps de la requête). Enfin, modifiez nos exemples pour les intégrer à n’importe quelle API que vous souhaitez utiliser.

1. ESP32 HTTP GET : valeur ou requête dans l’URL

Dans le premier exemple, l’ESP32 fera une requête HTTP GET pour mettre à jour une lecture dans un service. Ce type de requête peut également être utilisé pour filtrer une valeur, demander une valeur ou renvoyer un objet JSON.

HTTP GET ESP32 Obtenir la valeur du capteur Statut en texte brut 200 OK

Code ESP32 HTTP GET avec Arduino IDE

Après avoir installé les modules complémentaires et les bibliothèques de cartes nécessaires, copiez le code suivant dans votre IDE Arduino, mais ne le téléchargez pas encore. Vous devez apporter quelques modifications pour que cela fonctionne pour vous.

/*
  Rui Santos
  Complete project details at Complete project details at https://Raspberryme.com/esp32-http-get-post-arduino/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

//Your Domain name with URL path or IP address with path
String serverName = "http://192.168.1.106:1880/update-sensor";

// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 5 seconds (5000)
unsigned long timerDelay = 5000;

void setup() {
  Serial.begin(115200); 

  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
 
  Serial.println("Timer set to 5 seconds (timerDelay variable), it will take 5 seconds before publishing the first reading.");
}

void loop() {
  //Send an HTTP POST request every 10 minutes
  if ((millis() - lastTime) > timerDelay) {
    //Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){
      HTTPClient http;

      String serverPath = serverName + "?temperature=24.37";
      
      // Your Domain name with URL path or IP address with path
      http.begin(serverPath.c_str());
      
      // Send HTTP GET request
      int httpResponseCode = http.GET();
      
      if (httpResponseCode>0) {
        Serial.print("HTTP Response code: ");
        Serial.println(httpResponseCode);
        String payload = http.getString();
        Serial.println(payload);
      }
      else {
        Serial.print("Error code: ");
        Serial.println(httpResponseCode);
      }
      // Free resources
      http.end();
    }
    else {
      Serial.println("WiFi Disconnected");
    }
    lastTime = millis();
  }
}

Afficher le code brut

Définition de vos identifiants réseau

Modifiez les lignes suivantes avec vos identifiants réseau : SSID et mot de passe. Le code est bien commenté sur l’endroit où vous devez apporter les modifications.

// Replace with your network credentials
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Définition de votre nom de serveur

Vous devez également saisir votre nom de domaine ou votre adresse IP Node-RED, afin que l’ESP publie les lectures sur votre propre serveur.

String serverName = "http://192.168.1.106:1880/update-sensor";

Maintenant, téléchargez le code sur votre tableau et cela devrait fonctionner immédiatement.

Lisez la section suivante, si vous voulez savoir comment faire la requête HTTP GET.

Requête HTTP GET

Dans le boucler() est l’endroit où vous effectuez la requête HTTP GET toutes les 5 secondes avec des exemples de données :

String serverPath = serverName + "?temperature=24.37";

// Your Domain name with URL path or IP address with path
http.begin(serverPath.c_str());

// Send HTTP GET request
int httpResponseCode = http.GET();

L’ESP32 fait une nouvelle requête dans l’URL suivante pour mettre à jour le champ du capteur avec une nouvelle température.

http://192.168.1.106:1880/update-sensor?temperature=24.37

Ensuite, les lignes de code suivantes enregistrent la réponse HTTP du serveur.

if (httpResponseCode>0) {
  Serial.print("HTTP Response code: ");
  Serial.println(httpResponseCode);
  String payload = http.getString();
  Serial.println(payload);
}
else {
  Serial.print("Error code: ");
  Serial.println(httpResponseCode);
}

Manifestation

Avec votre carte exécutant le nouveau sketch, ouvrez la fenêtre de débogage Node-RED. Vous verrez que les exemples de valeurs sont imprimés avec succès (24.37).

1644228011 232 ESP32 HTTP GET et HTTP POST avec Arduino IDE

2. ESP32 HTTP GET : objet de données JSON ou texte brut

Cet exemple suivant montre comment faire une requête HTTP GET pour obtenir un objet JSON et le décoder avec l’ESP32. De nombreuses API renvoient des données au format JSON.

HTTP GET ESP32 Obtenir les données JSON du capteur

Copiez le croquis suivant dans votre IDE Arduino (tapez votre SSID et votre mot de passe) :

/*
  Rui Santos
  Complete project details at Complete project details at https://Raspberryme.com/esp32-http-get-post-arduino/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

//Your Domain name with URL path or IP address with path
const char* serverName = "http://192.168.1.106:1880/get-sensor";

// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 5 seconds (5000)
unsigned long timerDelay = 5000;

String sensorReadings;
float sensorReadingsArr[3];

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
 
  Serial.println("Timer set to 5 seconds (timerDelay variable), it will take 5 seconds before publishing the first reading.");
}

void loop() {
  //Send an HTTP POST request every 10 minutes
  if ((millis() - lastTime) > timerDelay) {
    //Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){
              
      sensorReadings = httpGETRequest(serverName);
      Serial.println(sensorReadings);
      JSONVar myObject = JSON.parse(sensorReadings);
  
      // JSON.typeof(jsonVar) can be used to get the type of the var
      if (JSON.typeof(myObject) == "undefined") {
        Serial.println("Parsing input failed!");
        return;
      }
    
      Serial.print("JSON object = ");
      Serial.println(myObject);
    
      // myObject.keys() can be used to get an array of all the keys in the object
      JSONVar keys = myObject.keys();
    
      for (int i = 0; i < keys.length(); i++) {
        JSONVar value = myObject[keys[i]];
        Serial.print(keys[i]);
        Serial.print(" = ");
        Serial.println(value);
        sensorReadingsArr[i] = double(value);
      }
      Serial.print("1 = ");
      Serial.println(sensorReadingsArr[0]);
      Serial.print("2 = ");
      Serial.println(sensorReadingsArr[1]);
      Serial.print("3 = ");
      Serial.println(sensorReadingsArr[2]);
    }
    else {
      Serial.println("WiFi Disconnected");
    }
    lastTime = millis();
  }
}

String httpGETRequest(const char* serverName) {
  WiFiClient client;
  HTTPClient http;
    
  // Your Domain name with URL path or IP address with path
  http.begin(client, serverName);
  
  // Send HTTP POST request
  int httpResponseCode = http.GET();
  
  String payload = "{}"; 
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

Afficher le code brut

Définition de votre nom de serveur

Entrez votre nom de domaine ou votre adresse IP Node-RED, afin que l’ESP demande les lectures du capteur qui seront récupérées dans un objet JSON.

String serverName = "http://192.168.1.106:1880/get-sensor";

Maintenant, téléchargez le code sur votre tableau.

Requête HTTP GET (objet JSON)

Dans le boucler()appeler le httpGETRequest() fonction pour faire la requête HTTP GET :

sensorReadings = httpGETRequest(serverName);

le httpGETRequest() la fonction fait une demande à l’adresse Node-RED http://192.168.1.106:1880/get-sensor et il récupère une chaîne avec un objet JSON.

String httpGETRequest(const char* serverName) {
  HTTPClient http;

  // Your IP address with path or Domain name with URL path 
  http.begin(serverName);

  // Send HTTP POST request
  int httpResponseCode = http.GET();

  String payload = "{}"; 

  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

Décodage d’un objet JSON

Pour accéder aux valeurs, décodez l’objet JSON et stockez toutes les valeurs dans le capteurLecturesArr déployer.

JSONVar myObject = JSON.parse(sensorReadings);

// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(myObject) == "undefined") {
  Serial.println("Parsing input failed!");
  return;
}

Serial.print("JSON object = ");
Serial.println(myObject);

// myObject.keys() can be used to get an array of all the keys in the object
JSONVar keys = myObject.keys();

for (int i = 0; i < keys.length(); i++) {
  JSONVar value = myObject[keys[i]];
  Serial.print(keys[i]);
  Serial.print(" = ");
  Serial.println(value);
  sensorReadingsArr[i] = double(value);
}
Serial.print("1 = ");
Serial.println(sensorReadingsArr[0]);
Serial.print("2 = ");
Serial.println(sensorReadingsArr[1]);
Serial.print("3 = ");
Serial.println(sensorReadingsArr[2]);

Démonstration HTTP GET

Après avoir téléchargé le code, ouvrez l’IDE Arduino et vous verrez qu’il reçoit les données JSON suivantes :

{"value1":24.25,"value2":49.54,"value3":1005.14}

Ensuite, vous imprimez l’objet JSON décodé dans le moniteur série Arduino IDE.

1644228011 850 ESP32 HTTP GET et HTTP POST avec Arduino IDE

À des fins de débogage, les informations demandées sont également imprimées dans la fenêtre de débogage de Node-RED.

1644228011 239 ESP32 HTTP GET et HTTP POST avec Arduino IDE

3. ESP32 HTTP POST : URL encodée, objet de données JSON, texte brut

Enfin, vous apprendrez à faire une requête HTTP POST avec un ESP32.

Avec cet exemple, votre ESP32 peut effectuer des requêtes HTTP POST en utilisant trois types différents de requêtes de corps : URL encodée, objet JSON ou texte brut. Ce sont les méthodes les plus courantes et doivent s’intégrer à la plupart des API ou des services Web.

HTTP POST ESP32 URL Encodé JSON Objet Données Texte brut

Copiez le croquis suivant dans votre IDE Arduino (tapez votre SSID et votre mot de passe) :

/*
  Rui Santos
  Complete project details at Complete project details at https://Raspberryme.com/esp32-http-get-post-arduino/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

//Your Domain name with URL path or IP address with path
const char* serverName = "http://192.168.1.106:1880/update-sensor";

// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 5 seconds (5000)
unsigned long timerDelay = 5000;

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
 
  Serial.println("Timer set to 5 seconds (timerDelay variable), it will take 5 seconds before publishing the first reading.");
}

void loop() {
  //Send an HTTP POST request every 10 minutes
  if ((millis() - lastTime) > timerDelay) {
    //Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){
      WiFiClient client;
      HTTPClient http;
    
      // Your Domain name with URL path or IP address with path
      http.begin(client, serverName);

      // Specify content-type header
      http.addHeader("Content-Type", "application/x-www-form-urlencoded");
      // Data to send with HTTP POST
      String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&value1=24.25&value2=49.54&value3=1005.14";           
      // Send HTTP POST request
      int httpResponseCode = http.POST(httpRequestData);
      
      // If you need an HTTP request with a content type: application/json, use the following:
      //http.addHeader("Content-Type", "application/json");
      //int httpResponseCode = http.POST("{\"api_key\":\"tPmAT5Ab3j7F9\",\"sensor\":\"BME280\",\"value1\":\"24.25\",\"value2\":\"49.54\",\"value3\":\"1005.14\"}");

      // If you need an HTTP request with a content type: text/plain
      //http.addHeader("Content-Type", "text/plain");
      //int httpResponseCode = http.POST("Hello, World!");
     
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
        
      // Free resources
      http.end();
    }
    else {
      Serial.println("WiFi Disconnected");
    }
    lastTime = millis();
  }
}

Afficher le code brut

Définition de votre nom de serveur

Entrez votre nom de domaine ou votre adresse IP Node-RED, afin que l’ESP publie des exemples de lectures de capteurs.

String serverName = "http://192.168.1.106:1880/update-sensor";

Maintenant, téléchargez le code sur votre tableau.

URL HTTP POST encodée

Pour faire une requête HTTP POST de type URL encodée, comme ceci

POST /update-sensor HTTP/1.1
Host: 192.168.1.106:1880
api_key=tPmAT5Ab3j7F9&sensor=BME280&value1=24.25&value2=49.54&value3=1005.14
Content-Type: application/x-www-form-urlencoded

Vous devez exécuter ce qui suit dans votre code Arduino :

// Your Domain name with URL path or IP address with path
http.begin(serverName);

// Specify content-type header
http.addHeader("Content-Type", "application/x-www-form-urlencoded");

// Data to send with HTTP POST
String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&value1=24.25&value2=49.54&value3=1005.14";

// Send HTTP POST request
int httpResponseCode = http.POST(httpRequestData);

Objet HTTP POST JSON

Ou si vous préférez faire une requête HTTP POST avec un objet JSON :

POST /update-sensor HTTP/1.1
Host: example.com
{api_key: "tPmAT5Ab3j7F9", sensor_name: "BME280", temperature: 24.25; humidity: 49.54; pressure: 1005.14}
Content-Type: application/json

Utilisez l’extrait suivant :

http.addHeader("Content-Type", "application/json");

int httpResponseCode = http.POST("{\"api_key\":\"tPmAT5Ab3j7F9\",\"sensor\":\"BME280\",\"value1\":\"24.25\",\"value2\":\"49.54\",\"value3\":\"1005.14\"}");

Texte brut HTTP

Si vous souhaitez envoyer du texte brut ou une valeur, utilisez ce qui suit :

http.addHeader("Content-Type", "text/plain");

int httpResponseCode = http.POST("Hello, World!");

Noter: le flux Node-RED que nous utilisons (service Web) n’est pas configuré pour recevoir du texte brut, mais si l’API que vous prévoyez d’intégrer n’accepte que du texte brut ou une valeur, vous pouvez utiliser l’extrait précédent.

Démonstration HTTP POST

Dans la fenêtre de débogage Node-RED, vous pouvez voir que votre ESP fait une requête HTTP POST toutes les 5 secondes.

1644228011 18 ESP32 HTTP GET et HTTP POST avec Arduino IDE

Et dans cet exemple, ces valeurs sont également envoyées à 3 jauges et sont affichées dans le tableau de bord Node-RED :

http://raspberry-pi-ip-address:1880/ui
1644228011 375 ESP32 HTTP GET et HTTP POST avec Arduino IDE

Conclusion

Dans ce didacticiel, vous avez appris à intégrer votre ESP32 à des services en ligne à l’aide de requêtes HTTP GET et HTTP POST.

HTTP GET et HTTP POST sont couramment utilisés dans la plupart des services Web et des API. Celles-ci peuvent être utiles dans vos projets pour : publier vos lectures de capteurs sur un service Web comme IFTTT, ThingSpeak ; à un serveur web ESP32 ou Raspberry Pi ou à votre propre serveur ; pour demander des données à partir d’Internet ou de votre base de données, et bien plus encore.

Si vous utilisez une carte ESP8266, lisez : Guide pour ESP8266 NodeMCU HTTP GET et HTTP Post Requests.

Vous aimerez peut-être aussi lire :

J’espère que ce projet vous a plu. Si vous avez des questions, postez un commentaire ci-dessous et nous essaierons de vous répondre.

Si vous aimez ESP32, vous pourriez envisager de vous inscrire à notre cours « Apprendre ESP32 avec Arduino IDE ». Vous pouvez également accéder à nos ressources ESP32 gratuites ici.

Merci pour la lecture.