Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-23 12:52
Viele Arduino-Projekte beruhen auf der Übertragung von Daten zwischen mehreren Arduinos.
Egal, ob Sie ein Bastler sind, der ein RC-Auto, ein RC-Flugzeug baut oder eine Wetterstation mit Fernanzeige entwirft, Sie müssen wissen, wie Sie serielle Daten zuverlässig von einem Arduino auf einen anderen übertragen können. Leider ist es für Bastler schwierig, die serielle Datenkommunikation in ihren eigenen Projekten zum Laufen zu bringen. Dies liegt daran, dass serielle Daten als Bytestrom gesendet werden.
Ohne Kontext innerhalb des Bytestroms ist es fast unmöglich, die Daten zu interpretieren. Ohne die Daten interpretieren zu können, können Ihre Arduinos nicht zuverlässig kommunizieren. Der Schlüssel besteht darin, diese Kontextdaten dem Bytestrom hinzuzufügen, indem ein standardmäßiges serielles Paketdesign verwendet wird.
Serielles Paketdesign, Packet Stuffing und Paketparsing sind komplex und schwer zu erreichen. Glücklicherweise gibt es für Arduino-Benutzer Bibliotheken, die all diese komplexe Logik hinter den Kulissen ausführen können, sodass Sie sich darauf konzentrieren können, Ihr Projekt ohne zusätzlichen Aufwand zum Laufen zu bringen. Dieses Instructable verwendet die Bibliothek SerialTransfer.h für die serielle Paketverarbeitung.
Kurz gesagt: In diesem Instructable erfahren Sie, wie Sie mit der Bibliothek SerialTransfer.h problemlos robuste serielle Daten in jedem Projekt implementieren können. Wenn Sie mehr über die Low-Level-Theorie zur robusten seriellen Kommunikation erfahren möchten, lesen Sie dieses Tutorial.
Lieferungen
-
2 Arduinos
Es wird dringend empfohlen, Arduinos zu verwenden, die über mehrere Hardware-UARTs verfügen (z. B. Arduino Mega)
- Anschlusskabel
-
SerialTransfer.h. installieren
Verfügbar über den Bibliotheksmanager der Arduino IDE
Schritt 1: Physische Verbindungen
Bei Verwendung der seriellen Kommunikation müssen einige Verdrahtungspunkte beachtet werden:
- Stellen Sie sicher, dass alle Erdungen verbunden sind!
- Der Arduino TX (Transmit) Pin muss mit dem anderen Arduino RX (Receive) Pin verbunden werden
Schritt 2: So verwenden Sie die Bibliothek
SerialTransfer.h ermöglicht Ihnen das einfache Senden großer Datenmengen mithilfe eines benutzerdefinierten Paketprotokolls. Nachfolgend finden Sie eine Beschreibung aller Funktionen der Bibliothek – viele davon werden wir später in diesem Tutorial verwenden:
SerialTransfer.txBuff
Dies ist ein Byte-Array, in dem alle seriell zu sendenden Nutzdaten vor der Übertragung gepuffert werden. Sie können diesen Puffer mit Datenbytes füllen, um sie an einen anderen Arduino zu senden.
SerialTransfer.rxBuff
Dies ist ein Byte-Array, in dem alle vom anderen Arduino empfangenen Nutzdaten gepuffert werden.
SerialTransfer.bytesRead
Die Anzahl der Nutzdatenbytes, die vom anderen Arduino empfangen und in SerialTransfer.rxBuff gespeichert wurden
SerialTransfer.begin(Stream &_port)
Initialisiert eine Instanz der Klasse der Bibliothek. Als Parameter können Sie jedes beliebige "Serial"-Klassenobjekt übergeben - sogar "SoftwareSerial"-Klassenobjekte!
SerialTransfer.sendData(const uint16_t &messageLen)
Dadurch sendet Ihr Arduino eine "messageLen" -Anzahl von Bytes im Sendepuffer an den anderen Arduino. Wenn "messageLen" beispielsweise 4 ist, werden die ersten 4 Bytes von SerialTransfer.txBuff seriell an das andere Arduino gesendet.
SerialTransfer.verfügbar()
Dadurch kann Ihr Arduino alle empfangenen seriellen Daten vom anderen Arduino analysieren. Wenn diese Funktion den booleschen Wert "true" zurückgibt, bedeutet dies, dass ein neues Paket erfolgreich geparst wurde und die Daten des neu empfangenen Pakets in SerialTransfer.rxBuff gespeichert/verfügbar sind.
SerialTransfer.txObj(const T &val, const uint16_t &len, const uint16_t &index=0)
Füllt die "len" Anzahl von Bytes eines beliebigen Objekts (byte, int, float, double, struct, etc…) in den Sendepuffer, beginnend mit dem durch das Argument "index" angegebenen Index.
SerialTransfer.rxObj(const T &val, const uint16_t &len, const uint16_t &index=0)
Liest "len" Anzahl von Bytes aus dem Empfangspuffer (rxBuff) beginnend mit dem durch das Argument "index" angegebenen Index in ein beliebiges Objekt (byte, int, float, double, struct, etc…).
HINWEIS:
Der einfachste Weg, Daten zu übertragen, besteht darin, zuerst eine Struktur zu definieren, die alle Daten enthält, die Sie senden möchten. Das Arduino auf der Empfangsseite sollte eine identische Struktur haben.
Schritt 3: Basisdaten übertragen
Die folgende Skizze überträgt sowohl den ADC-Wert von analogRead(0) als auch den in Spannung umgewandelten Wert von analogRead(0) an Arduino #2.
Laden Sie die folgende Skizze zu Arduino # 1 hoch:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT { uint16_t adcVal; Schwebespannung; } Daten; Void setup () { Serial.begin (115200); Serial1.begin(115200); myTransfer.begin(Serial1); aufrechtzuerhalten. Void Schleife () { data.adcVal = analogRead (0); Daten. Spannung = (Daten.adcVal * 5,0) / 1023.0; myTransfer.txObj(Daten, Größe(Daten)); myTransfer.sendData(sizeof(data)); Verzögerung (100); }
Schritt 4: Grunddaten erhalten
Der folgende Code druckt die von Arduino # 1 empfangenen ADC- und Spannungswerte.
Laden Sie den folgenden Code in Arduino #2 hoch:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT { uint16_t adcVal; Schwebespannung; } Daten; Void setup () { Serial.begin (115200); Serial1.begin(115200); myTransfer.begin(Serial1); aufrechtzuerhalten. Void Schleife () { if (myTransfer.available ()) { myTransfer.rxObj (Daten, Größe (Daten)); Serial.print (data.adcVal); Serial.print (' '); Serial.println (Daten. Spannung); Serial.println(); aufrechtzuerhalten. Sonst if (myTransfer.status <0) { Serial.print ("FEHLER: "); if(myTransfer.status == -1) Serial.println(F("CRC_ERROR")); sonst if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); sonst if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); } }
Schritt 5: Testen
Sobald beide Skizzen auf ihre jeweiligen Arduinos hochgeladen wurden, können Sie den Serial Monitor auf Arduino # 2 verwenden, um zu überprüfen, ob Sie Daten von Arduino # 1 erhalten!
Empfohlen:
Einen Arduino-Gitarren-Tuner herstellen – wikiHow
So bauen Sie einen Arduino-Gitarren-Tuner: Dies sind die Anweisungen, um einen Gitarren-Tuner aus einem Arduino und mehreren anderen Komponenten zu machen. Mit Grundkenntnissen in Elektronik und Codierung können Sie dieses Gitarrenstimmgerät herstellen. Zuerst müssen Sie wissen, was die Materialien sind. Ma
ALARMA ARDUINO CON SENSOR DE MOVIMIENTO, SIRENA Y AVISO AL TLF. MÓVIL: 9 Schritte
ALARMA ARDUINO CON SENSOR DE MOVIMIENTO, SIRENA Y AVISO AL TLF. MÓVIL: Este proyecto consiste en a alarma básica que Detecta presencia, activa una sirena de 108dB y visa al usuario mediante un SMS (opcional). Permite también el control remoto básico por parte del usuario a través de SMS (encendido, apagado, reinicio
Arduino-Programmierung über das Handy -- Arduinodroid -- Arduino-Ide für Android -- Blinzeln: 4 Schritte
Arduino-Programmierung über das Handy || Arduinodroid || Arduino-Ide für Android || Blink: Bitte abonnieren Sie meinen Youtube-Kanal für weitere Videos…… Arduino ist ein Board, das direkt über USB programmiert werden kann. Es ist sehr einfach und günstig für College- und Schulprojekte oder sogar für Produktprototypen. Viele Produkte bauen zunächst darauf für i
GRUNDLAGEN DER UART-KOMMUNIKATION: 16 Schritte
GRUNDLAGEN DER UART-KOMMUNIKATION: Erinnern Sie sich, als Drucker, Mäuse und Modems dicke Kabel mit diesen riesigen, klobigen Steckern hatten? Die, die buchstäblich in Ihren Computer geschraubt werden mussten? Diese Geräte verwendeten wahrscheinlich UARTs, um mit Ihrem Computer zu kommunizieren. Während USB fast
Drahtlose Kommunikation mit billigen 433MHz-HF-Modulen und Pic-Mikrocontrollern. Teil 2: 4 Schritte (mit Bildern)
Drahtlose Kommunikation mit billigen 433MHz-HF-Modulen und Pic-Mikrocontrollern. Teil 2: Im ersten Teil dieser Anleitung habe ich gezeigt, wie man einen PIC12F1822 mit MPLAB IDE und XC8-Compiler programmiert, um einen einfachen String drahtlos mit billigen TX / RX 433 MHz-Modulen zu senden. Das Empfängermodul wurde über einen USB mit UART TTL verbunden Kabel-Werbung