Arduino téléversé avec serveur ethernet

bonjours je suis actuellement en train de développer une interface graphique pour pouvoir contrôlé un arduino à distance sans utilisé arduino ide mais j'ai une colle déjà le matériel j'utilise pour le moment un arduino uno et un shield ethernet 2 . le problèmes est que j'ai besoins de téléversé un code arduino présent sur la carte sd a la place du code actuel (en gros il faut que le que le code actuelle permette de téléversé un autre code à ça place) pour cela j'ai plusieurs piste pour réécrire le programme je vais utiliser le bootloader pour reprogrammer le uno ensuite il faut aussi que le code qui est sur la carte sd soit temporairement dans la mémoire flash du arduino pour reprogramme merci à vous . le code:

#include <Ethernet.h>
#include <SD.h>
#include <avr/boot.h>

byte macSerre[] = {0x08, 0x0E, 0x0B, 0x10, 0x50, 0x00};
IPAddress IPSerre(172,16,41,13);
EthernetServer serveurHTTP(80);

void setup() {
  Ethernet.begin(macSerre, IPSerre);
  serveurHTTP.begin();
  Serial.begin(115200);
  // Initialisation de la carte SD
  if (!SD.begin(4)) {
    Serial.println("Erreur lors de l'initialisation de la carte SD !");
    return;
  }
}

void loop() {
  EthernetClient client = serveurHTTP.available();
  if (client) {
    if (client.connected()) {
      String reception;
      while (client.available()) {
        char carLu = client.read();
        if (carLu != 10) {
          reception += carLu;
        } else {
          break;
        }
      }
      Serial.println(reception);
      if (reception.startsWith("GET / HTTP/1.1")) {
        client.println(F("HTTP/1.1 200 OK"));
        client.println(F("Content-Type: text/html"));
        client.println(F("Connection: close"));
        client.println();
        // Lecture du fichier depuis la carte SD
        File fichier = SD.open("espoire.hex", FILE_READ);
        if (fichier) {
          while (fichier.available()) {
            client.write(fichier.read());
          }
          fichier.close();
          // Redémarrer Arduino pour activer le bootloader
          delay(100);
          asm volatile ("  jmp 0x7E00"); // Adresse de démarrage du bootloader
        } else {
          Serial.println("Erreur lors de l'ouverture du fichier !");
        }
      }
      client.stop();
    }
  }
}
`

il faudra que le bootloader ait accès à la carte SD... ça va faire un gros code... sur un UNO à mon avis ce n'est pas jouable.

prenez un ESP32 ou similaire qui sont mieux dotés et supportent les mises à jour du firmware

Je ne peux pas car je suis sur un projet professionnel il faut que je passe par un cable ethernet pour des raison de sécurité

Dans le monde professionnel on écrit un bootloader spécial, qui reçoit l'application binaire à partir d'un support quelconque (SD, Ethernet, radio ou autre).
J'ai déjà fait ce genre de chose sur des processeurs ARM7 32 bits.

C'est un peu (beaucoup) le problème. Le bootloader risque d'être tellement gros que l'application sera à l'étroit.
Le moindre exemple SDFAT occupe 50% de la FLASH.
L'exemple Ethernet WebServer occupe 38% de la FLASH.
Il ne reste pas grand chose :grimacing:
A moins d'opter pour une MEGA ?

Prendre un Arduino UNO pour un projet "pro" ce n'est pas cohérent - c'est un module de prototypage.

Rien ne vous empêche de mettre un module ethernet sur votre ESP32. Il existe même des modules prêts à l'emploi (un exemple (jamais testé))

Perso (mais je ne demande qu'à être convaincu du contraire) je pense que le bootloader sera tellement gros que la place restant pour votre code sera très limitée.

Souvent aussi on ne remplace pas le code existant par le nouveau lors du téléchargement, on l'écrit ailleurs et on bascule le point d'entrée du code au boot (pour éviter de se retrouver avec un produit complètement inutilisable s'il y a une erreur lors de la mise à jour)

ça veut dire que la place restante en dehors du bootloadeer devra être divisée par deux pour permettre cette bascule

effectivement à terme il sera sur un mega mais pour le moment je le fait sur uno pour ne pas grillé le mega

sur MEGA il y a des trucs à regarder comme GitHub - FleetProbe/MicroBridge-Arduino-ATMega2560: Modified BootLoader to load firmware from sd or flash

sur UNO vous allez vous arracher les cheveux

merci je vais regarder ça

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.