Bonjour,
Je veux récupérer un fichier JSON situé dans serveur http,depuis mon arduino.
quelqu’un peut m'aider svp?
Bonjour,
Je veux récupérer un fichier JSON situé dans serveur http,depuis mon arduino.
quelqu’un peut m'aider svp?
Bonjour,
Un peu plus de détails peut-être (quel Arduino, etc...) ?
je travail avec un nodemcu pour faire la mise à jour OTA à travers un serveur http.
je veux envoyer une requête http vers le serveur pour savoir s'il y avait une une nouvelle version du firmware,alors la réponse du serveur est sous la forme d'un fichier json qui contient le nom de la nouvelle version et l'url du binaire,donc comment je peux récupérer ce fichier pour extraire ses informations.
Il y a une librairie Jason mais faudra aussi regarder tout ce qui concerne le téléchargement d'uodates - c'est plus compliqué que le Jason
Concernant la mise à jour du firmware j'ai travaillé avec la class ESP8266HTTPUpdate qui prend en paramètres L'url de la nouvelle version
Ok
Pour le Jason si vous ne voulez pas utiliser la librairie qui mange bcp de mémoire, j'ai posté ici (post 28) un bout de code d'exemple qui fait un GET http point aller extraire de l'info du contenu d'une URL - éventuellement utilisable pour aller extraire votre info sur la dispo d'une update.
Merci pour votre réponse,
Dans votre code vous avez utiliser une variable fingerprint,que représente cette variable ?
ah c'est parce que le site sur lequel je fais la requête est en https, donc c'est pour pouvoir s'authentifier correctement en sha1
si la communication vers votre site n'est pas cryptée alors un simple GET des exemples HTTP suffit et vous pouvez utiliser mes fonctions de parsing de la réponse pour trouver le début du message qui vous intéresse et extraire la partie à analyser - ça fonctionnera pareil, c'est juste écouter un flux de données.
Lorsque j'ai travaillé avec la class ESP8266HTTP il ya une méthode update qui prend en paramètres httpsFingerprint où je sais pas quoi donner en valeur .
HTTPUpdateResult ESP8266HTTPUpdate::update(const String& url, const String& currentVersion,
const String& httpsFingerprint, bool reboot)
{
rebootOnUpdate(reboot);
return update(url, currentVersion, httpsFingerprint);
}
(dans la discussion pointée plus haut du post #28) vous avez cette ligne de code
// Use web browser to view and copy SHA1 fingerprint of the certificate
const char* sha1 = "83:7D:87:4B:80:8B:B9:26:33:C0:5A:DC:30:18:58:D9:69:14:D1:4F";
c'est parce que j'accède le serveur https://poloniex.com --> si vous rentrez poloniex.com ce site dans
GRC | SSL TLS HTTPS Web Server Certificate Fingerprints par exemple vous verrez qu'il dit
</sub> <sub>[color=blue]Domain Name poloniex.com Certificate Name *.poloniex.com EV - Security Certificate's Authentic Fingerprint [color=red]83:7D:87:4B:80:8B:B9:26:33:C0:5A:DC:30:18:58:D9:69:14:D1:4F[/color][/color]</sub> <sub>
c'est cette partie en rouge qui vous intéresse
en pratique, vous pouvez l'extraire du certificat du site et vous faites un
openssl x509 -noout -fingerprint -sha1 -inform pem -in [certificate-file.crt]
Ok merci ![]()
J'ai un autre problème dans la méthode de l'update que j'ai mis en dessus,lorsque je l'appelle pour mettre à jour mon firmware,mon ESP ne redémarre pas automatiquement sauf que je le redémarre manuellement ![]()
vous faites un ESP.restart(); après la màj?
que ce que vous voulez dire avec "après la màj"?
Màj = Mise à jour
Normalement la fonction update prend l'url de la nouvelle version en paramètre.
voici mon code arduino:
/**
* httpUpdate.ino
*
* Created on: 27.11.2015
*
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#define USE_SERIAL Serial
ESP8266WiFiMulti WiFiMulti;
//const char *v="httpUpdatetest";
void setup() {
USE_SERIAL.begin(9600);
WiFiMulti.addAP("SSID","PASSWORD);
}
void loop() {
// wait for WiFi connection
//HTTPClient http;
if((WiFiMulti.run() == WL_CONNECTED)) {
t_httpUpdate_return ret = ESPhttpUpdate.update("http://13.79.164.41/iot/pfe/Blink1.bin");
switch(ret) {
case HTTP_UPDATE_FAILED:
USE_SERIAL.println("HTTP_UPDATE_FAILD");
break;
case HTTP_UPDATE_NO_UPDATES:
USE_SERIAL.println("HTTP_UPDATE_NO_UPDATES");
break;
case HTTP_UPDATE_OK:
USE_SERIAL.println("HTTP_UPDATE_OK");
break;
}
}
}
Lorsque j'appelle la fonction de l'update l’exécution du programme courant s’arrête car il arrive pas à exécuter le switch case pour afficher le message "HTTP_UPDATE_OK",donc même si j'ajoute la fonction esp.restart il va pas l’exécuter et si je fais un reboot manuel le nouveau sketch entre en exécution.
je vois que la librairie a évolué depuis la dernière fois que j'avais regardé
la première fois que vous chargez votre code par le biais du port Série (UART), avant de faire une mise à jour "over the air" il faut rebooter votre arduino.
ensuite les mise à jour devraient fonctionner et le reboot être automatique; Si vous remettez du code par l'UART, alors faites un reset manuel ensuite
Bien sûr assurez vous que GPIO0 n'est pas LOW au moment où vous faites la software update.