esp32 httpupdate vers dossier dropbox ?

Bonsoir à tous :slight_smile: sur notre projet nous utilisons la fonction httpupdate sur un esp32 cela fonctionne parfaitement.Nous tapons sur un serveur dédié at home . Et il possible de faire la même chose mais en utilisant le service drop box . Faire en sorte que notre projet se connecte au service dropbox pour vérifier les mises à jour . merci pour vos retours

:slight_smile: :slight_smile: :slight_smile: :slight_smile:

/*#include <WiFi.h>
#include "Arduino.h"
#include "EEPROM.h"*/
#include <WiFi.h>
#include <Preferences.h>
#include <Ticker.h>
#include <HTTPClient.h>
#include <ESP32httpUpdate.h>

Preferences preferences;
Ticker Blink;

const char * urlversion = "http://mondns.ddns.net/PAD/courant/version.txt";
const char * urlbin = "http://mondns.ddns.net/PAD/courant/";

const byte USER      = 0xAF;
const int MAXSIZE    = 4095;
const int blueLed    = 4;
const int redLed     = 16;
const int credential = 600;
const int ssid       = 601;
const int pswd       = 670;

String SSID;
String PSWD;
int connect = 0;
bool toggle = false;
long result = 0;
bool getDatas = false;
String rec = "";

String AP_SSID(){
  String ID = String((uint32_t)ESP.getEfuseMac(), HEX);
  ID.toUpperCase();
  return String("PAD-" + ID);
}


String pass(String pass){
  char arr[pass.length()];
  pass.toCharArray(arr, pass.length());
  String output = "";
  for(int i = 0; i < pass.length(); i++){
    if(i < 4) output += arr[i];
    else output += "*";
  } return output;
}


void TOGGLE(){
  toggle = toggle ^1;
  digitalWrite(blueLed, toggle == true ? HIGH : LOW);
  digitalWrite(redLed,  toggle == false ? HIGH : LOW);
}

String getValue(String data, char separator, int index)
{
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;

    for (int i = 0; i <= maxIndex && found <= index; i++) {
        if (data.charAt(i) == separator || i == maxIndex) {
            found++;
            strIndex[0] = strIndex[1] + 1;
            strIndex[1] = (i == maxIndex) ? i+1 : i;
        }
    }
    return (found > index ? data.substring(strIndex[0], strIndex[1]) : "");
}

void split(String str){
  SSID = getValue(str, ';', 0);
  SSID.trim();
  PSWD = getValue(str, ';', 1);
  PSWD.trim();
}

void WiFiEvent(WiFiEvent_t event)
{
  switch (event) {
    case SYSTEM_EVENT_STA_START:
      WiFi.setHostname(AP_SSID().c_str()); //set sta hostname here
      break;
    case SYSTEM_EVENT_STA_GOT_IP:
      Serial.println("[WIFI]");
      Serial.print("\tIP: ");
      Serial.println(WiFi.localIP());
      Serial.println("\tSTATUS: connecte");
      connect = WiFi.waitForConnectResult();
      if(connect) Save();
      break;
    default:
      break;
  }
}

void Save(){
  preferences.begin("wifi", false); // Note: Namespace name is limited to 15 chars
  preferences.putString("ssid", SSID);
  preferences.putString("password", PSWD);
  preferences.end();
  Serial.println("\tSauvegarde ... OK");
  Print();
}

void Print(){
  preferences.begin("wifi", false);
  Serial.println("\r\n[WIFI PARAMS]");
  Serial.print("\t");
  Serial.println(preferences.getString("ssid", "none"));
  Serial.print("\t");      
  Serial.println(preferences.getString("password", "none"));
  preferences.end();    
}

void Clear(){
  preferences.begin("wifi", false);
  preferences.clear();
  preferences.end();
  Serial.println("\tEffacement memoire ... OK");
}

void update(){
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient httpClient;
    httpClient.begin(urlversion);
    int httpCode = httpClient.GET();
         
    if(httpCode == HTTP_CODE_OK){
      Blink.attach(0.2, TOGGLE);
      String nVersion = httpClient.getString();
      String urlfirmware = urlbin;
      urlfirmware.concat(nVersion);
      urlfirmware.concat(".bin");
      Serial.printf("\r\nInstallation firmware: %s\r\n", nVersion.c_str());

      t_httpUpdate_return ret = ESPhttpUpdate.update(urlfirmware);

      switch (ret) {
        case HTTP_UPDATE_FAILED:
        Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s\r\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
        break;
   
        case HTTP_UPDATE_NO_UPDATES:
        Serial.println("HTTP_UPDATE_NO_UPDATES");
        break;
   
        case HTTP_UPDATE_OK:
        Serial.println("HTTP_UPDATE_OK");
        break;
      }
    }
  }
}

void help(){
  Serial.println("\n*  MENU  *");
  Serial.println("'u' upload mise a jour");
  Serial.println("'r' restart");
  Serial.println("'d' erasing eeprom");
  Serial.println("'p' print credentials");
  Serial.println("'h' help\n");
  Serial.println("Livebox;AJJJJ31D223286914BA06BF808");
}

void setup() {
  pinMode(blueLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  Serial.begin(115200);
  Serial.setDebugOutput(false);
  delay(2000);
  WiFi.onEvent(WiFiEvent);
  WiFi.mode(WIFI_MODE_STA);
  help();
}

void loop() {
  
  if(Serial.available()){
    rec = Serial.readStringUntil('\n');
    getDatas = true;
  }
  
  if(getDatas == true){
    //Serial.printf("recu: %d\r\n", rec.length());
    if(rec.length() == 2) setCmd(rec.charAt(0));
    else {
      split(rec);
      if(SSID != "" && PSWD != ""){
        WiFi.begin(SSID.c_str(), PSWD.c_str());
      }
    } getDatas = false;
  }
  
  delay(5);
}

void setCmd(char c){
  switch(c){
    case 'u': 
      if(WiFi.status() == WL_CONNECTED) {
        update();
      } else {
        Serial.println();
        Serial.println("Pad pas connecte");
      } break;
    case 'h': 
      help(); 
      break;
    case 'r': 
      ESP.restart(); 
      break;
    case 'd': 
      Clear();
      break;
    case 'p': 
      Print();
      break;
  }
}

Bonsoir

Peut être en prenant des idées dans ce tutoriel sur l'API de Dropbox, en particulier le téléchargement d'un fichier à partir de Dropbox : https://riptutorial.com/fr/dropbox-api/topic/408/telechargement-d-un-fichier

Merci pour ce lien
Si je réfléchis bien il faut utilisé : Télécharger un fichier avec des métadonnées via Requests in PHP.
Par contre je ne comprend pas comment interface cette request :s

$response = Requests::post("https://content.dropboxapi.com/2/files/download", array(
    'Authorization' => "Bearer <ACCESS_TOKEN>",
    'Dropbox-Api-Arg' => json_encode(array('path' => '/test.txt')),
));

$fileContent = $response->body;
$metadata = json_decode($response->headers['Dropbox-Api-Result'], true);

echo "File " . $metadata["name"] . " has the rev " . $metadata["rev"] . ".\n";

Je ne suis pas parvenu a faire fonctionner le code

je n'utilise pas Dropbox Que donne cette librairie pour ESP8266 qui dispose d'une fonction fileDownload ? https://github.com/lucasromeiro/DropboxManager