Ciao a tutti, in questi giorni ho un po' di tempo, e stavo guardando di sviluppare un progetto basato su tre arduini, connessi tra di loro con il bus485; tutto bene, ho superato anche qualche dubbio sulla comunicazione, ma sono andato oltre ed ho voluto pensare ad un sistema master/slave, ovvero creare una rete in cui c'è un arduino master e due slave ogniuno programmato singolarmente.
Ma poi sono andato oltre, ed ho detto: perchè non creare un sistema di aggiornamento automatico, che aggiornando il master automaticamente vada lui ad aggiornare gli slave?
Così mi risparmierebbe il dover programmare tre micro anzichè 1.
Ma mi fermo qui, e chiedo a tutti gli esperti di arduino, è fattibile una cosa del genere o è fantascienza?
Se fattibile, qualche idea di come farlo?
Ho sfogliato un po' in rete, ma non ho trovato esattamente quello che cerco io, ho trovato come programmare a distanza arduino, come programamre arduino via ISP con un altro arduino....
Grazie.
Mah, non credo che sia possibile, almeno non con un Arduino che ne programma altri perché temo che non abbia sufficienti risorse di memoria. Ma, scusa la curiosità, perché vuoi "riprogrammare" degli Arduini remoti? In genere al massimo quello che cambia sono dei dati o dei valori di configurazione, quindi si possono inviare queste informazioni ad un Arduino remoto ad esempio tramite seriale o TCP/wiFi o nel tuo caso via bus, quindi il destinatario salverà nella sua EEPROM le nuove impostazioni. Io ad esempio ho fatto proprio così per un sistema di monitoraggio dell'inverter fotovoltaico (la comuniazione la faccio via UDP).
L'aggiornamento del firmware in un sistema distribuito è molto sentito, perché è molto comodo, uno dei problemi però è che i vari bootloader delle varie unità devono essere protetti contro la scrittura accidentale, affinché se il sistema va in crash il bootL almeno continua a funzionare, un'altra cosa è che nel bootloader deve venire assegnato anche l'indirizzo dell'Unità altrimenti il sistema non funziona, quindi secondo me sarebbe bene assegnarlo mediante dip-switch
Forse non mi sono spiegato bene, la necessità non è quella di programmare stand alone ma quella, in un sistema con più processori, di programmarne uno solo che dopo programmi gli altri, senza doverli programmare da soli.
Credo sia molto complicato, soprattutto per me che non sono un programmatore, e credo che alla base debba modificare il bootloader di tutti i micro nel sistema.....
Così per curiosità, ho messo questo post per poter capire se qualcuno l'avessa già fatto o ci avesse mai pensato.
manolomao:
la necessità non è quella di programmare stand alone ma quella, in un sistema con più processori, di programmarne uno solo che dopo programmi gli altri, senza doverli programmare da soli.
Si ma se per "uno" e "altri" intendi degli Arduino, ossia la tua frase sarebbe "in un sistema con più Arduino, di programmarne uno che dopo programmi gli altri Arduino" la mia risposta è sempre "no, non ha sufficienti risorse per programmare gli altri Arduino" tantomeno farlo da remoto e in automatico senza intervento "umano".
Se anche fosse possibile cambiare/aggiornare firmware da remoto, io lo farei da un PC verso tutta la "stella" di controllori, via TCP. Ma Arduino per quanto ne so non consente di fare questo, al limite per evitare di andare in giro con un laptop e collegarlo via USB ad ognuno degli Arduino si potrebbe pensare di collegare un apposito circuito il quale potrebbe prendere da una scheda SD il nuovo firmware e farne upload locale alla pressione di un pulsante, quindi semplicemente andando in giro con una schedina SD di aggiornamento.
Se quindi non è una tua esigenza specifica, mi spiace ma non credo che si possa fare quello che chiedi. Se invece è una esigenza specifica, allora come dicevo a me al massimo è bastato fare aggiornamenti da remoto (via TCP o UDP) dei soli parametri di funzionamento dello stesso firmware da salvare in EEPROM: se il programma è stato fatto bene, cercando di renderlo più flessibile possibile e/o per estensioni successive, è sufficiente.
In realtà ci sono librerie per fare OTA su Arduino, ma richiedono, come minimo, MCU che abbiano almeno 64KB di flash (quindi ATmega1284, ATmega2560 e MCU della serie MKR con SAMD21).
Se interessati provate a dare un'occhiata QUI ...
... ah, sull'affidabilità della cosa NON mi esprimo ... mai provato, per cui ... a vostro rischio e pericolo ... :
Guglielmo
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.