INHOUDSOPGAWE:
- Voorrade
- Stap 1: Fisiese verbindings
- Stap 2: Hoe om die biblioteek te gebruik
- Stap 3: Stuur basiese data
- Stap 4: Ontvang basiese data
- Stap 5: Toets
Video: Seriële kommunikasie van Arduino: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Baie Arduino -projekte maak staat op die oordrag van data tussen verskeie Arduino's.
Of u nou 'n stokperdjie is wat 'n RC -motor, 'n RC -vliegtuig bou of 'n weerstasie met 'n afstandskerm ontwerp, u moet weet hoe u reële data betroubaar van die een Arduino na die ander kan oordra. Ongelukkig is dit vir stokperdjies moeilik om seriële datakommunikasie in hul eie projekte te laat werk, omdat seriële data as 'n stroom grepe gestuur word.
Sonder enige konteks in die stroom van grepe, is dit byna onmoontlik om die data te interpreteer. Sonder dat u die data kan interpreteer, kan u Arduinos nie betroubaar kommunikeer nie. Die sleutel is om hierdie konteksdata by die byte -stroom te voeg deur 'n standaard reekspakketontwerp te gebruik.
Die reeksontwerp van pakkies, pakketopvulling en ontleding van pakkies is kompleks en moeilik om te bereik. Gelukkig vir Arduino -gebruikers, is daar biblioteke beskikbaar wat al hierdie ingewikkelde logika agter die skerms kan doen, sodat u kan fokus daarop om u projek sonder ekstra kopstuk te laat werk. Hierdie instruksies gebruik die biblioteek SerialTransfer.h vir die verwerking van reekse.
Kortliks: hierdie instruksie sal beskryf hoe u robuuste seriële data maklik in enige projek kan implementeer met behulp van die biblioteek SerialTransfer.h. Raadpleeg hierdie tutoriaal as u meer wil leer oor die lae-vlak-teorie oor robuuste seriële kommunikasie.
Voorrade
-
2 Arduino's
Dit word sterk aangemoedig om Arduino's te gebruik wat verskeie UART's vir hardeware het (dws Arduino Mega)
- Aansluitdraad
-
Installeer SerialTransfer.h
Beskikbaar via die Arduino IDE se biblioteekbestuurder
Stap 1: Fisiese verbindings
By die gebruik van seriële kommunikasie moet 'n paar bedradingpunte in gedagte gehou word:
- Maak seker dat alle gronde verbind is!
- Arduino TX (Transmit) -pen moet aan die ander Arduino's RX (Receive) -pen gekoppel word
Stap 2: Hoe om die biblioteek te gebruik
Met SerialTransfer.h kan u groot hoeveelhede data maklik stuur met behulp van 'n pasgemaakte pakketprotokol. Hieronder is 'n beskrywing van al die funksies van die biblioteek - waarvan ons baie later in hierdie handleiding sal gebruik:
SerialTransfer.txBuff
Dit is 'n byte -skikking waar alle loonvragdata wat oor die reeks gestuur moet word, voor die oordrag gebuffer word. U kan hierdie buffer met grepe data vul om na 'n ander Arduino te stuur.
SerialTransfer.rxBuff
Dit is 'n byte -skikking waar alle loonvragdata wat van die ander Arduino ontvang word, gebuffer word.
SerialTransfer.bytes Lees
Die aantal laai -grepe wat die ander Arduino ontvang en in SerialTransfer.rxBuff gestoor word
SerialTransfer.begin (Stroom en _port)
Initialiseer 'n voorbeeld van die klas van die biblioteek. U kan enige 'Serial' klasvoorwerp as 'n parameter deurgee - selfs 'SoftwareSerial' klasvoorwerpe!
SerialTransfer.sendData (const uint16_t & messageLen)
Dit laat u Arduino 'messageLen' aantal grepe in die stuurbuffer na die ander Arduino stuur. Byvoorbeeld, as "messageLen" 4 is, word die eerste 4 grepe SerialTransfer.txBuff per reeks na die ander Arduino gestuur.
SerialTransfer.available ()
Dit laat u Arduino ontvou seriële data van die ander Arduino ontleed. As hierdie funksie die booleaanse "waar" teruggee, beteken dit dat 'n nuwe pakkie suksesvol ontleed is en dat die nuut ontvangde pakkie se data gestoor/beskikbaar is in SerialTransfer.rxBuff.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Bevat 'len' aantal grepe van 'n arbitrêre voorwerp (byte, int, float, double, struct, ens …) in die stuurbuffer wat begin by die indeks soos gespesifiseer deur die argument 'index'.
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Lees 'len' aantal grepe uit die ontvangbuffer (rxBuff) vanaf die indeks soos gespesifiseer deur die argument 'indeks' in 'n arbitrêre voorwerp (byte, int, float, double, struct, ens …).
LET WEL:
Die maklikste manier om data oor te dra, is om eers 'n struktuur te definieer wat alle data bevat wat u wil stuur. Die Arduino aan die ontvangkant moet 'n identiese struktuur hê.
Stap 3: Stuur basiese data
Die volgende skets stuur beide die ADC -waarde van analogRead (0) en die waarde van analogRead (0) wat na spanning omgeskakel is na Arduino #2 oor.
Laai die volgende skets op na Arduino #1:
#sluit "SerialTransfer.h" in
SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; dryfspanning; } data; ongeldige opstelling () {Serial.begin (115200); Reeks1.begin (115200); myTransfer.begin (reeks1); } leemte lus () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); vertraging (100); }
Stap 4: Ontvang basiese data
Die volgende kode druk die ADC- en spanningswaardes wat van Arduino #1 ontvang is, af.
Laai die volgende kode op na Arduino #2:
#sluit "SerialTransfer.h" in
SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; dryfspanning; } data; ongeldige opstelling () {Serial.begin (115200); Reeks1.begin (115200); myTransfer.begin (reeks1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } anders as (myTransfer.status <0) {Serial.print ("FOUT:"); as (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); anders as (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); anders as (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}
Stap 5: Toets
Nadat albei sketse na hul onderskeie Arduinos gelaai is, kan u die Serial Monitor op Arduino #2 gebruik om te verifieer dat u data van Arduino #1 ontvang!
Aanbeveel:
Framboos PI 3 - Aktiveer seriële kommunikasie met TtyAMA0 na BCM GPIO 14 en GPIO 15: 9 stappe
Raspberry PI 3 - Aktiveer seriële kommunikasie met TtyAMA0 na BCM GPIO 14 en GPIO 15: Ek het onlangs daarin belanggestel om UART0 op my Raspberry Pi (3b) moontlik te maak, sodat ek dit direk kon koppel aan 'n RS -232 seinvlak toestel met 'n standaard 9 -speld d-sub-aansluiting sonder om deur 'n USB-na-RS-232-adapter te hoef te gaan. Deel van my interes
Seriële kommunikasie van PIC MCU en Python: 5 stappe
PIC MCU en Python Serial Communication: Hallo, ouens! In hierdie projek sal ek probeer om my eksperimente oor PIC MCU en Python seriële kommunikasie te verduidelik. Op die internet is daar baie tutoriale en video's oor hoe om met PIC MCU via virtuele terminale te kommunikeer, wat baie handig is. Howev
Seriële kommunikasie van Arduino en Python - Toetsenbordvertoning: 4 stappe
Seriële kommunikasie van Arduino en Python - Toetsenbordvertoning: hierdie projek is gemaak vir Mac -gebruikers, maar dit kan ook geïmplementeer word vir Linux en Windows, die enigste stap wat anders moet wees, is die installasie
Draadlose seriële kommunikasie met behulp van Bluefruit: 4 stappe
Draadlose seriële kommunikasie met behulp van Bluefruit: Hier is 'n eenvoudige stap -vir -stap gids om u drade te vervang deur 'n Bluetooth -laenergieverbinding: dit het my 'n rukkie geneem om dit uit te vind, want daar is amper geen dokumentasie om dit te doen met moderne Bluetooth -lae -energie -tegnologie soos soos die Bluefrui
Seriële kommunikasie met behulp van ARM Cortex-M4: 4 stappe
Seriële kommunikasie met behulp van ARM Cortex-M4: Dit is 'n broodbordgebaseerde projek wat ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) gebruik vir seriële kommunikasie met behulp van virtuele terminale. Die uitset kan verkry word op 16x2 LCD -skerm en ingang vir seriële kommunikasie kan gegee word in Serial Mo