Tartalomjegyzék:

Arduino soros kommunikáció: 5 lépés
Arduino soros kommunikáció: 5 lépés

Videó: Arduino soros kommunikáció: 5 lépés

Videó: Arduino soros kommunikáció: 5 lépés
Videó: How to use Serial Monitor in Arduino 2024, November
Anonim
Arduino soros kommunikáció
Arduino soros kommunikáció

Sok Arduino -projekt több Arduino közötti adatátvitelre támaszkodik.

Akár hobbista, aki RC autót, RC repülőgépet épít, vagy meteorológiai állomást tervez távoli kijelzővel, tudnia kell, hogyan lehet megbízhatóan továbbítani a soros adatokat az egyik Arduino -ból a másikba. Sajnos a hobbistáknak nehézséget okoz a soros adatkommunikáció a saját projektjeikben. Ez azért van, mert a soros adatokat bájtok formájában továbbítják.

Bármilyen kontextus nélkül a bájtfolyamban szinte lehetetlen értelmezni az adatokat. Az adatok értelmezése nélkül az Arduino -k nem tudnak megbízhatóan kommunikálni. A kulcs az, hogy ezeket a kontextusadatokat hozzáadjuk a bájtfolyamhoz szabványos soros csomagterv használatával.

A soros csomagtervezés, a csomagolás és a csomag elemzése bonyolult és nehezen megvalósítható. Szerencsére az Arduino felhasználók számára olyan könyvtárak állnak rendelkezésre, amelyek képesek mindezt a komplex logikát a színfalak mögött megtenni, így Ön különös fejfájás nélkül összpontosíthat a projekt működésére. Ez az utasítás a SerialTransfer.h könyvtárat használja a soros csomagok feldolgozásához.

Röviden: ez az útmutató leírja, hogyan lehet egyszerűen megvalósítani a robusztus soros adatokat bármely projektben a SerialTransfer.h könyvtár használatával. Ha többet szeretne megtudni a robusztus soros kommunikáció alacsony szintű elméletéről, tekintse meg ezt az oktatóanyagot.

Kellékek

  • 2 Arduinos

    Nagyon ajánlott, hogy olyan hardveres UART -al rendelkező Arduino -kat használjon (pl. Arduino Mega)

  • Csatlakozó vezeték
  • Telepítse a SerialTransfer.h fájlt

    Elérhető az Arduino IDE könyvtárkezelőjén keresztül

1. lépés: Fizikai kapcsolatok

Fizikai kapcsolatok
Fizikai kapcsolatok

Soros kommunikáció használatakor néhány bekötési pontot szem előtt kell tartani:

  • Győződjön meg arról, hogy minden földelés csatlakoztatva van!
  • Az Arduino TX (átviteli) tűt csatlakoztatni kell a másik Arduino RX (fogadó) tűjéhez

2. lépés: A könyvtár használata

A könyvtár használata
A könyvtár használata

A SerialTransfer.h lehetővé teszi nagy mennyiségű adat egyszerű küldését egyéni csomagprotokoll használatával. Az alábbiakban leírjuk a könyvtár összes funkcióját - amelyek közül sokat az oktatóanyag későbbi részében fogunk használni:

SerialTransfer.txBuff

Ez egy bájt tömb, ahol a soros kapcsolaton keresztül küldendő összes hasznos adat pufferelt az átvitel előtt. Ezt a puffert feltöltheti bájt adatokkal, hogy elküldje egy másik Arduino -nak.

SerialTransfer.rxBuff

Ez egy bájtos tömb, ahol a másik Arduino -tól kapott összes hasznos adat pufferelt.

SerialTransfer.bytesRead

A másik Arduino által kapott és a SerialTransfer.rxBuff -ban tárolt hasznos teherbájtok száma

SerialTransfer.begin (adatfolyam és _port)

Inicializálja a könyvtár osztályának egy példányát. Bármely "Soros" osztályú objektumot átadhat paraméterként - még a "SoftwareSerial" osztályú objektumokat is!

SerialTransfer.sendData (const uint16_t & messageLen)

Így az Arduino "messageLen" számú bájtot küld az átviteli pufferben a másik Arduino -nak. Például, ha a "messageLen" értéke 4, akkor a SerialTransfer.txBuff első 4 bájtja soros úton kerül elküldésre a másik Arduino -hoz.

SerialTransfer.available ()

Ezzel az Arduino elemzi a másik Arduino -tól kapott soros adatokat. Ha ez a függvény visszaadja a logikai értéket "true", az azt jelenti, hogy egy új csomagot sikeresen elemeztünk, és az újonnan kapott csomag adatait a SerialTransfer.rxBuff tartalmazza.

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

Egy tetszőleges objektum (bájt, int, lebegő, kettős, struktúra stb.) "Len" számú bájtját tölti az átviteli pufferbe az indextől kezdődően, az "index" argumentum által meghatározott módon.

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

"Len" számú bájtot olvas be a fogadási pufferből (rxBuff) az "index" argumentum által meghatározott indextől kezdve egy tetszőleges objektumba (bájt, int, lebegés, kettős, struktúra stb.).

JEGYZET:

Az adatok továbbításának legegyszerűbb módja, ha először definiál egy struktúrát, amely tartalmazza az összes elküldeni kívánt adatot. A fogadó végén lévő Arduino -nak azonos szerkezetűnek kell lennie.

3. lépés: Alapadatok továbbítása

A következő vázlat az analogRead (0) ADC értékét és az analogRead (0) feszültségre konvertált értékét egyaránt Arduino #2 -re továbbítja.

Töltse fel a következő vázlatot az Arduino #1 -be:

#include "SerialTransfer.h"

SerialTransfer myTransfer; szerkezet STRUCT {uint16_t adcVal; úszó feszültség; } adatok; void setup () {Serial.begin (115200); Sorozat1.kezdet (115200); myTransfer.begin (Sorozat1); } void loop () {data.adcVal = analogRead (0); adatok.feszültség = (data.adcVal * 5,0) / 1023,0; myTransfer.txObj (adatok, sizeof (adatok)); myTransfer.sendData (sizeof (adatok)); késleltetés (100); }

4. lépés: Alapadatok fogadása

A következő kód kinyomtatja az Arduino #1 -től kapott ADC és feszültség értékeket.

Töltse fel a következő kódot az Arduino #2 -be:

#include "SerialTransfer.h"

SerialTransfer myTransfer; szerkezet STRUCT {uint16_t adcVal; úszó feszültség; } adatok; void setup () {Serial.begin (115200); Sorozat1.kezdet (115200); myTransfer.begin (Sorozat1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (adatok, sizeof (adatok)); Serial.print (data.adcVal); Serial.print (''); Serial.println (adatok.feszültség); Sorozat.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")); }}

5. lépés: Tesztelés

Miután mindkét vázlatot feltöltötte a megfelelő Arduino -ba, a Serial Monitor használatával az Arduino #2 -n ellenőrizheti, hogy adatokat kap -e az Arduino #1 -től!

Ajánlott: