Comunicazione seriale fra due arduini o anche più

Comunicazione seriale fra due arduini

Ben ritrovati sul 9minuti.it oggi vedremo insieme come far comunicare due schede Arduino o, come mi piace simpaticamente chiamare, arduini.

Faremo comunicare due arduini con la comunicazione seriale che è quella utilizzata anche nelle porte USB (Universal Serial Bus).

Una volta imparata la comunicazione seriale due Arduini con i pin RX e TX (che nella scheda coincidono con il PIN 0 e 1) potremmo far comunicare fra di loro qualsiasi dispositivo.

Se ci pensate un attimo lo stesso monitor seriale che utilizzate nell’IDE di Arduino per visualizzare i messaggi nel nostro microcontrollore ha la parola seriale.

Arduino attraverso il metodo

invia i messaggi che abbiamo impostato ma non sa chi ci sarà a riceverli.

Se mettessimo un arduino che manda dati e un arduino configurato in modo da leggere i dati che vengono inviati sulla porta seriale riusciremmo ad inviare i dati da una scheda all’altra.

Per far questo abbiamo innanzitutto bisogno di due schede Arduino e dobbiamo caricare due sketch differenti sui due Arduini: uno sketch per il mittente e uno per il destinatario.

Non effettuare alcun collegamento fra i due arduini per il momento.

Mittente

4 – Dichiariamo un array di caratteri chiamato stringa
8 – Inizializziamo la Serial con il metodo begin
12 – Scriviamo sulla seriale la nostra stringa. Il secondo parametro del metodo write è il numero di caratteri che andremo a scrivere e deve essere superiore a quelli della stringa che stiamo inviando (altrimenti ce la taglia in due). Non è un parametro necessario.
14 – Delay che ci permette di eseguire il loop ogni secondo

Destinatario

Ci occuperemo ora del destinatario, che è anche la parte più interessante.

13 – Finché la connessione seriale è disponibile
15 – Leggi venti caratteri dalla porta seriale
16 – Stampa della stringa sul nostro monitor seriale

Collegamento elettrico

Una volta che abbiamo caricato gli sketch sui rispettivi Arduini lasciamo l’Arduino destinatario attaccato al nostro computer con il cavo USB e attacchiamo l’Arduino mittente al destinatario con questo semplice schema elettrico.

I due Arduini uniti per comunicare via seriale

I due Arduini pronti per comunicare via seriale

Come potete vedere RX su uno diventa TX sull’altro. Non parleremo in questa sede di TX ed RX, ma se durante una comunicazione seriale tra più dispositivi doveste avere dei problemi vi consiglio innanzitutto di controllare RX e TX e nel caso di scambiare i due cavi.

Se tutto ha funzionato correttamente dovreste vedere i messaggi stampati sul vostro monitor seriale con i valori dell’Arduino mittente.

Se lo vedete vuol dire che la comunicazione seriale fra due arduini ha funzionato correttamente!

Usiamo la libreria SoftwareSerial

Ora che abbiamo fatto la prima prova siamo pronti a fare un secondo esperimento.

Avere la porta 0 e la porta 1 di Arduino occupate potrebbe essere un problema in certe occasioni.

Se ad esempio volessimo caricare un nuovo sketch in questo momento non potremmo farlo senza prima liberare i pin TX ed RX dell’Arduino destinatario.

Inoltre se noi avessimo più dispositivi che devono comunicare fra di loro come ad esempio due Arduini mittenti e un Arduino destinatario ci troveremmo impossibilitati per mancanza di PIN.

Ci viene in aiuto allora la libreria SoftwareSerial che ci permette di utilizzare dei PIN digitali di Arduino (ovvero la colonna a destra che va da 0 a 13) come se si trattassero dei pin RX e TX.

Ora scriviamo il nuovo codice utilizzando i PIN 7 e 8 invece di 0 e 1, questo solamente per il nostro Arduino destinatario.

4 – includiamo la libreria SoftwareSerial.h
8 – creiamo il nostro oggetto di tipo SoftwareSerial e con nome receiver. Come parametri della funzione daremo i pin utilizzati per RX e TX
12 – chiamiamo il metodo begin() con baudrate di 9600 anche per il nostro oggetto receiver
17 – Finché la connessione seriale è disponibile per l’oggetto receiver allora esegue il ciclo e svolge le stesse cose dello sketch precedente.

Da int a carattere con la funzione itoa

E se invece di una stringa o di un array di caratteri dovessimo passare il valore di un sensore dal nostro Arduino mittente a quello destinatario?

Ci viene in aiuto la funzione itoa() che ci permette di trasformare dei dati di tipo intero in un array di caratteri.

Vediamo il codice dello sketch e poi guardiamo i commento del codice, riga per riga come sempre.

4 – La nostra variabile intera chiamata value che rappresenta il valore del nostro sensore
5 – Il nostro array di char composto chiamato appoggio e in cui salveremo momentaneamente il contenuto della variabile intera prima di inviarlo all’Arduino destinatario
13 – Utilizzo della funzione itoa(). Attenzione ai parametri! Value, il valore del nostro sensore; appoggio, il nostro array di char; 10, il sistema decimale! Se scrivessimo 2 avremmo un numero binario all’interno del nostro array!

Da carattere a intero utilizzando la funzione atoi

Ora il nostro Arduino destinatario dovrebbe ricevere la stringa inviatagli dal mittente.

Per fare in modo che il nostro valore torni ad essere un intero dobbiamo utilizzare la funzione atoi() che, come avrete già capito, è la funzione inversa della itoa() utilizzata in precedenza.

Vediamo lo sketch.

4 – Dichiarazione di un array di caratteri chiamato stringa
5 – Dichiarazione del nostro intero chiamato num. Notare che ho già assegnato un valore. Se la comunicazione fra i due arduini funziona correttamente dovremmo leggere 69, se invece qualcosa dovesse non andare il numero stampato è 888.
16 – Utilizzo della funzione atoi() e assegnazione del numero appena convertito alla variabile intera num

Per questo tutorial è tutto, credo che sia molto interessante occuparsi di comunicazione seriale fra due arduini perché ci consentirà di utilizzare altri protocolli che funzionano sempre in questa maniera come ad esempio il Bluetooth.

Se aveste dubbi o richieste particolari vi invito come sempre a scrivere nei commenti e a farmi sapere se l’articolo vi è stato utile o meno.

Grazie per l’attenzione,
Alessandro

Alessandro

Alessandro è un milanese che vorrebbe scappare da Milano, è appassionato di informatica ma vorrebbe vivere senza telefono, è un artigiano eppure vorrebbe robotizzare tutto, impara una cosa e già vorrebbe studiare dell’altro. Autodidatta da sempre, gli piace sbattere la testa finché tutto non funziona come vuole lui, spesso ci riesce anche! Il motto che si ripete dentro la testa è: “Se ci sono riusciti gli altri ci posso riuscire anche io”.

You may also like...

Cosa ne pensi? Fammelo sapere con un messaggio

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: