Bonjour, j'aimerais envoyer des données d'un esp32 vers un URL spécifique. Quelle peut être la syntaxe avec:
server.on(/URL, HTTP_POST, {...
Je voudrais envoyer une information sous le format suivant:
String request = "api_key=" + apiKeyValue + "&data1=" + data1
+ "&data2=" + data2 + "";
l'URL serait du type https://www.carotte.com/esp32-data.php
Est ce possible?
Merci bcp
Salut.
La classe HTTPClient possède une méthode POST. Ce ne sont pas les tutos qui manquent :
https://microcontrollerslab.com/esp32-http-post-using-arduino-ide-thingspeak-and-ifttt/
Merci beaucoup! je suis sur platformio et j ai une erreur: [{
"/c:/Users/Laurent/Documents/PlatformIO/Projects/Barometer_PIO/src/main.cpp",
"message": "identificateur "HTTPClient" non défini",
}]
j utilise les librairies suivantes
#include <Arduino.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <WiFi.h>
#include <HttpClient.h>
vous savez pourquoi?
merci bcp
HttpClient vs HTTPClient peut être.......
si tu postais ici ton code ? (en utilsant la méthode indiquée dans les Bonnes Pratiques du Forum )
oui vous avez raison. je n arrive pas à le formater comme le souhaite la politique du forum. ne m'en veuillez pas. merci pour votre aide.
#include <Arduino.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <WiFi.h>
#include <HTTPClient.h>
Adafruit_BMP085 bmp;
unsigned long last_time = 0;
unsigned long timer_delay = 10000;
//here we use 4 of ESP32 to read data
#define DHTPIN 18
//our sensor is DHT11 type
#define DHTTYPE DHT11
//create an instance of DHT sensor
DHT dht(DHTPIN, DHTTYPE);
const char *ssid = "xxx";
const char *password = "xxx";
const char* serverName = "https://xxx/post-esp-data.php";
// Keep this API Key value to be compatible with the PHP code provided in the project page.
// If you change the apiKeyValue value, the PHP file /post-esp-data.php also needs to have the same key
String apiKeyValue = "xxx";
AsyncWebServer server(80);
void setup()
{
//----------------------------------------------------Serial
Serial.begin(115200);
Serial.println("\n");
//----------------------------------------------------GPIO
//----------------------------------------------------SPIFFS
if(!SPIFFS.begin())
{
Serial.println("Erreur SPIFFS...");
return;
}
File root = SPIFFS.open("/");
File file = root.openNextFile();
while(file)
{
Serial.print("File: ");
Serial.println(file.name());
file.close();
file = root.openNextFile();
}
//----------------------------------------------------WIFI
WiFi.begin(ssid, password);
Serial.print("Tentative de connexion...");
while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println("\n");
Serial.println("Connexion etablie!");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
//Serial.println("DHT11 sensor!");
//call begin to start sensor
//dht.begin();
//use the functions which are supplied by library.
//float humidite = dht.readHumidity();
// Read temperature as Celsius (the default)
//float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
// if (isnan(humidite) || isnan(temperature)) {
// Serial.println("Failed to read from DHT sensor!");
// return;
// }
dht.begin();
//----------------------------------------------------SERVER
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/index.html", "text/html");
});
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/style.css", "text/css");
});
server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/script.js", "text/javascript");
});
server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/jquery-3.4.1.min.js", "text/javascript");
});
server.on("/lireTemperature", HTTP_GET, [](AsyncWebServerRequest *request)
{
double val_temp = bmp.readTemperature();
String Temperature=String(val_temp);
request->send(200, "text/plain", Temperature);
});
server.on("/lireTemperatureDHT", HTTP_GET, [](AsyncWebServerRequest *request)
{
double val_tempDHT = dht.readTemperature();
String TemperatureDHT=String(val_tempDHT);
request->send(200, "text/plain", TemperatureDHT);
});
server.on("/lirePression", HTTP_GET, [](AsyncWebServerRequest *request)
{
int val_pression=bmp.readPressure()/100;
String Pression=String(val_pression);
request->send(200, "text/plain", Pression);
});
server.on("/lireAltitude", HTTP_GET, [](AsyncWebServerRequest *request)
{
int val_altitude=bmp.readAltitude(103200);
String Altitude=String(val_altitude);
request->send(200, "text/plain", Altitude);
});
server.on("/lireHumidite", HTTP_GET, [](AsyncWebServerRequest *request)
{
int val_humidite=dht.readHumidity();
String Humidite=String(val_humidite);
request->send(200, "text/plain", Humidite);
});
server.begin();
Serial.println("Serveur actif!");
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085/BMP180 sensor, check wiring!");
while (1) {}
}
}
void loop() {
//Send an HTTP POST request every 10 seconds
if((millis()-last_time) > timer_delay) {
if(WiFi.status()== WL_CONNECTED){
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
//Data to send with HTTP POST
String httpRequestData = "api_key=" + apiKeyValue + "&humidity=" +dht.readHumidity()
+ "&temperature=" + dht.readTemperature() + "";
// Send HTTP POST request
int httpResponseCode = http.POST(httpRequestData);
//http.addHeader("Content-Type", "application/json");
// JSON data to send with HTTP POST
//String httpRequestData = "{\"api_key\":\"" + my_Api_Key + "\",\"field1\":\"" + String(random(50)) + "\"}";
// Send HTTP POST request
// int httpResponseCode = http.POST(httpRequestData);
Serial.print("HTTP Response code is: ");
Serial.println(httpResponseCode);
http.end();
}
else {
Serial.println("WiFi is Disconnected!");
}
}
last_time = millis();
}
tel quel , non indenté et non formaté , il sera pas ou peu lu
dommage pour toi....
Mieux vaut posément corriger l'insertion dans le message ci-dessus ,rééditer ce message, la méthode indiquée sert à donner de la lisibilité dans l'intérêt du demandeur en facilitant le travail des aidants.
De plus un code correctement posté pourra d'un seul clic être copié pour être colé dans l'IDE Arduio à des fins de tests
#include <Arduino.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <WiFi.h>
#include <HttpClient.h>
Adafruit_BMP085 bmp;
unsigned long last_time = 0;
unsigned long timer_delay = 10000;
//here we use 4 of ESP32 to read data
#define DHTPIN 18
//our sensor is DHT11 type
#define DHTTYPE DHT11
//create an instance of DHT sensor
DHT dht(DHTPIN, DHTTYPE);
const char *ssid = "BBB";
const char *password = "NNN";
const char* serverName = "https://XX/post-esp-data.php";
// Keep this API Key value to be compatible with the PHP code provided in the project page.
// If you change the apiKeyValue value, the PHP file /post-esp-data.php also needs to have the same key
String apiKeyValue = "NN";
AsyncWebServer server(80);
void setup()
{
//----------------------------------------------------Serial
Serial.begin(115200);
Serial.println("\n");
//----------------------------------------------------GPIO
//----------------------------------------------------SPIFFS
if(!SPIFFS.begin())
{
Serial.println("Erreur SPIFFS...");
return;
}
File root = SPIFFS.open("/");
File file = root.openNextFile();
while(file)
{
Serial.print("File: ");
Serial.println(file.name());
file.close();
file = root.openNextFile();
}
//----------------------------------------------------WIFI
WiFi.begin(ssid, password);
Serial.print("Tentative de connexion...");
while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println("\n");
Serial.println("Connexion etablie!");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
//Serial.println("DHT11 sensor!");
//call begin to start sensor
//dht.begin();
//use the functions which are supplied by library.
//float humidite = dht.readHumidity();
// Read temperature as Celsius (the default)
//float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
// if (isnan(humidite) || isnan(temperature)) {
// Serial.println("Failed to read from DHT sensor!");
// return;
// }
dht.begin();
//----------------------------------------------------SERVER
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/index.html", "text/html");
});
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/style.css", "text/css");
});
server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/script.js", "text/javascript");
});
server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/jquery-3.4.1.min.js", "text/javascript");
});
server.on("/lireTemperature", HTTP_GET, [](AsyncWebServerRequest *request)
{
double val_temp = bmp.readTemperature();
String Temperature=String(val_temp);
request->send(200, "text/plain", Temperature);
});
server.on("/lireTemperatureDHT", HTTP_GET, [](AsyncWebServerRequest *request)
{
double val_tempDHT = dht.readTemperature();
String TemperatureDHT=String(val_tempDHT);
request->send(200, "text/plain", TemperatureDHT);
});
server.on("/lirePression", HTTP_GET, [](AsyncWebServerRequest *request)
{
int val_pression=bmp.readPressure()/100;
String Pression=String(val_pression);
request->send(200, "text/plain", Pression);
});
server.on("/lireAltitude", HTTP_GET, [](AsyncWebServerRequest *request)
{
int val_altitude=bmp.readAltitude(103200);
String Altitude=String(val_altitude);
request->send(200, "text/plain", Altitude);
});
server.on("/lireHumidite", HTTP_GET, [](AsyncWebServerRequest *request)
{
int val_humidite=dht.readHumidity();
String Humidite=String(val_humidite);
request->send(200, "text/plain", Humidite);
});
server.begin();
Serial.println("Serveur actif!");
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085/BMP180 sensor, check wiring!");
while (1) {}
}
}
void loop() {
//Send an HTTP POST request every 10 seconds
if((millis()-last_time) > timer_delay) {
if(WiFi.status()== WL_CONNECTED){
HttpClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
//Data to send with HTTP POST
String httpRequestData = "api_key=" + apiKeyValue + "&humidity=" +dht.readHumidity()
+ "&temperature=" + dht.readTemperature() + "";
// Send HTTP POST request
int httpResponseCode = http.POST(httpRequestData);
//http.addHeader("Content-Type", "application/json");
// JSON data to send with HTTP POST
//String httpRequestData = "{\"api_key\":\"" + my_Api_Key + "\",\"field1\":\"" + String(random(50)) + "\"}";
// Send HTTP POST request
// int httpResponseCode = http.POST(httpRequestData);
Serial.print("HTTP Response code is: ");
Serial.println(httpResponseCode);
http.end();
}
else {
Serial.println("WiFi is Disconnected!");
}
}
last_time = millis();
}
Vous avez raison. Cela devrasit être mieux. l'erreur est il n'existe aucun constructeur par défaut pour la classe "HttpClient"C/C++(291)
avec HTTPClient en lignes 9 et 177 au lieu de HttpClient , la compilation est OK !!
J ai toujours des erreurs: c est a s arracher les cheveux
Executing task: C:.platformio\penv\Scripts\platformio.exe run <
Processing esp32doit-devkit-v1 (platform: espressif32; board: esp32doit-devkit-v1; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: Redirecting...
PLATFORM: Espressif 32 (3.4.0) > DOIT ESP32 DEVKIT V1
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 3.10006.210326 (1.0.6)
- tool-esptoolpy 1.30100.210531 (3.1.0)
- toolchain-xtensa32 2.50200.97 (5.2.0)
LDF: Library Dependency Finder -> Library Dependency Finder (LDF) — PlatformIO latest documentation
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 36 compatible libraries
Scanning dependencies...
Dependency Graph
|-- 1.1.1
|-- 1.2.3
| |-- 1.1.1
| |-- 1.0
| |-- 1.0
| |-- 5.13.4
|-- 1.2.1
| |-- 1.10.1
| | |-- 1.0.1
| | |-- 1.0
| |-- 1.0.1
|-- 1.10.1
| |-- 1.0.1
| |-- 1.0
|-- 1.0
|-- 1.4.3
| |-- 1.1.4
|-- 5.13.4
|-- 2.2.0
|-- 1.0
| |-- 1.0
|-- 1.0
|-- 1.0.1
Building in release mode
Compiling .pio\build\esp32doit-devkit-v1\src\main.cpp.o
src\main.cpp: In function 'void loop()':
src\main.cpp:177:5: error: 'HTTPClient' was not declared in this scope
HTTPClient http;
^
src\main.cpp:181:7: error: 'http' was not declared in this scope
http.begin(serverName);
^
Compiling .pio\build\esp32doit-devkit-v1\lib786\HttpClient\HttpClient.cpp.o
*** [.pio\build\esp32doit-devkit-v1\src\main.cpp.o] Error 1
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp: In member function 'int HttpClient::startRequest(const char*, uint16_t, const char*, const char*, const char*)':
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:81:57: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
if (!iClient->connect(aServerName, aServerPort) > 0)
^
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp: In member function 'int HttpClient::startRequest(const IPAddress&, const char*, uint16_t, const char*, const char*, const char*)':
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:124:60: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
if (!iClient->connect(aServerAddress, aServerPort) > 0)
^
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp: In member function 'int HttpClient::responseStatusCode()':
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:324:27: warning: enumeration value 'eIdle' not handled in switch [-Wswitch]
switch(iState)
^
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:324:27: warning: enumeration value 'eRequestStarted' not handled in switch [-Wswitch]
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:324:27: warning: enumeration value 'eReadingContentLength' not handled in switch [-Wswitch]
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:324:27: warning: enumeration value 'eSkipToEndOfHeader' not handled in switch [-Wswitch]
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:324:27: warning: enumeration value 'eLineStartingCRFound' not handled in switch [-Wswitch]
.pio\libdeps\esp32doit-devkit-v1\HttpClient\HTTPClient.cpp:324:27: warning: enumeration value 'eReadingBody' not handled in switch [-Wswitch]======================================================== [FAILED] Took 4.93 seconds ========================================================
Arrêt du processus de terminal "C:.platformio\penv\Scripts\platformio.exe 'run'". Code de sortie : 1.
Le terminal sera réutilisé par les tâches, appuyez sur une touche pour le fermer.
compilation OK sous IDE Arduino (ordi sous Linux) après les 2 modifications indiquées au #9
(pas très à l'aise avec PlatformIO je ne l'utilise que pour des projets complets et valides arrivant sous cette forme !)
N'aurais-tu pas une autre librairie comportant un fichier HttpClient.h ?
#include <HTTPClient.h>
Windows n'étant pas case sensitive, si dans les librairies il y a un fichier HttpClient.h, il est pris.
Merci. je ne sais plus trop quoi faire. Je ne trouve pas d'autres fichiers httpclient ailleurs.
Chez moi, ton source ne compilait pas, à cause d'une librairie qui comportait un fichier HttpClient.h.
Mais avec
#include <HTTPClient.h>
Ça passe. Mais je suis sous Linux (case sensitive).
Idem pour moi, sous Linux également (cf #9)