Ciao a tutti,
ho realizzato una scheda composta da arduino mega e esp8266, comandata tramite seriale e libreria WifiEspAT, che ad un evento specifico invia ad un pagina php (tramite funzione POST ) dei dati prelevati da alcuni sensori. La pagina successivamente si occupa di passarli ad un database sql.
Il sito è impostato senza connessione sicura (http) e tutto funziona bene.
Adesso, per comodità e riduzione degli ingombri, sto facendo un porting su esp32 wrover ma senza successo, infatti non sto riuscendo a scrivere più il database.
Ho inizialmente provato con lo stesso codice della scheda vecchia, senza successo, poi ho fatto delle prove guardando degli esempi su internet, purtroppo anche in questo caso senza alcun risultato.
La stringa per scrivere il database tramite pagina php (testata e funzionante sia da mega che da browser è la seguente: http://www.mysite.it/admin/system/recive.php?MyKey=abc&Board=Test&A=10&B=20&C=30&D=40&E=50&F=100&G=0&H=200&P=1
La scheda si collega alla rete, invia la funzione, ricevo
HTTP Response code: 200
ma la pagina php non recupera i dati .
Il codice che ho implementato sulla esp32 è questo:
#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
// Replace with your network credentials
const char* ssid = "MyNetwork";
const char* password = "1234567890";
// Domain name and URL path or IP address with path
const char* serverName = "http://www.mysite.it/admin/system/recive.php";
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());
}
void loop() {
//Check WiFi connection status
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
HTTPClient http;
//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");
// Prepare HTTP POST request data
String httpRequestData = "MyKey=abc&Board=Test&A=10&B=20&C=30&D=40&E=50&F=100&G=0&H=200&P=1";
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);
delay(1000);
// Send HTTP POST request
int httpResponseCode = http.POST(httpRequestData);
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();
}
else {
Serial.println("WiFi Disconnected");
}
}
@santyleo : Ancora un'altro ... ma dove avete imparato a dichiarare le stringhe del 'C' in quel modo orribile? Non che la cosa sia legata al tuo problema, ma dichiarare le stringhe in quel modo è estremanente rischioso ... o si conosce mooooolto bene l'utilizzo dei puntatori o prima o poi vengono fuori dei sicuri casini !!!
Le stringhe del 'C' si dicharano come char array e quindi la giusta definizione è:
Ripeto, NON ha nulla a che vedere con il tuo problema, ma è una pessima abitudine che molti stanno utilizzando ... probabilmente un copia/incolla dall'ennesima bojata trovata su internet
Ciao Guglielmo, si ho copiato il codice dal web come avevo precedentemente detto, ed anch'io pensavo fosse errato l'asterisco nella definizione, ma se li levo non mi compila e mi da il seguente errore
invalid conversion from 'const char*' to 'char' [-fpermissive]
sinceramente visto l'errore e la poca conoscenza li ho rimessi.
No, non è un post.
O meglio, comunichi al server che invierai dei dati con il metodo POST, ma poi passi tutte le informazioni nell'url (quindi come un GET).
Infatti il tuo script PHP recupera i parametri passati con l'url usando la supervariabile $_GET (il nome non ti suggerisce nulla? )
Tornando allo sketch, dovrebbe essere sufficiente modificare la riga
// Send HTTP POST request
int httpResponseCode = http.POST(httpRequestData);
in
// Send HTTP GET request
int httpResponseCode = http.GET(httpRequestData);
in effetti mentre ti postavo il codice ho visto che passava i dati con il GET .
ho cambiato il software con la stringa http.GET ma non compila con il seguente errore
no matching function for call to 'HTTPClient::GET(String&)'
Pensavo che la libreria facesse il resto ed invece mi sbagliavo... GET() è senza parametri quindi devi comporre l'url completo prima di chiamare il metodo.
http.begin("http://www.mysite.it/admin/system/recive.php?MyKey=abc&Board=Test&A=10&B=20&C=30&D=40&E=50&F=100&G=0&H=200&P=1"); //HTTP
// start connection and send HTTP header
int httpCode = http.GET();