ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE

ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE

Dans ce guide, vous apprendrez à effectuer des requêtes HTTP GET et HTTP POST avec la carte ESP8266 NodeMCU 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.

ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE JSON URL Encodé Texte

Conseillé: ESP32 HTTP GET et HTTP POST avec Arduino IDE (JSON, URL codée, 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’ESP8266 (client) soumet une requête HTTP à un Raspberry Pi exécutant Node-RED (serveur) ;
  • Le serveur renvoie une réponse à l’ESP8266 (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 ESP8266

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

  1. ESP8266 HTTP GET : valeur ou requête dans l’URL
  2. ESP8266 HTTP GET : objet de données JSON ou texte brut
  3. ESP8266 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 la carte ESP8266 NodeMCU à l’aide de l’IDE Arduino, alors assurez-vous que le module complémentaire ESP8266 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 !

1643180408 977 ESP8266 NodeMCU 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’ESP8266 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. ESP8266 HTTP GET : valeur ou requête dans l’URL

Dans le premier exemple, l’ESP8266 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 ESP8266 NodeMCU Obtenir la valeur du capteur Statut en texte brut 200 OK

Code ESP8266 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/esp8266-nodemcu-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.
  
  Code compatible with ESP8266 Boards Version 3.0.0 or above 
  (see in Tools > Boards > Boards Manager > ESP8266)
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.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 depending on timerDelay
  if ((millis() - lastTime) > timerDelay) {
    //Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){
      WiFiClient client;
      HTTPClient http;

      String serverPath = serverName + "?temperature=24.37";
      
      // Your Domain name with URL path or IP address with path
      http.begin(client, 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(client, serverPath.c_str());

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

L’ESP8266 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).

1643180408 762 ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE

2. ESP8266 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’ESP8266. De nombreuses API renvoient des données au format JSON.

HTTP GET ESP8266 NodeMCU 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/esp8266-nodemcu-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.
  
  Code compatible with ESP8266 Boards Version 3.0.0 or above 
  (see in Tools > Boards > Boards Manager > ESP8266)
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.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 depending on timerDelay
  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 IP address with path or Domain name with URL 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) {
  WiFiClient client;
  HTTPClient http;

  // Your IP address with path or Domain name with URL 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;
}

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.

1643180409 650 ESP8266 NodeMCU 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.

1643180409 568 ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE

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

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

Avec cet exemple, votre ESP8266 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 ESP8266 NodeMCU 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/esp8266-nodemcu-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.
  
  Code compatible with ESP8266 Boards Version 3.0.0 or above 
  (see in Tools > Boards > Boards Manager > ESP8266)
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.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(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);

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.

1643180409 541 ESP8266 NodeMCU 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
1643180409 599 ESP8266 NodeMCU HTTP GET et HTTP POST avec Arduino IDE

Conclusion

Dans ce didacticiel, vous avez appris à intégrer votre ESP8266 à 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 ESP8266 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 ESP32, lisez : Guide pour ESP32 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 l’ESP8266, vous pouvez envisager de vous inscrire à notre eBook « La domotique avec l’ESP8266 ». Vous pouvez également accéder à nos ressources ESP8266 gratuites ici.

Merci pour la lecture.

  • AZDelivery D1 Mini NodeMCU Lua avec ESP8266-12F Module WLAN CH340G Compatible avec Arduino incluant Un E-Book!
    ✅ La carte AZ-Delivery D1 mini est une carte WiFi Mini-NodeMcu Lua basée sur un ESP-8266-12F et un connecteur micro USB. ✅ Cette carte WLAN contient 11 broches d'entrée/sortie numériques, toutes les broches ont une interruption / pwm / I2C / 1 fil. ✅ Grâce à sa conception ultra-compacte, le Mini NodeMcu AZ-Delivery D1 avec le module WLAN ESP8266-12F peut être facilement stocké à distance. ✅ La carte de développement sans fil D1 Mini AZ-Delivery est 100% compatible avec IDE et peut être programmée dans Arduino-IDE. ✅ Ce produit inclut un E-Book qui fournit des informations utiles sur la façon de commencer votre projet. Il permet une installation rapide et fait gagner du temps sur le processus de configuration. On y trouve une série d'exemples d'applications, des guides d'installation complets et des bibliothèques.
  • ESP8266 NodeMCU V3 Module,Carte de Développement ESP-12E CH340 Compatible avec Ardui-no IDE/MicroPython.
    La carte de développement Nodemcu V3 ESP8266 est équipée d'un puissant microcontrôleur ESP6266 (ESP-12E) avec un WLAN 802.11 b / g / n et une antenne intégrée de 25dBm. Le module ESP-12E utilise le CH340G, performance stable, très pratique pour le débogage, il suffit d'utiliser un câble USB pour le connecter à l'ordinateur, vous pouvez télécharger le programme. Faible consommation d'énergie, le courant de veille profonde est de 10uA, le courant d'arrêt est inférieur à 5uA, la consommation d'énergie en veille est inférieure à 1,0mW. Cette carte de développement est composée de deux microcontrôleurs supplémentaires : la puce de mémoire flash est 25Q32 4M (32mbit) et la puce série est une puce CH340 améliorée. Cette carte de développement est composée de deux microcontrôleurs supplémentaires : la puce de mémoire flash est 25Q32 4M (32mbit) et la puce série est une puce CH340 améliorée.
  • ESP8266 NodeMCU Lua V2 Module RUIZHI 2 pièces ESP8266 WiFi NodeMCU Carte de développement CP2102 ESP-12E Type-C Interface compatibles avec Arduino IDE/Micropython
    Puissante puce ESP8266 : NodeMcu Lua V2 est construit sur l'ESP8266, un puissant module Wi-Fi qui prend en charge les normes Wi-Fi 802.11b/g/n pour une connectivité transparente. Communication USB-série : Intégrant la puce USB-série CP2102, cette carte de développement communique directement avec votre ordinateur via une interface USB, facilitant ainsi le débogage et le téléchargement de code. Support Open-Source : ESP8266 NodeMcu Lua V2 est un projet open-source, vous permettant d'utiliser, de modifier et de distribuer librement les logiciels et le matériel associés. Il est typiquement programmé en utilisant le langage de script Lua, ce qui le rend facile à utiliser pour les débutants. Broches GPIO polyvalentes : Le module ESP8266 étant doté de plusieurs broches GPIO, cette carte de développement peut être utilisée pour connecter et contrôler divers capteurs et périphériques externes, ce qui la rend idéale pour les applications IoT. Possibilité de mise à jour du micrologiciel : Les mises à jour du micrologiciel du module ESP8266 sont prises en charge, ce qui vous permet d'accéder à de nouvelles fonctionnalités et améliorations pour répondre à l'évolution des besoins et de la technologie.