Aggiornamento Sketch via Lan

Ciao a tutti, chiedo il vostro aiuto per capire se qualcuno conosce un sistema per "uplodare" ad un Arduino Mega con shield ethernet o wi-fi, uno sketch .
Per farmi capire meglio.
Sto cercando di dare un modo per fare degli aggiornamenti software a dei sistemi arduino dati a terze persone. Stile aggiornamento firmware che si usa fare un po' su tutte le applliance.
Con la Yun è possibile farlo, ma non ho ancora trovato un sistema (se esiste) per farlo su un mega.

Grazie

Con gli strumenti originali non si può fare. In rete esiste un bootloader modificato che permette l'upload di uno sketch da rete:

C'è anche il bootloader Ariadne (https://github.com/codebendercc/Ariadne-Bootloader)
Ma non sono mai riuscito a farlo funzionare. :sweat_smile:

Quindi tutto da provare insomma... :roll_eyes:

Con gli strumenti originali non si può fare. In rete esiste un bootloader modificato che permette l'upload di uno sketch da rete:
GitHub - esmil/arduino-netboot: A TFTP bootloader for the Arduino Ethernet

Questo è per un bootp e non è quello che cerco...
Io ho bisogno appunto una cosa simile a quello che ha postato PaoloP. Ma dice che non è mai riuscito a farlo funzionare.. e visto che non è l'ultimo arrivato non so se convenga che io provi .

Se ci fosse qualche altra possibilità ne sarei felice :slight_smile:

Grazie

Spiega allora di cosa hai bisogno tu, perché non abbiamo capito.
Per aggiornare uno sketch non hai altra strada che farlo tramite bootloader, nessun programma che è in esecuzione può aggiornare la flash tranne quello appunto nell'area bootloader della memoria del microcontrollore.

Spiega allora di cosa hai bisogno tu, perché non abbiamo capito.

No, penso che abbiate capito. Sono io che mi sono spiegato male.
Quello indicato da te potrebbe essere valido ma via bootp vuol dire che il mega carica ogni volta lo sketch via rete.
Diciamo che è più vicino a quello che voglio io èquello postato da paolop, ma dice che sembra non funzionare.
Alla fine, quello che voglio io è la possibilità di aggiornare in qualche modo lo sketch di un arduino mega via ethernet. Vedi come aggiornare il firmware di un qualsialsi appliance (nas, router,ettcc) che tu prendi un programma scarichi da internet il firmware e lo carichi via rete sull'arduino.
Spero sia più chiaro adesso :slight_smile:

@super forse sei tu che non hai capito. Tutte e due i link sono a dei bootloader sostitutivi di quello originale. E ti permettono di fare quello che dici nell'ultimo post.

Allora vale quanto detto:

leo72:
nessun programma che è in esecuzione può aggiornare la flash tranne quello appunto nell'area bootloader della memoria del microcontrollore.

Quindi ti serve un bootloader, non hai altra strada per cambiare il programma in memoria. Un "aggiornamento" è comunque un cambio di firmware.

Si si, molto probabilmente un bootloader modificato, che riesca a ricevere lo sketch via ethernet.
Sai se esiste qualche cosa in merito ?

superzaffo:
Quello indicato da te potrebbe essere valido ma via bootp vuol dire che il mega carica ogni volta lo sketch via rete.

Questa dove l'hai letta ?
Bootp è un protocollo di rete per assegnare un IP ad un dispositivo durante il boot, non ha niente a che vedere con lo sketch, serve per avere un IP valido quando ancora non stai eseguendo il tuo sketch.
In pratica il bootloader, quando si avvia, si fa assegnare un IP dal server, se è possibile, dopo di che verifica se c'è uno sketch da caricare e procede all'operazione oppure, sia se non c'è lo sketch o manca l'ip, cede il controllo al programma presente sul micro, che è esattamente la stessa cosa che fa il normale boot seriale solo che in questo caso è gestito tramite lan.

superzaffo:
Si si, molto probabilmente un bootloader modificato, che riesca a ricevere lo sketch via ethernet.
Sai se esiste qualche cosa in merito ?

che è questo che ti ha già segnalato Leo.

