Sommario:
- Forniture
- Passaggio 1: connessioni fisiche
- Passaggio 2: come utilizzare la libreria
- Passaggio 3: trasmissione dei dati di base
- Passaggio 4: ricezione dei dati di base
- Passaggio 5: test
Video: Comunicazione seriale Arduino: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Molti progetti Arduino si basano sulla trasmissione di dati tra diversi Arduino.
Che tu sia un hobbista che sta costruendo un'auto RC, un aeroplano RC o progettando una stazione meteorologica con un display remoto, dovrai sapere come trasferire in modo affidabile i dati seriali da un Arduino a un altro. Sfortunatamente, è difficile per gli hobbisti far funzionare la comunicazione di dati seriali nei propri progetti. Questo perché i dati seriali vengono inviati come un flusso di byte.
Senza alcun tipo di contesto all'interno del flusso di byte, è quasi impossibile interpretare i dati. Senza essere in grado di interpretare i dati, i tuoi Arduino non saranno in grado di comunicare in modo affidabile. La chiave consiste nell'aggiungere questi dati di contesto al flusso di byte utilizzando un progetto di pacchetto seriale standard.
La progettazione di pacchetti seriali, il riempimento dei pacchetti e l'analisi dei pacchetti sono complessi e difficili da ottenere. Fortunatamente per gli utenti Arduino, sono disponibili librerie che possono eseguire tutta questa logica complessa dietro le quinte in modo che tu possa concentrarti sul far funzionare il tuo progetto senza ulteriori problemi. Questo Instructable utilizzerà la libreria SerialTransfer.h per l'elaborazione dei pacchetti seriali.
In breve: questo Instructable spiegherà come implementare facilmente dati seriali robusti in qualsiasi progetto utilizzando la libreria SerialTransfer.h. Se vuoi saperne di più sulla teoria di basso livello sulla comunicazione seriale robusta, guarda questo tutorial.
Forniture
-
2 Arduino
Si consiglia vivamente di utilizzare Arduino con più UART hardware (ad esempio Arduino Mega)
- Cavo di collegamento
-
Installa SerialTransfer.h
Disponibile tramite Libraries Manager dell'IDE Arduino
Passaggio 1: connessioni fisiche
Quando si utilizza la comunicazione seriale, è necessario tenere a mente alcuni punti di cablaggio:
- Assicurati che tutte le messe a terra siano collegate!
- Il pin TX (trasmissione) di Arduino deve essere collegato all'altro pin RX (ricezione) di Arduino
Passaggio 2: come utilizzare la libreria
SerialTransfer.h ti consente di inviare facilmente grandi quantità di dati utilizzando un protocollo a pacchetto personalizzato. Di seguito è riportata una descrizione di tutte le funzionalità della libreria, molte delle quali verranno utilizzate più avanti in questo tutorial:
SerialTransfer.txBuff
Questo è un array di byte in cui tutti i dati del payload da inviare su seriale vengono memorizzati nel buffer prima della trasmissione. Puoi riempire questo buffer con byte di dati da inviare a un altro Arduino.
SerialTransfer.rxBuff
Questo è un array di byte in cui tutti i dati del payload ricevuti dall'altro Arduino vengono memorizzati nel buffer.
SerialTransfer.bytesRead
Il numero di byte del payload ricevuti dall'altro Arduino e memorizzati in SerialTransfer.rxBuff
SerialTransfer.begin(Stream &_port)
Inizializza un'istanza della classe della libreria. Puoi passare qualsiasi oggetto di classe "Serial" come parametro, anche oggetti di classe "SoftwareSerial"!
SerialTransfer.sendData(const uint16_t &messageLen)
Questo fa sì che il tuo Arduino invii il numero "messageLen" di byte nel buffer di trasmissione all'altro Arduino. Ad esempio, se "messageLen" è 4, i primi 4 byte di SerialTransfer.txBuff verranno inviati via seriale all'altro Arduino.
Trasferimento seriale.disponibile()
Questo fa sì che il tuo Arduino analizzi tutti i dati seriali ricevuti dall'altro Arduino. Se questa funzione restituisce il booleano "true", significa che un nuovo pacchetto è stato analizzato con successo ei dati del pacchetto appena ricevuto sono archiviati/disponibili in SerialTransfer.rxBuff.
SerialTransfer.txObj(const T &val, const uint16_t &len, const uint16_t &index=0)
Inserisce "len" il numero di byte di un oggetto arbitrario (byte, int, float, double, struct, ecc…) nel buffer di trasmissione a partire dall'indice come specificato dall'argomento "indice".
SerialTransfer.rxObj(const T &val, const uint16_t &len, const uint16_t &index=0)
Legge il numero "len" di byte dal buffer di ricezione (rxBuff) a partire dall'indice come specificato dall'argomento "indice" in un oggetto arbitrario (byte, int, float, double, struct, ecc…).
NOTA:
Il modo più semplice per trasmettere i dati è definire prima una struttura che contenga tutti i dati che si desidera inviare. L'Arduino all'estremità ricevente dovrebbe avere una struttura identica definita.
Passaggio 3: trasmissione dei dati di base
Lo sketch seguente trasmette sia il valore ADC di analogRead(0) che il valore di analogRead(0) convertito in tensione ad Arduino #2.
Carica il seguente sketch su Arduino #1:
#include "SerialTransfer.h"
SerialTransfer mioTransfer; struct STRUCT { uint16_t adcVal; tensione di galleggiamento; } dati; void setup() { Serial.begin(115200); Serial1.begin(115200); myTransfer.begin(Serial1); } void loop() { data.adcVal = analogRead(0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj(data, sizeof(data)); myTransfer.sendData(sizeof(data)); ritardo(100); }
Passaggio 4: ricezione dei dati di base
Il codice seguente stampa l'ADC e i valori di tensione ricevuti da Arduino #1.
Carica il seguente codice su Arduino #2:
#include "SerialTransfer.h"
SerialTransfer mioTransfer; struct STRUCT { uint16_t adcVal; tensione di galleggiamento; } dati; void setup() { Serial.begin(115200); Serial1.begin(115200); myTransfer.begin(Serial1); } void loop() { if(myTransfer.available()) { myTransfer.rxObj(data, sizeof(data)); Serial.print(data.adcVal); Serial.print(' '); Serial.println(data.voltage); Serial.println(); } else if(myTransfer.status < 0) { Serial.print("ERRORE: "); if(myTransfer.status == -1) Serial.println(F("CRC_ERROR")); else if(myTransfer.status == -2) Serial.println(F("PAYLOAD_ERROR")); else if(myTransfer.status == -3) Serial.println(F("STOP_BYTE_ERROR")); } }
Passaggio 5: test
Una volta che entrambi gli sketch sono stati caricati sui rispettivi Arduino, puoi utilizzare il monitor seriale su Arduino #2 per verificare che stai ricevendo dati da Arduino #1!
Consigliato:
PIC MCU e comunicazione seriale Python: 5 passaggi
PIC MCU e comunicazione seriale Python: Ciao, ragazzi! In questo progetto cercherò di spiegare i miei esperimenti su PIC MCU e comunicazione seriale Python. Su Internet, ci sono molti tutorial e video su come comunicare con PIC MCU tramite terminale virtuale, il che è molto utile. Tuttavia
Comunicazione seriale Arduino e Python - Display della tastiera: 4 passaggi
Comunicazione seriale Arduino e Python - Display tastiera: questo progetto è fatto per utenti mac ma può essere implementato anche per Linux e Windows, l'unico passaggio che dovrebbe essere diverso è l'installazione
Comunicazione seriale wireless con Bluefruit: 4 passaggi
Comunicazione seriale wireless utilizzando Bluefruit: ecco una semplice guida passo passo per sostituire i cavi con una connessione bluetooth a bassa energia: mi ci è voluto un po' per capirlo perché non c'è quasi nessuna documentazione su come farlo con la moderna tecnologia bluetooth a bassa energia come come il Bluefrui
SmartMirror basato sul Web che utilizza la comunicazione seriale: 6 passaggi
SmartMirror basato sul Web che utilizza la comunicazione seriale: questo istruibile viene consegnato con tutto il codice pronto per l'uso. Lo sviluppo è stato molto complicato ma una volta impostato è davvero facile da personalizzare. Dai un'occhiata e divertiti;)
Comunicazione seriale tramite ARM Cortex-M4: 4 passaggi
Comunicazione seriale tramite ARM Cortex-M4: questo è un progetto basato su breadboard che utilizza ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) per la comunicazione seriale tramite terminale virtuale. L'output può essere ottenuto su schermo LCD 16x2 e l'input per la comunicazione seriale può essere fornito in Serial Mo