auto upload via LAN ?

Bonjour

J'aimerais avoir vos avis sur une idée qui m'est venue.

Je vais avoir un petit parc d'automates basés sur une arduino avec shield ethernet. Ceux-ci auront tous le même programme chargé en flash.

Pour gérer les montées de version logicielles, je souhaiterais pouvoir mettre à disposition le .hex en un point unique du réseau, pour qu'ensuite chaque arduino se mette à jour automatiquement.

Voici un premier scénario : 1) l'arduino connaît l'emplacement du fichier de référence sur le réseau (paramétrage embarqué). 2) il vérifie à intervalles réguliers la version du fichier en ligne, et en cas de montée de version : 3) l'arduino télécharge la nouvelle référence en la stockant sur la carte SD du shield ethernet 4) il reboote et le bootloader exploite le fichier local pour réécrire la flash

Cela vous paraît jouable ?

J’ai vu au moins un bootloader qui se met à jour par la carte SD, il faudrait que je retrouve le site.

EDIT:

quelques pistes

Bonjour, Je pense que les points 1 et 2 sont possibles. J'avais regardé pour une solution équivalente ( je n'ai jamais mis en pratique...), mais si tu y arrives, je regarderais de près ce fil de discussion.

Pour le 3 et 4 aucune idée. Il faudrait voir du côté du protocol STK500 comment cela est géré ( comme il faut envoyé des instructions au bootloader je doute que l'arduino puisse lire le programme sur la carte SD. Sauf s'il est monté avec une autre puce qui gère ce passage, la je pense direct à la puce ESP8266. J'avais vu un thread où on parlait de l'upload grâce à cette puce ;)).

Sinon, une solution avec un raspberry pi peut être celle-ci :

Il faut regarder du côté du TFTP et malheureusement, j'ai l'impression qu'on doit bel et bien changer le bootloader d'origine ( pas très dur mais faut le changer quand même ... )

Ici, c'était plutôt super bien expliqué : http://www.freetronics.com.au/pages/how-to-upload-a-sketch-to-your-arduino-via-a-network#.Vegjgfntmko

Après il faut créer un petit serveur qui va gérer le lan/arduino ( côté Rasp.) L'arduino sera monté avec un client ( qui check s'il y a des versions supérieures à la sienne). S'il y a client, il faut qu'il indique au Rasp. que celui-ci est prêt à recevoir un nouveau programme.

-> Dès que le Rasp. reçoit cette info, il entame la procédure d'upload.

PS : si je retrouve le fil avec l'esp8266, je posterai le lien ici ;)

La modification du bootloader standard est en effet incontournable.

Les TFTP bootloader que j'ai vus me semblent assez expérimentaux, et surtout je leur trouve un gros défaut : ils imbriquent les aspects réseau au bootloader, ce qui me paraît manquer de robustesse. Quid d'une coupure réseau en pleine écriture de la flash ? Et puis j'aime pas trop un bootloader qui embarque des paramètres réseaux (adresses ip, ports, etc.) qu'il faut bien stocker quelque part, en l'occurence dans un bout d'EEPROM réservé à cet usage.

Plus j'y pense, et plus je me dis que le problème est à couper en deux.

D'abord le plus gros morceaux : un bootloader qui vérifie la présence, à la racine de la SD, d'un fichier hex au nom fixe, dont la signature est différente de celle de la flash, et qui met à jour la flash si nécessaire. Tout en restant compatible avec un simple upload via la liaison série (qui, du coup, recopierait également le fichier hex sur la SD). Avec cette première étape on pourrait déjà uploader un nouveau programme, simplement en insérant une carte SD contenant la nouvelle version du fichier hex.

Ensuite, et en dehors du bootloader, gérer la synchronisation avec un serveur distant pour récupérer la dernière version du fichier hex et la stocker sur la carte SD, avant de déclencher un reboot. Cette partie me paraît beaucoup facile si on l'intègre au programme principal, ce qui la rend au passage elle-même upgradable pour y ajouter plein de fonctionnalités. Par exemple, gérer des familles de fichiers .hex correspondant aux versions successives du programme, et paramétrer dans l'eeprom le mode de mise à jour souhaité (avec les services qui vont bien pour modifier l'eeprom à distance) : - mise à jour auto avec la dernière version de prod - mise à jour auto avec la dernière version beta (pour pilote sur un arduino avant généralisation) - mise à jour auto avec la dernière version de dev - pas de mise à jour mais avertissement d'une nouvelle version de prod disponible - pas de mise à jour ni avertissement. - notification (mail) de mise à jour effectuée

Merci pour les liens harizanov.com Je vais creuser ça

La solution rabattage sur mémoire flash puis MAJ depuis cette flash est une procédure robuste d'une manière générale, encore plus quand il y a du réseau au milieu ... Donc c'est la bonne voie.

Transférer un .hex de devrait vraiment pas être compliqué dans la mesure où c'est un simple texte.

C'est plus la partie bootloader qui risque d'être velue ...

Les Moteino (petites cartes compatibles arduino) incluent cette mise à jour via une mémoire flash: Moteino MEGA

En triant mes favoris je suis tombé sur ça :

https://github.com/kehribar/bee-bootloader