Domotica: programmare Arduino da.... un altro ?

Ciao a tutti,
seguo con interesse tutti i post che riguardano la domotica perché sto pensando di giocarci un po', anche se con "calma": preferisco pensare bene prima di iniziare a fare qualcosa perché non voglio rischiare di spendere soldi su qualcosa che poi dovesse rivelarsi non efficace.
Ho letto la maggior parte dei post sul tema, compreso quello di 31 pagine aperto da Massimo lo scorso anno, e quello recente di Astroz per chiedere aiuto per il suo progetto (io sono a 700 km da Roma: niente da fare.... 8)).

Veniamo al punto.
Il sistema al quale sto pensando dovrebbe essere composto da:

  • un serverino sul quale fare girare il sw principale (Domotiga? o qualcosa di custom)
  • 2 o 3 schede Master (Arduino Mega)
  • tot schede slave (Arduino Uno)

in realtà anche le slave sarebbero "master" nel senso che potrebbero anch'esse inviare comandi, ma le ho chiamate "slave" per indicare il fatto che le immagino di un livello inferiore a quello delle master principali.

La differenza principale tra master e slave (almeno per come le immagino io ) è che le master sarebbero collegate al server via ethernet mentre le slave sarebbero collegate alle master o via ethernet o via rs485 (in relazione alla domanda che farò dopo).

Infatti: di sicuro ho in mente un sistema multimaster, poi il fatto che il bus sia di un solo tipo o no dal mio punto di vista è meno importante.

Su parecchie cose mi ritrovo con il sistema che ha fatto (e descritto) Astroz pochi giorni fa.

Nel pensare a questo sistema mi sono reso conto che uno dei difetti più grandi è che la programmazione dovrebbe essere "flessibile", nel senso che dal server vorrei poter inviare sugli slave degli aggiornamenti dello sketch "residente", cioè del programma che dovrebbe consentire di far funzionare gli slave anche in presenza di guasto sul bus (ovviamente con funzioni minimali e riferite agli attuatori direttamente collegati ad esso), quando cioè non potrebbero ricevere comandi dal server o dalle altre unità.

L'esigenza, cioè, sarebbe di poter caricare nuovi sketch sugli slave senza dover per forza aprire la scatola di derivazione che contiene lo slave stesso al fine di riprogrammarlo collegandolo fisicamente al pc.
La domanda quindi è: sarebbe possibile farlo ?
Via ethernet se non erro non è fattibile (mi sembra di aver letto recentemente un post che lo affermava). Ricordo bene ?
E via seriale ? credo che riprogrammare la MCU che sta "ricevendo" il programma sul bus non sia fattibile, ma se su ogni slave mettessi due MCU? ..... una che fa girare lo sketch normale e la seconda che subentra solo nei casi in cui si debba riprogrammare la prima ?

Basta, ho scritto troppo.... poi vi annoio! ]:slight_smile:
A voi la parola! e grazie a chi interverrà...
Ciao

p.s. scusate il post un po' "filosofico" .....

  1. come fai a programmare i slave per oviare il malfunzionamento del del bus attraverso il bus malfunzionante?
  2. non puoi programmare gli Arduini ne attraverso ethernet ne attraversu un bus RS485 (non sapresti quale é da riprogrammare).
    Pui programmare gli arduini con un collegamento punto a punto con RS232 o RS485. oppure con un programmatore ISP.
    Quello che puoi fare é prevedere piú modi di funzionamneto dello slave che cambia con un comando del master o che il slave controlla attivamente l' attivitá del master e in assenza comuta modalitá
    Ciao Uwe

Ciao Uwe,

per il tuo punto 1)
forse mi sono espresso male io, ma è ovvio che non intendevo fare quello! :smiley:
Nel caso di bus non funzionante lo slave dovrebbe continuare a lavorare per conto suo, con lo sketch già in memoria.
Quello che volevo fare io è di poter riprogrammare gli slave ogni tanto (ad esempio perché decido di cambiare la logica di attivazione di una lampada), naturalmente con bus funzionante in quel momento.

per il punto 2)
vorrei approfondire il senso di quel tuo

Puoi programmare gli arduini con un collegamento punto a punto con RS232 o RS485

perché questo potrebbe aprire uno spiraglio.
Infatti se potessi programmare con RS485 punto punto, potrei mettere in piedi un sistema di questo tipo:

  • due MCU su ogni slave, chiamiamole A e B
  • quando il master vuole riprogrammare la MCU B (quella con lo sketch "normale"), manda sul bus un codice specifico
  • quel codice è riconosciuto da A e B. Ma B non fa nulla, mentre A si "attiva" e, come prima cosa, "isola" i pin di B "togliendolo" dal bus e lasciandolo collegato solo ad A
  • poi, sempre A riceve dal master il nuovo skecth e lo "passa" in modo opportuno a B programmandolo

ma ovviamente questo potrebbe funzionare solo se si potesse programmare B da A tramite RS485. Non ne ero al corrente..... sai per caso indicarmi il link di qualche progetto che lo fa ?
Così potrebbe funzionare, secondo te? o sto usando troppa immaginazione ? :grin:

Ciao

non proprio.
Intendevo che deve esserci un collegamento diretto tra 1 Arduino e 1 PC. Il tipo di collegamento fisico non é importante. Deve essere bidirezionale e deve poter resettare l'Arduino. RS232, XBee, USB sodisfano questi requisiti. RS485 non resetta.
Se modifichi il Bootloader oppure se programmi un secondo microcontroller che puó fungere da PC oppure da programmatore ISP compreso la gestione del Upload (lo sketch ArduinoISP descritto in http://arduino.cc/en/Tutorial/ArduinoISP non basta perché da solo il collegamento HW e non la gestione del Upload) potrebbe funzionare ma é un impresa quasi impossibile dato le necessitá di conoscenza ottima della materia e del tempo impegnato per realizzarlo.

Ciao Uwe

Ciao!! :slight_smile:

Per poter fare una cosa del genere (sarebbe veramente molto apprezzata...ci ho ragionato un sacco su sta cosa)...bisognerebbe riscrivere il bootloader...sostanzialmente rimettere le mani sul concetto proprio di "arduino"...secondo me prima o poi il team di sviluppo (Banzi & co) inventeranno qualcosa per riprogrammare l'arduino da remoto...ma non sò quando questo accadrà!

Anche xkè prevedere un bootloader che si metta in ascolto sulla Ethernet x ricevere un firmware che poi vada a caricare sul MCU stesso...significherebbe che il bootloader deve includere tutto il software necessario a mandare in rete il nodo durante il boot...quindi sostanzialmente il driver Ethernet.h e ciò che ne consegue! Questo andrebbe a ingigantire di tanto il bootloader riducendo di fatto lo spazio disponibile x il programma utente!

Invece x quanto riguarda la riprogrammazione da bus di campo tipo RS485, bisognerebbe adattare il bootloader a interagire con il nodo master prevedendo la propria identificazione...cioè se il nodo ha un id X, il bootloader deve ascoltare software che arriva solo "impacchettato per X"...e quindi bisogna rivedere le funzioni di programmazione (il pacchetto deve essere incapsulato in un altro pacchetto che contiene la destinazione) e inoltre il bus RS485 è half duplex (a meno che non si usino due coppie...4 fili)...e non credo che il protocollo di riprogrammazione sia half duplex...lavorando su RS232 xkè limitarsi all half duplex!!!

Insomma un gran bordello!!! Però trovare una soluzione sarebbe una gran figata!!!!

Ahia, ragà mi avete un po' smontato...... :frowning:
Sapevo che sarebbe stato difficile, ma voi proprio mi avete messo davanti a un bel muro alto alto !! :disappointed_relieved:

A modificare il bootloader non ci penso proprio, anche perché concordo con Uwe che sarebbe già quello un progetto! mentre io volevo giocare un po' con la domnotica, mica coi bootloader.... :stuck_out_tongue:

Sinceramente non mi sembrava una cosa campata per aria: con una sola MCU sono d'accordo con voi, ma con due (sullo stesso slave) speravo fosse più semplice.
Avevo preso l'idea (quanto meno quella degli n master + m slave) dal sistema HomePLC, non so se lo conoscete..... lo ritengo molto molto valido, e tra le ottime cose che consente c'è la possibilità di riprogrammare gli slave. E il bus è proprio 485....
Oltre tutto dato il costo dei moduli, non penso che ci siano dentro degli i7..... secondo me contengono un Avr o poco più, quindi.....

Va beh, pazienza..... aspetteremo qualche altra scheda, magari guardando una delle tante che consentono di mettere open-wrt (anche se non c'entra nulla con Arduino, quindi qui sono OT): proprio qui ne sono state segnalate alcune davvero interessanti e a costi accessibili.

Stay tuned ! :slight_smile:
Ciao a tutti

@astroz:
ciò che dici è improponibile dato che lo spazio per il bootloader è prefissato a 4 valori: 512-1024-2048-4096 byte.
Non puoi eccedere tali valori, non avresti più la "protezione" dell'area del bootloader dalle sovrascritture accidentali date da sketch molto grandi.
Però basterebbe un chip esterno che si dedica alla gestione della connessione ethernet, forse. Cmq sicuramente non è una cosa semplice.

interessanti ragionamenti... quindi mi ci metto anche io (come solito, se si parla di domotica)!

qualche tempo fa mi sono imbatutto in questa cosa:

non è esattamente quello di cui avete parlato finora, ma ci va molto vicino concettualmente (se facciamo della filosofia, facciamola!), e per come vedo io certe cose è perfino meglio.

più prossimo a quanto cerca andrenino è invece quanto indicato qui:

http://blog.thiseldo.co.uk/?p=620

se avete dovuto scaricare la libreria più diffusa per il chip ethernet ENC28J60 (usato in molti shields -e affini- low cost), avrete notato che è una pagina del blog di chi la mantiene, quindi parrebbe qualcuno con un po' di voce in capitolo per dire che una cosa si può fare.

questi due commenti a caldo, giusto per alimentare il fuoco della discussione...

Ciao,
il nanode è già più complicato: bisogna mettere un'eeprom esterna, eccetera. Il costo e la complessità salgono....
Però a partire da questi spunti ho trovato un post interessante:

nel penultimo post c'è un link ad un progetto che sembra proprio consentire di riprogrammare lo skecth via ethernet.
Certo: l'autore ha un solo post all'attivo..... sarà mica un fake ?
Ci vorrebbe un volontario per provarlo ! ]:slight_smile:

riguardo al boot via tftp, se ne era fatto menzione nei canali ufficiali tempo fa, e puoi trovare qualcosina nelle pagine Labs Arduino:
http://labs.arduino.cc/TFTPBootloader/Index

Cmq il link che hai condiviso è interessante, quando ho un poco di tempo lo ravano e provo a vedere se fa quel che dice.