Table des matières:
- Fournitures
- Étape 1: Connexions physiques
- Étape 2: Comment utiliser la bibliothèque
- Étape 3: Transmettre les données de base
- Étape 4: Recevoir des données de base
- Étape 5: Tester
Vidéo: Communication série Arduino : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
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
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
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é:
PIC MCU et communication série Python : 5 étapes
PIC MCU et Python Serial Communication : Bonjour, les gars ! Dans ce projet, je vais essayer d'expliquer mes expériences sur la communication série PIC MCU et Python. Sur Internet, il existe de nombreux tutoriels et vidéos sur la façon de communiquer avec PIC MCU via un terminal virtuel, ce qui est très utile. Cependant
Communication série Arduino et Python - Affichage du clavier : 4 étapes
Arduino et Python Serial Communication - Keypad Display : Ce projet est conçu pour les utilisateurs de Mac mais il peut également être implémenté pour Linux et Windows, la seule étape qui devrait être différente est l'installation
Communication série sans fil avec Bluefruit : 4 étapes
Communication série sans fil à l'aide de Bluefruit : Voici un guide simple, étape par étape, pour remplacer vos fils par une connexion Bluetooth à faible consommation d'énergie : Il m'a fallu un certain temps pour comprendre cela, car il n'y a pratiquement aucune documentation sur le fait de le faire avec une technologie Bluetooth à faible consommation d'énergie moderne telle comme le Bluefruit
SmartMirror basé sur le Web utilisant la communication série : 6 étapes
SmartMirror basé sur le Web utilisant la communication série : cette instructable est livrée avec tout le code prêt à l'emploi. Le développement a été très compliqué mais une fois configuré, c'est vraiment facile à personnaliser. Jetez un coup d'œil et profitez-en
Communication série avec ARM Cortex-M4 : 4 étapes
Communication série à l'aide d'ARM Cortex-M4 : il s'agit d'un projet basé sur une maquette qui utilise ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) pour la communication série à l'aide d'un terminal virtuel. La sortie peut être obtenue sur un écran LCD 16x2 et l'entrée pour la communication série peut être donnée en série Mo