Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:10
Många Arduino -projekt är beroende av att överföra data mellan flera Arduinos.
Oavsett om du är en hobbyist som bygger en RC -bil, ett RC -flygplan eller designar en väderstation med en fjärrdisplay, måste du veta hur du på ett tillförlitligt sätt kan överföra seriell data från en Arduino till en annan. Tyvärr är det svårt för hobbyister att få seriell datakommunikation att fungera i sina egna projekt, eftersom seriell data skickas som en ström av byte.
Utan någon form av sammanhang i byteflödet är det nästan omöjligt att tolka data. Utan att kunna tolka data kommer dina Arduinos inte att kunna kommunicera på ett tillförlitligt sätt. Nyckeln är att lägga till denna sammanhangsdata i byteflödet med hjälp av en standard seriell paketdesign.
Seriell paketdesign, paketstoppning och paketanalys är komplex och svår att uppnå. Lyckligtvis för Arduino -användare finns det bibliotek som kan göra all denna komplexa logik bakom kulisserna så att du kan fokusera på att få ditt projekt att fungera utan extra utrymme. Denna instruktionsbok använder biblioteket SerialTransfer.h för seriepaketbehandling.
Kort sagt: den här instruktionsboken kommer att gå igenom hur du enkelt kan implementera robust seriell data i alla projekt med biblioteket SerialTransfer.h. Om du vill lära dig mer om lågnivåteori om robust seriell kommunikation, se den här självstudien.
Tillbehör
-
2 Arduinos
Det rekommenderas starkt att du använder Arduinos som har flera hårdvaru -UART (dvs. Arduino Mega)
- Anslutningstråd
-
Installera SerialTransfer.h
Tillgänglig via Arduino IDE: s Libraries Manager
Steg 1: Fysiska anslutningar
När du använder seriell kommunikation måste du tänka på några kopplingspunkter:
- Se till att alla grunder är anslutna!
- Arduino TX (Transmit) pin måste anslutas till den andra Arduinos RX (Receive) pin
Steg 2: Så här använder du biblioteket
Med SerialTransfer.h kan du enkelt skicka stora mängder data med hjälp av ett anpassat paketprotokoll. Nedan finns en beskrivning av alla bibliotekets funktioner - många av dem kommer vi att använda senare i denna handledning:
SerialTransfer.txBuff
Detta är en byte -array där all nyttolastdata som ska skickas över seriell buffras före överföring. Du kan stoppa denna buffert med byte med data för att skicka till en annan Arduino.
SerialTransfer.rxBuff
Detta är en byte -array där all nyttolastdata som tas emot från den andra Arduino buffras.
SerialTransfer.bytesRead
Antalet nyttolastbyte som tas emot av den andra Arduino och lagras i SerialTransfer.rxBuff
SerialTransfer.begin (Stream & _port)
Initierar en instans av bibliotekets klass. Du kan skicka alla "Serial" klassobjekt som en parameter - även "SoftwareSerial" klassobjekt!
SerialTransfer.sendData (const uint16_t & messageLen)
Detta gör att din Arduino skickar "messageLen" antal byte i överföringsbufferten till den andra Arduino. Till exempel, om "messageLen" är 4, skickas de första 4 bytesna av SerialTransfer.txBuff via serie till den andra Arduino.
SerialTransfer.available ()
Detta gör att din Arduino analyserar alla mottagna seriella data från den andra Arduino. Om den här funktionen returnerar den booleska "true" betyder det att ett nytt paket har analyserats och det nyligen mottagna paketets data lagras/finns tillgängliga i SerialTransfer.rxBuff.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Fyller "len" antal byte för ett godtyckligt objekt (byte, int, float, double, struct, etc …) i överföringsbufferten som börjar vid indexet som anges av argumentet "index".
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Läser "len" antal byte från mottagningsbufferten (rxBuff) som börjar vid indexet som anges av argumentet "index" till ett godtyckligt objekt (byte, int, float, double, struct, etc …).
NOTERA:
Det enklaste sättet att överföra data är att först definiera en struktur som innehåller all data du vill skicka. Arduino på mottagaränden bör ha en identisk struktur definierad.
Steg 3: Överför grunddata
Följande skiss överför både ADC -värdet för analogRead (0) och värdet för analogRead (0) som omvandlats till spänning till Arduino #2.
Ladda upp följande skiss till Arduino #1:
#inkludera "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flottörspänning; } data; void setup () {Serial.begin (115200); Serial1.start (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)); fördröjning (100); }
Steg 4: Ta emot grundläggande data
Följande kod skriver ut ADC- och spänningsvärdena från Arduino #1.
Ladda upp följande kod till Arduino #2:
#inkludera "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flottörspänning; } data; void setup () {Serial.begin (115200); Serial1.start (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.spänning); Serial.println (); } annars if (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); annars om (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); annars om (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}
Steg 5: Testning
När båda skisserna har laddats upp till sina respektive Arduinos kan du använda Serial Monitor på Arduino #2 för att verifiera att du tar emot data från Arduino #1!
Rekommenderad:
Raspberry PI 3 - Aktivera seriell kommunikation till TtyAMA0 till BCM GPIO 14 och GPIO 15: 9 steg
Raspberry PI 3 - Aktivera seriell kommunikation till TtyAMA0 till BCM GPIO 14 och GPIO 15: Jag hade nyligen intresse av att aktivera UART0 på min Raspberry Pi (3b) så att jag kunde ansluta den direkt till en RS -232 signalnivåenhet med en standard 9 -nål d-sub-kontakt utan att behöva gå via en USB till RS-232-adapter. En del av mitt intresse
PIC MCU och Python seriell kommunikation: 5 steg
PIC MCU och Python seriell kommunikation: Hej killar! I detta projekt kommer jag att försöka förklara mina experiment med PIC MCU och Python seriell kommunikation. På internet finns det många självstudier och videor om hur man kommunicerar med PIC MCU över virtuell terminal vilket är mycket användbart. Howev
Arduino och Python seriell kommunikation - knappsatsvisning: 4 steg
Arduino och Python seriell kommunikation - knappsatsvisning: Detta projekt är gjord för mac -användare men det kan också implementeras för Linux och Windows, det enda steget som borde vara annorlunda är installationen
Trådlös seriell kommunikation med Bluefruit: 4 steg
Trådlös seriekommunikation med Bluefruit: Här är en enkel steg -för -steg -guide för att byta ut dina ledningar med en Bluetooth -lågenergianslutning: Det tog mig ett tag att ta reda på det eftersom det knappast finns någon dokumentation om hur man gör detta med modern Bluetooth -lågenergiteknik som t.ex. som Bluefrui
Webbaserad SmartMirror med seriell kommunikation: 6 steg
Webbaserad SmartMirror med seriell kommunikation: Den här instruktionen levereras med all kod redo att användas. Utvecklingen var mycket komplicerad men när den väl är inställd är den väldigt enkel att anpassa. Ta en titt och njut;)