Arduino - Comunicazione

Per ottenere questo scambio di dati sono stati definiti centinaia di protocolli di comunicazione. Ogni protocollo può essere classificato in una delle due categorie: parallelo o seriale.

Comunicazione parallela

Il collegamento in parallelo tra Arduino e periferiche tramite porte di ingresso / uscita è la soluzione ideale per distanze più brevi fino a diversi metri. Tuttavia, in altri casi, quando è necessario stabilire la comunicazione tra due dispositivi per distanze maggiori, non è possibile utilizzare la connessione parallela. Le interfacce parallele trasferiscono più bit contemporaneamente. Di solito richiedono bus di dati - trasmissione su otto, sedici o più cavi. I dati vengono trasferiti in enormi ondate di 1 e 0.

Vantaggi e svantaggi della comunicazione parallela

La comunicazione parallela ha sicuramente i suoi vantaggi. È più veloce del seriale, semplice e relativamente facile da implementare. Tuttavia, richiede molte porte e linee di input / output (I / O). Se hai mai dovuto spostare un progetto da un Arduino Uno di base a un Mega, sai che le linee di I / O su un microprocessore possono essere preziose e poche. Pertanto, preferiamo la comunicazione seriale, sacrificando la velocità potenziale per la proprietà dei pin.

Moduli di comunicazione seriale

Oggi, la maggior parte delle schede Arduino sono costruite con diversi sistemi per la comunicazione seriale come dotazione standard.

Quale di questi sistemi viene utilizzato dipende dai seguenti fattori:

  • Con quanti dispositivi il microcontrollore deve scambiare dati?
  • Quanto deve essere veloce lo scambio di dati?
  • Qual è la distanza tra questi dispositivi?
  • È necessario inviare e ricevere dati contemporaneamente?

Una delle cose più importanti riguardo alla comunicazione seriale è il file Protocol, che dovrebbe essere rigorosamente osservato. È un insieme di regole, che devono essere applicate in modo che i dispositivi possano interpretare correttamente i dati che si scambiano reciprocamente. Fortunatamente Arduino se ne occupa automaticamente, così che il lavoro del programmatore / utente si riduce alla semplice scrittura (dati da inviare) e lettura (dati ricevuti).

Tipi di comunicazioni seriali

La comunicazione seriale può essere ulteriormente classificata come:

  • Synchronous - I dispositivi sincronizzati utilizzano lo stesso orologio e la loro temporizzazione è sincronizzata tra loro.

  • Asynchronous - I dispositivi asincroni hanno i propri clock e vengono attivati ​​dall'uscita dello stato precedente.

È facile scoprire se un dispositivo è sincrono o meno. Se viene fornito lo stesso clock a tutti i dispositivi collegati, sono sincroni. Se non è presente una linea di clock, è asincrona.

Ad esempio, il modulo UART (Universal Asynchronous Receiver Transmitter) è asincrono.

Il protocollo seriale asincrono ha una serie di regole incorporate. Queste regole non sono altro che meccanismi che aiutano a garantire trasferimenti di dati robusti e privi di errori. Questi meccanismi, che otteniamo per evitare il segnale di clock esterno, sono:

  • Bit di sincronizzazione
  • Bit di dati
  • Bit di parità
  • Velocità in baud

Bit di sincronizzazione

I bit di sincronizzazione sono due o tre bit speciali trasferiti con ciascun pacchetto di dati. Sono il bit di inizio e il bit di stop. Fedeli al loro nome, questi bit segnano rispettivamente l'inizio e la fine di un pacchetto.

C'è sempre un solo bit di inizio, ma il numero di bit di stop è configurabile su uno o due (sebbene normalmente sia lasciato a uno).

Il bit di start è sempre indicato da una linea dati inattiva che va da 1 a 0, mentre i bit di stop torneranno allo stato inattivo mantenendo la linea su 1.

Bit di dati

La quantità di dati in ogni pacchetto può essere impostata su qualsiasi dimensione da 5 a 9 bit. Certamente, la dimensione dei dati standard è il byte di base a 8 bit, ma altre dimensioni hanno i loro usi. Un pacchetto di dati a 7 bit può essere più efficiente di 8, soprattutto se stai trasferendo solo caratteri ASCII a 7 bit.

Bit di parità

L'utente può selezionare se deve esserci o meno un bit di parità e, in caso affermativo, se la parità deve essere pari o dispari. Il bit di parità è 0 se il numero di 1 tra i bit di dati è pari. La parità dispari è esattamente l'opposto.

Velocità in baud

Il termine baud rate viene utilizzato per indicare il numero di bit trasferiti al secondo [bps]. Notare che si riferisce a bit, non a byte. Di solito è richiesto dal protocollo che ogni byte venga trasferito insieme a diversi bit di controllo. Significa che un byte nel flusso di dati seriale può essere costituito da 11 bit. Ad esempio, se la velocità di trasmissione è di 300 bps, è possibile trasferire un massimo di 37 e un minimo di 27 byte al secondo.

Arduino UART

Il codice seguente farà sì che Arduino invii ciao mondo all'avvio.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
   Serial.println("hello world"); //print hello world
}

void loop() {

}

Dopo che lo schizzo di Arduino è stato caricato su Arduino, apri il monitor seriale nella sezione in alto a destra dell'IDE di Arduino.

Digita qualsiasi cosa nella casella superiore del monitor seriale e premi invio o invio sulla tastiera. Questo invierà una serie di byte ad Arduino.

Il codice seguente restituisce tutto ciò che riceve come input.

Il codice seguente farà in modo che Arduino fornisca l'output a seconda dell'input fornito.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available()) //if number of bytes (characters) available for reading from { 
      serial port
      Serial.print("I received:"); //print I received
      Serial.write(Serial.read()); //send what you read
   }
}

Notare che Serial.print e Serial.println restituirà il codice ASCII effettivo, mentre Serial.writerestituirà il testo effettivo. Vedere Codici ASCII per ulteriori informazioni.