Bonjour,
J'ai une problématique sur un projet arduino :
Je dois récupérer des valeurs changeantes chaque jour pour mon programme, les données viennent d'un serveur indépendant de moi sur lequel il n'y a aucune API pour récupérer les données mais il ont développé un javascript qu'on peut inclure dans une page web, le script permet (en définissant l'id d'une ville) d'afficher une liste avec sur un champ le nom de la donnée et sur le suivant l'heure, ceci pour 6 données différentes, j'ai besoin de récupérer ces données sur mon arduino pour le programme, par conséquent l'arduino appellerait la page en PHP en renseignant laid dans le get et récupérerait les 6 heures avec leurs noms pour agir.
Seul problème : je n'ai pas trouvé de solution pour le faire que j'ai compris. Quelqu'un saurait-il m'expliquer comment faire? Pour info je prévois d'utiliser un arduino qui se connecte en wifi pour récupérer ces valeurs chaque jour.
Merci d'avance.
Votre arduino serait donc client web d'une page dynamique (le "serveur") que vous hébergez quelque part et qui se charge de faire la requête en javascript, c'est cela ?
prenez une des nombreux exemples de client web, vous recevrez le flux HTML émis par votre serveur. ensuite il ne reste qu'à analyser le contenu pour trouver vos variables
Bonjour,
J'utilise ce code pour ma station météo qui est reliée à mon site web.
Ce code fonctionne parfaitement avec un esp32.
// Importation des librairies
#include <WiFi.h>
//Définition du serveur et des mots de passes wifi
WiFiServer server(80);
const char* ssid = "monwifi";
const char* password = "motdepasse1234";
const char* site = "exemple.fr";
String texte; // Variable qui enregistrera le texte reçu
void setup() {
Serial.begin(115200);
Serial.println("");
Serial.println("Démmarrage");
// On commence par se connecter au réseau WiFi
Serial.print("Connexion au réseau WiFi ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connexion au WiFi réussie !");
Serial.print("Adresse IP locale de l'ESP : ");
Serial.println(WiFi.localIP());
void loop() {
// Conexion au serveur et envoi de la requète
WiFiClient client;
const int httpPort = 80;
if (!client.connect(site, httpPort)) {
Serial.println("Connection au serveur echouée.");
return;
}
// Maintenant on envoie la requete au serveur
client.print(String("GET http://exemple.fr/truc/bidule/index.html"));
client.println(String("HTTP/1.1"));
client.print(String("Host: "));
client.println(String(site));
client.println(String("Connection: close"));
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 1000) { // Si timeout
Serial.println("Timeout du client !");
Serial.println("");
client.stop();
return;
}
}
// On lit les lignes que le serveur nous envoie
while(client.available()) {
texte += client.readStringUntil('\r');
}
Serial.println("");
Serial.println("Connection fermée.");
Serial.println("");
}
Si tu veux récupérer des valeurs comme ça :
25;65;32
Il faudra remplacer ça
// On lit les lignes que le serveur nous envoie
while(client.available()) {
texte += client.readStringUntil('\r');
}
par ça :
int nb = 0; // Variable permettant de prendre automatiquement le banne valeur de la liste "Vals"
while(client.available()) {
String line = client.readStringUntil(';');
Vals[nb] = line;
nb = nb + 1;
}
Il faudra aussi remplacer ça :
String texte;
par ça :
String Vals[3];
Pryam
Pour info je prévois d'utiliser un arduino qui se connecte en wifi
Cela sent l'ARDUINO + ESP01 ... brrr
Pourquoi pas un ESP8266 ou un ESP32 tout seul ?
Ce serait beaucoup plus simple.
while(client.available()) {
texte += client.readStringUntil('r');
}
Déconseillé sur un ARDUINO. Tout dépend de la taille de la page bien sur mais les serveurs sont plutôt bavards en général.
De plus : String sur un ARDUINO : ![]()
les données viennent d'un serveur indépendant de moi
@azzedesign : et si un lien vers la page en question était proposé ?
Déconseillé sur un ARDUINO. Tout dépend de la taille de la page bien sur mais les serveurs sont plutôt bavards en général.
Je ne savais pas. De plus, cela me fait penser que j'ai oublier de dire qu'il faut que ce soit du texte brut et non du texte avec les balises .
De plus : String sur un ARDUINO : :confused:
Comme je l'ai dit, j'utilise un esp32 donc peut être que le code sera un peu à adapter selon la carte utilisée. ![]()
Pryam
Sans autre information de la part de azzedesign, difficile de savoir s'il y a ARDUINO ou pas, ni quelle est la complexité du contenu.
De plus, je n'ai pas l'impression que azzedesign soit tres attentif à ce qu'il ce passe sur ce topic... ![]()
Souvent en cherchant le même texte on trouve le même post sur plusieurs forum parfois même avec un google translate sur les site anglophones...
Il aura peut être plus de chance là bas... s’il répond un peu plus qu’ici...