Table des matières:

Communication série Arduino : 5 étapes
Communication série Arduino : 5 étapes

Vidéo: Communication série Arduino : 5 étapes

Vidéo: Communication série Arduino : 5 étapes
Vidéo: Arduino Tutorial 5: Understanding and Working With Binary Numbers 2024, Novembre
Anonim
Communication série Arduino
Communication série Arduino

De nombreux projets Arduino reposent sur la transmission de données entre plusieurs Arduinos.

Que vous soyez un amateur qui construit une voiture RC, un avion RC ou conçoive une station météo avec un affichage à distance, vous devrez savoir comment transférer de manière fiable des données série d'un Arduino à un autre. Malheureusement, il est difficile pour les amateurs de faire fonctionner la communication de données série dans leurs propres projets. En effet, les données série sont envoyées sous forme de flux d'octets.

Sans aucune sorte de contexte dans le flux d'octets, il est presque impossible d'interpréter les données. Sans pouvoir interpréter les données, vos Arduinos ne pourront pas communiquer de manière fiable. La clé est d'ajouter ces données de contexte au flux d'octets en utilisant une conception de paquet série standard.

La conception de paquets en série, le bourrage de paquets et l'analyse de paquets sont complexes et difficiles à réaliser. Heureusement pour les utilisateurs d'Arduino, il existe des bibliothèques disponibles qui peuvent faire toute cette logique complexe dans les coulisses afin que vous puissiez vous concentrer sur le fonctionnement de votre projet sans effort supplémentaire. Ce Instructable utilisera la bibliothèque SerialTransfer.h pour le traitement des paquets série.

En bref: ce Instructable expliquera comment vous pouvez facilement implémenter des données série robustes dans n'importe quel projet à l'aide de la bibliothèque SerialTransfer.h. Si vous souhaitez en savoir plus sur la théorie de bas niveau sur la communication série robuste, consultez ce didacticiel.

Fournitures

  • 2 Arduino

    Il est fortement recommandé d'utiliser des Arduinos dotés de plusieurs UART matériels (c'est-à-dire Arduino Mega)

  • Brancher le fil
  • Installer SerialTransfer.h

    Disponible via le gestionnaire de bibliothèques de l'IDE Arduino

Étape 1: Connexions physiques

Connexions physiques
Connexions physiques

Lors de l'utilisation de la communication série, il faut garder à l'esprit quelques points de câblage:

  • Assurez-vous que toutes les masses sont connectées !
  • La broche Arduino TX (Transmit) doit être connectée à la broche RX (Receive) de l'autre Arduino

Étape 2: Comment utiliser la bibliothèque

Comment utiliser la bibliothèque
Comment utiliser la bibliothèque

SerialTransfer.h vous permet d'envoyer facilement de grandes quantités de données à l'aide d'un protocole de paquets personnalisé. Vous trouverez ci-dessous une description de toutes les fonctionnalités de la bibliothèque - dont beaucoup seront utilisées plus tard dans ce didacticiel:

SerialTransfer.txBuff

Il s'agit d'un tableau d'octets dans lequel toutes les données utiles à envoyer en série sont mises en mémoire tampon avant la transmission. Vous pouvez remplir ce tampon avec des octets de données à envoyer à un autre Arduino.

SerialTransfer.rxBuff

Il s'agit d'un tableau d'octets dans lequel toutes les données de charge utile reçues de l'autre Arduino sont mises en mémoire tampon.

SerialTransfer.bytesRead

Le nombre d'octets de charge utile reçus par l'autre Arduino et stockés dans SerialTransfer.rxBuff

SerialTransfer.begin (Stream &_port)

Initialise une instance de la classe de la bibliothèque. Vous pouvez passer n'importe quel objet de classe "Serial" en paramètre - même les objets de classe "SoftwareSerial" !

SerialTransfer.sendData(const uint16_t &messageLen)

Cela oblige votre Arduino à envoyer le nombre "messageLen" d'octets dans le tampon de transmission à l'autre Arduino. Par exemple, si "messageLen" est 4, les 4 premiers octets de SerialTransfer.txBuff seront envoyés via série à l'autre Arduino.

SerialTransfer.available()

Cela permet à votre Arduino d'analyser toutes les données série reçues de l'autre Arduino. Si cette fonction renvoie le booléen "true", cela signifie qu'un nouveau paquet a été analysé avec succès et que les données du paquet nouvellement reçu sont stockées/disponibles dans SerialTransfer.rxBuff.

SerialTransfer.txObj(const T &val, const uint16_t &len, const uint16_t &index=0)

Fournit le nombre "len" d'octets d'un objet arbitraire (byte, int, float, double, struct, etc…) dans le tampon de transmission en commençant à l'index tel que spécifié par l'argument "index".

SerialTransfer.rxObj(const T &val, const uint16_t &len, const uint16_t &index=0)

Lit le nombre "len" d'octets du tampon de réception (rxBuff) en commençant à l'index tel que spécifié par l'argument "index" dans un objet arbitraire (byte, int, float, double, struct, etc…).

REMARQUE:

Le moyen le plus simple de transmettre des données est de définir d'abord une structure qui contient toutes les données que vous souhaitez envoyer. L'Arduino à la réception doit avoir une structure identique définie.

Étape 3: Transmettre les données de base

L'esquisse suivante transmet à la fois la valeur ADC de analogRead(0) et la valeur de analogRead(0) converties en tension à Arduino #2.

Téléchargez le croquis suivant sur Arduino #1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT { uint16_t adcVal; tension d'entretien; } Les données; void setup() { Serial.begin(115200); Serial1.begin(115200); myTransfer.begin(Serial1); } boucle vide() { data.adcVal = analogRead(0); données.tension = (données.adcVal * 5,0) / 1023,0; myTransfer.txObj(data, sizeof(data)); myTransfer.sendData(sizeof(data)); retard (100); }

Étape 4: Recevoir des données de base

Le code suivant imprime les valeurs ADC et de tension reçues de l'Arduino #1.

Téléchargez le code suivant sur Arduino #2:

#include "SerialTransfer.h"

SerialTransfer monTransfer; struct STRUCT { uint16_t adcVal; tension d'entretien; } Les données; void setup() { Serial.begin(115200); Serial1.begin(115200); myTransfer.begin(Serial1); } boucle vide() { 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("ERROR: "); 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")); } }

Étape 5: Tester

Une fois que les deux croquis ont été téléchargés sur leurs Arduino respectifs, vous pouvez utiliser le moniteur série sur Arduino #2 pour vérifier que vous recevez des données d'Arduino #1 !

Conseillé: