Bonjour à tous,
Je suis débutant dans l’univers Arduino et je n’ai pas l’habitude de demander de l’aide… Sauf que là, j’arrive dans un cas critique ou je ne trouve pas la solution à mon problème.
Je souhaite récupérer une valeur écrite sur une page web via le wifi (ESP8266 sous firmware NodeMcu).
Je m’expliques:
-L’ESP8266 se connecte à un site www.blabla.com/index.php
-Il récupère la donnée affichée sur cette page après les caractères : “?=” (En gros, si la page web retourne “?=635” je voudrais que l’ESP8266 ne lise que 635, et vérifie si cette valeur change. Si elle est changée, le programme va interpréter une action (servomoteur, led etc…). Dès que la valeur change, il effectue une action
J’ai beau me renseigner partout sur le web je n’arrives pas à effectuer cette manipulation.
J’ai utilisé les exemples de la librarie ESP (WebClient etc…) mais impossible de compléter ce code.
Voici mon morceau de code :
#include <SPI.h>
#include <ESP8266WiFi.h>const char* ssid = “MONSSID”;
const char* password = “MONMDP”;
String serverData = String();
WiFiServer server(80);
int isTransferring = 0;
long Difference = 0;
long Count = 0;
long Number = 0;
long lastCount = 0;void WiFiEvent(WiFiEvent_t event) {
Serial.printf("[WiFi-event] event: %d\n", event);switch(event) {
case WIFI_EVENT_STAMODE_GOT_IP:
Serial.println(“WiFi connected”);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
break;
case WIFI_EVENT_STAMODE_DISCONNECTED:
Serial.println(“WiFi lost connection”);
break;
}}
void setup() {
Serial.begin(9600);
WiFiClient client = server.available();
// delete old config
WiFi.disconnect(true);delay(1000);
WiFi.onEvent(WiFiEvent);
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi… ");
}void loop() {
// If we get a connection, report back via serial:
if(isTransferring == 0){
if (client.connect()) {// Make a HTTP request:
client.println(“GET /index.php HTTP/1.1”);
client.println(“Host: www.blabla.com”);
client.println();isTransferring = 1;
} else {
isTransferring = 0;
}
}// Loop until the client is available
while (client.available()) {// Collect client response data
char c = client.read();// Append to our returned server data to parse later
serverData += c;}
// During transfer if the connection stops kill the connection
// and process the response
if(isTransferring == 1){// if the server’s disconnected, stop the client:
if (!client.connected()) {Serial.println();
Serial.println(“disconnecting.”);
client.stop();isTransferring = 0;
//je ne récupére que le chiffre qui m’interesse
long phrase = long(serverData.indexOf("?="));String Count = String(serverData.substring(phrase+2, phrase+22).trim());
Number = stringToLong(Count);Serial.println(“Number:”);
Serial.println(Number);Serial.println(“lastCount:”);
Serial.println(lastCount);Difference = Number - lastCount; //je note la différence
lastCount = Number; //je sauvegarde le nouveau chiffre
Serial.println(“likeDifference:”);
Serial.println(likeDifference);// Si il y a une différence j’effectue une action
if(Difference > 0 && Difference != lastCount){// Blink the differnece
for(int i=0;i<Difference;i++){Serial.println(“Blinking…”);
Serial.println(i);// Get your blink on!!!
delay(3000); // Leave a light on for me, I’ll be… for 3 seconds
}
}// Reset response data
serverData = String();// Wait X more seconds before checking again. 5000 is 5 sec
delay(5000);
}
}
}// Helper function to turn a string into a long int
long stringToLong(String s) {
char arr[12];
s.toCharArray(arr, sizeof(arr));
return atol(arr);}
Je voulais savoir si cette manipulation était réalisable avec le même fichier index.php mais compris dans une carte SD par exemple ? Juste dans la théorie. La pratique j’essayerai de me débrouiller.
Merci par avance à ceux qui m’aiderons.