ciao astro..
No, forse ti stai confondendo con il dhcp. Il dhcp ti assegna l' ip mentre il bootp (boot protocol) fa in modo che un dispositivo possa fare il boot (appunto) via rete, leggendo un il firmware da una posizione in rete.
E questo non è quello che voglio io... io vorrei poter fare solo un aggiornamento firmware dei miei mega via rete.

Superzaffo quel che chiedi non si può fare, ti ho già spiegato che con il bootloader di serie tu puoi aggiornare lo sketch solo se spedito via USB seriale. Se invece vuoi aggiornare in altro modo devi usare un bootloader modificato che legga lo sketch da scheda SD o da ethernet. Ma comunque è un'operazione che può fare solo il bootloader, non c'è altra via (oltre ad un programmatore esterno che lo spedisca via ISP).

Il tuo Arduino MEGA deve montare quel bootloader che ti ho indicato che fa l'aggiornamento dello sketch da rete. Lo sketch controlla se c'è un aggiornamento, nel caso resetta il chip (via watchdog o tramite un circuito di reset esterno) ed al riavvio il bootloader modificato legge da rete lo sketch e cambia quello in memoria.

ok Leo.. tutto chiaro quello che tu dici.
Infatti io sto cercando appunto un bootloader modificato... tipo quello segnalato da PaoloP.
Il tuo richiederebbe un dispositivo esterno che supporti il bootp e tftp services.
Che potrebbe anche andare bene in caso di aggiornamento... ma se il mega si dovesse resettare e non trova il dispositivo, non potrebbe partire.
Quindi a me servirebbe, se esiste, un bootloader che dopo un reset riceva lo sketch via rete (anche via tftp) ma naturalmente se non dovesse sentire dati via lan, vada ad utilizzare lo sketch già memorizzato in precedenza.

superzaffo:
No, forse ti stai confondendo con il dhcp. Il dhcp ti assegna l' ip mentre il bootp (boot protocol) fa in modo che un dispositivo possa fare il boot (appunto) via rete, leggendo un il firmware da una posizione in rete.
E questo non è quello che voglio io... io vorrei poter fare solo un aggiornamento firmware dei miei mega via rete.

Quello che dici è vero solo in parte, dipende tutto dal server, se ha un software nuovo da scaricare avviene in automatico, se non c'è nulla, o non viene assegnato l'IP, Arduino parte col software precedentemente caricato perché il bootloader viene terminato e l'esecuzione passa al programma vero e proprio.

Tutti i bootloader sono scritti in modo che dopo un controllo o un timeout avviino lo sketch presente in memoria. Se restano in loop in attesa dello sketch sul canale che devono controllare vuol dire che non sono scritti bene :wink:

Non mi esprimo però su nessuno di entrambi quelli citati perché non li ho mai provati.

leo72:
Non mi esprimo però su nessuno di entrambi quelli citati perché non li ho mai provati.

Ho dato uno sguardo veloce al codice, se non ho visto male dopo 500 ms di attesa, se non c'è l'IP e almeno una GET di rete valida, si autotermina e cede il controllo allo sketch precaricato.
Se poi funziona sul serio è da verificare :slight_smile:

Ok, vedo magari di provarlo io in questo w.e.

L' ideale sarebbe avere un sistema per il mega uguale a quello della Yun.. a cui tu scegli l' ip della scheda e scarichi lo sketch nello stesso modo di quello seriale.
Anzi.. la cosa più carina sarebbe che dall' interno del software, si potesse dire "Leggi il file da:" e lui lo carica da qualche parte (sd?) e poi si resetta e si aggiorna in automatico...
Ma forse voglio troppo :smiley:

superzaffo:
L' ideale sarebbe avere un sistema per il mega uguale a quello della Yun.. a cui tu scegli l' ip della scheda e scarichi lo sketch nello stesso modo di quello seriale.

Sicuramente si, però non è fattibile direttamente perché sulla Yun è la parte Linux che gestisce questa cosa, in pratica riceve il file .hex via rete e poi invoca avrdude per programmare il 32u4 nel classico modo tramite seriale.
Con l'ethernet shield questa cosa non è fattibile, al massimo puoi scaricare l'hex sulla sd e poi usare un bootloader che la legge, se trova un file .hex valido lo usa per programmare il micro, mi pare che sul forum in lingua Inglese si era parlato di una cosa simile.