Comunicazione seriale tra due schede Arduino – #01

Comunicazione seriale con Arduino

Arduino dispone di diverse modalità di comunicazione attraverso la porta seriale. Iniziamo a vedere i concetti alla base di tale meccanismo.

Iniziamo con questo articolo una serie di brevi tutorial sull’uso del protocollo di comunicazione seriale di Arduino. Vedremo la comunicazione a due fili, l’utilizzo del protocollo RS232, la connessione con boost ed infine presenteremo cenni esplicativi della comunicazione attraverso BlueTooth.

Gli articoli saranno progressivi, usciranno il venerdì e conterranno informazioni e schemi per costruire i propri progetti, ma soprattutto, nello spirito di Moreware, per cercare di comprendere i meccanismi di funzionamento degli elementi presentati.

Comunicazione seriale e parallela

In elettronica possiamo trasmettere le nostre informazioni fondamentalmente in due modi: a gruppi di bit o inviarli uno alla volta a parità di clock della CPU. Va da sé che la trasmissione di dati in parallelo appaia più efficiente, dal momento che per ciascun ciclo di clock cengono trasmesse più informazioni. Tuttavia la trasmissione seriale è decisamente più semplice da implementare, meno suscettibile al rumore elettrico, e tutto sommato non richiede particolari caratteristiche di controllo.

Segnali dati e gestione di una porta seriale sono controllati dall’UART (Universal Asynchronous Receiver Transmitter), un chip presente  sul nostro Arduino.

Contrariamente a quanto si crede, l’UART può essere impiegato anche senza la porta seriale RS232, come vedremo nel prossimo esempio.

Comunicazione attraverso pilotaggio UART

Arduino UART

Come dice il nome, un UART rappresenta un sistema di ricetrasmissione che consente di inviare dati da una scheda all’altra. L’unico accorgimento è quello di porre entrambe le schede su una massa comune, in modo che i segnali HIGH e LOW siano coerenti tra loro.

Nei nostri esempi l’UART utilizzerà il cosice ASCII per trasmettere le informazioni: esso trasformerà i codici inviati serializzandoli in sequenze di bit. Vediamo un esempio.

Dobbiamo trasmettere la lettera ‘A’: come sappiamo, il codice ASCII di A è 65, ed il suo valore binario corrisponde a 01000001. Il codice ASCII prevede come codifica 7 bit, quindi (per non perdere precisione) dovremo trasmettere ‘1000001’. Il numero sarà poi inserito all’interno di un inviluppo che prevede un bi di start, un eventuale bit di parità, uno o due bit  di stop. Vediamo come funziona.

Il protocollo di comunicazione

Il livello logico del segnale è HIGH, a livello logico 1, e verrà posto a LOW (livello logico 0) dal bit di START. a questo punto verranno trasmessi i bit del nostro carattre ‘A’, dal bit meno significativo (LSB) al bit più significativo (MSB). Al termine della trasmissione potrà essere aggiunto un bit cosiddetto di parità, per garantire una minima sicurezza nella precisione dei dati trasmessi. Infine, per  dichiarare che i bit da trasmettere sono terminati, viene inviato uno (o due) bit di stop.

Arduino Seriale

Se la spiegazione vi ha confuso le idee, non preoccupatevi: Arduino dispone di un’ottima libreria per la gesione delle comunicazioni seriali in modo trasparente per l’utente finale.

Arduino: collegamenti seriali

Prima di mettere mano al codice, tuttavia, occorre ancora definire un paio di informazioni necessarie. Abbiamo visto nell’illustrazione di apertura che occorre collegare tra loro i  pin GND delle due schede da collegare, quindi collegare il pin di trasmissione (TX) dell’uno al pin di ricezione (RX) dell’altro. La configurazione dei “treni di bit” consentirà una comunicazione bidirezionale, o full-duplex, tra  sorgente e destinatario, grazie alle caratteristiche interne dell’UART. Ma quali sono i “livelli di tensione” supportati da Arduino? In altri termini, come potremo distinguere un segnale MARK da un segnale SPACE, un  livello HIGH da un livello LOW?

Comunicazione seriale con Arduino

Come sappiamo, la logica digitale di Arduino UNO prevede una comunicazione TTL con livelli di tensione compresi tra 0 e + 5V. Purtroppo questo non è sempre vero per le altre schede, che potrebbero lavorare ad esempio tra 0V e +3.3V. Arduino potrà ricevere tranquillamente un trno d impulsi da un sistema che lavori a 3.3V (superiore ai 2V minimi necessari per essere riconosciuti come HIGH da Arduino), ma occorrerà prestare la massima attenzione quando trasmetteremo i dati verso un ricevente che lavori a +3.3V. Per evitare che tale sistema venga irreparabilmente danneggato da una tensione eccessiva, occorrerà predisporre un partitore di tensione (ne abbiamo parlato diffusamente in questo articolo).

Ed ora un po’ di software

Per questo primo esempio creeremo un framework utile a descrivere il nostro sistema di ricezione: colleghiamo i pin come nella figura di apertura (e riportato nel commento iniziale del sorgente). Definiamo il formato del dato da trasmettere (byte), quindi inizializziamo la seriale e leggiamo il dato se è stato trasmesso.

Nel prossimo articolo del venerdì analizzeremo un sistema completo, hardware e software, per trasmissione e ricezione di dati attraverso collegamento seriale. Arrivederci tra sette giorni!

 

Join our groups on Telegram…

… and don’t forget our social channels!

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.