Consigli impianto domotico Arduino e Raspberry based

Salve, sto progettando di fare un piccolo impianto domotico basato essenzialmente su Raspberry, che ha la funzione di coordinare vari moduli arduino based (Atmega 328).
Il primo problema che mi sono posto è stato la connessione che permette ai vari moduli slave e raspberry di comunicare, inizialmente avevo pensato al wifi ma non trovavo moduli economici e quindi avevo ripiegato sui moduli Xbee serie 2 XB24-BWIT-004 DIGI | Mouser Italia.
Poi però ho trovato questi moduli wifi http://it.mouser.com/ProductDetail/Microchip-Technology/MRF24WB0MA-RM/?qs=sGAEpiMZZMsRr7brxAGoXSHY4wabHGUCdbSAVy%252bJ%252bo8%3D e mi chiedevo se potessero essere gestiti dai vari moduli slave, basati essenzialmente su degli atmega328 che ho già.
Attendo risposte da qualcuno con maggiori conoscenze.
Grazie.
Valerio.

quei chip sono alla base degli shield wifi della asinclab... sul loro sito trovi schemi e librerie :wink:

lesto:
quei chip sono alla base degli shield wifi della asinclab... sul loro sito trovi schemi e librerie :wink:

Mi sà che per comodità opterò per questo modulo http://it.mouser.com/ProductDetail/Roving-Networks/RN171XVW-I-RM/?qs=sGAEpiMZZMsSm7LhMeloEDuLr0wvUPSm

quello fa "solo" le wifi b/g, quello asinclab fa anche la "n" che ha un range più ampio...

però sembra molto più semplice da usare :wink:

lesto:
quello fa "solo" le wifi b/g, quello asinclab fa anche la "n" che ha un range più ampio...

però sembra molto più semplice da usare :wink:

più che altro sarà un casino saldarlo il primo modulo.
Di quanti metri varia il range ? Se c'è per caso un'altro modulo che mi consigli dimmelo pure.

dipende dalle potenze e le antenne in gioco.

In generale puoi fregartene, al massimo ti prendi un ripetitore wifi...

e se invece li colleghi via cavo?
colleghi il cip master alla raspberry trammite porta usb e gli altri cip slave al cip master trammite il protocollo i2c

l'i2c è per piccole distanze, e la raspberry ha l'uscita i2c comunque (alcuni dei suoi pin), quindi non serve nemmeno passare dall'USB.

per le grosse distanze c'è da valutare la seriale

se non sbaglio il protocollo i2c va bene fino a che la distanza è minore al metro mentre per la comunicazione seriale bisogna diminuire la velocità in modo roporzionale alla distanza (più lontano è più lenta la connessione).

lupo95:
se non sbaglio il protocollo i2c va bene fino a che la distanza è minore al metro mentre per la comunicazione seriale bisogna diminuire la velocità in modo roporzionale alla distanza (più lontano è più lenta la connessione).

non credo che l'i2c sia un metodo di comunicazione percorribile in quanto si parla di distanze nell'ordine di decine di metri.

allora in questo caso mi sa che dovrai proprio utilizzare qualche connessione wirless

lupo, esistono vari protocolli seriali che coprono tranquillamente anche le centinaia di metri.. e ricorda che i cavi hanno sempre range più grandi del senza fili, lo svataggio è il costo del cavo e della posa

giusto non ci avevo pensato (eppure ho la connessione a internet trammite cavo :grin:)
comunque grazie per la correzione ne terrò conto magari in un progetto futuro :slight_smile:

RS485 ?
:slight_smile:

Preferisco in ogni caso usare il wifi anche perchè ho 3 ripetitori sparsi per casa.
Ma è possibile ad esempio inviare una stringa tramite wifi dal raspberry al modulo slave atmega328 ? Se si potete linkarmi qualche ldocumento.

sì, che documento vuoi? lato raspberry devi apire un socket TCP (che linguaggio vuoi usare? sconsiglio roba a basso livello tipo C e C++ se non li conosci di già)
lato arduino ci sono mille esempi, guarda quelli per la wifi shiled, non saranno identici a tutte le librerie wifi per arduino, ma molto simili :slight_smile:

per raspberry pensavo di programmare in python oppure C che bene o male conosco.
una domanda fondamentale, ma il sistema devo farlo funzionare in questo modo: raspberry invia ad un modulo slave la stringa "accendi luce X" e il modulo slave leggendo la stringa accende la luce. Mi spiego meglio, per identificare le azioni che il modulo slave deve compiere, devo utilizzare delle stringhe oppure dei caratteri singoli tipo "a","b", "c" ?

il C no, se non sai cosè un thread, un processo, un lock, un socket... lascia perdere. phyton è meglio.

in TCP puoi inviare dei byte, esattamente come la seriale. se poi li interpreti singolarmente o a gruppi, con codifica ASCII, UTF-8 o byte grezzi sta a te.

La seriale arduino usa la codifica ASCII per dar modo di dare un output leggibile.

NRF24L10+ ? è abbastanza economico, l'unica cosa da vedere è il range

LeonidRusnac:
NRF24L10+ ? è abbastanza economico, l'unica cosa da vedere è il range

Ci avevo pensato però non mi convince molto come affidabilità.

lesto:
il C no, se non sai cosè un thread, un processo, un lock, un socket... lascia perdere. phyton è meglio.

in TCP puoi inviare dei byte, esattamente come la seriale. se poi li interpreti singolarmente o a gruppi, con codifica ASCII, UTF-8 o byte grezzi sta a te.

La seriale arduino usa la codifica ASCII per dar modo di dare un output leggibile.

ok, allora sicuramente passo al python, mi studio un pò la cosa e poi aggiorno se ho dei dubbi.