Obsah:

Sériová komunikácia Arduino: 5 krokov
Sériová komunikácia Arduino: 5 krokov

Video: Sériová komunikácia Arduino: 5 krokov

Video: Sériová komunikácia Arduino: 5 krokov
Video: Hyper-Terminal Project 5 serial communication 2024, November
Anonim
Sériová komunikácia Arduino
Sériová komunikácia Arduino

Mnoho projektov Arduino sa spolieha na prenos údajov medzi niekoľkými Arduinami.

Či už ste hobby, ktorý stavia RC auto, RC lietadlo alebo navrhuje meteorologickú stanicu so vzdialeným displejom, budete potrebovať vedieť, ako spoľahlivo prenášať sériové údaje z jedného Arduina do druhého. Pre fanúšikov je bohužiaľ ťažké získať sériovú dátovú komunikáciu, ktorá funguje vo vlastných projektoch. Dôvodom je, že sériové údaje sa odosielajú ako tok bajtov.

Bez akéhokoľvek druhu kontextu v prúde bajtov je takmer nemožné interpretovať údaje. Bez toho, aby boli schopní interpretovať údaje, vaše Arduinos nebudú schopné spoľahlivo komunikovať. Kľúčom je pridať tieto kontextové údaje do bajtového toku pomocou štandardného dizajnu sériových paketov.

Sériový dizajn paketov, vypchávanie paketov a analýza paketov je zložité a ťažko dosiahnuteľné. Našťastie pre používateľov Arduina sú k dispozícii knižnice, ktoré dokážu celú túto komplexnú logiku v zákulisí, takže sa môžete sústrediť na to, aby váš projekt fungoval bez dodatočných prekážok. Tento návod použije knižnicu SerialTransfer.h na spracovanie sériových paketov.

Stručne povedané: tento návod sa zameriava na to, ako môžete jednoducho implementovať robustné sériové údaje do akéhokoľvek projektu pomocou knižnice SerialTransfer.h. Ak sa chcete dozvedieť viac o nízkoúrovňovej teórii robustnej sériovej komunikácie, pozrite si tento návod.

Zásoby

  • 2 Arduino

    Dôrazne sa odporúča používať Arduino, ktoré má viacero hardvérových UART (t. J. Arduino Mega)

  • Pripojovací drôt
  • Nainštalujte SerialTransfer.h

    K dispozícii prostredníctvom správcu knižníc Arduino IDE

Krok 1: Fyzické pripojenia

Fyzické spojenia
Fyzické spojenia

Pri použití sériovej komunikácie je potrebné mať na pamäti niekoľko bodov zapojenia:

  • Uistite sa, že sú všetky uzemnenia prepojené!
  • Pin Arduino TX (Transmit) je potrebné pripojiť k druhému kolíku RX (Receive) Arduino

Krok 2: Ako používať knižnicu

Ako používať knižnicu
Ako používať knižnicu

SerialTransfer.h vám umožňuje jednoducho odosielať veľké množstvo dát pomocou vlastného paketového protokolu. Nasleduje popis všetkých funkcií knižnice - mnohé z nich použijeme neskôr v tomto návode:

SerialTransfer.txBuff

Jedná sa o bajtové pole, v ktorom sú všetky údaje o užitočnom zaťažení, ktoré sa majú odoslať sériovo, uložené do vyrovnávacej pamäte pred prenosom. Do tejto vyrovnávacej pamäte môžete zaplniť bajty údajov a odoslať ich do iného Arduina.

SerialTransfer.rxBuff

Toto je bajtové pole, do ktorého sú uložené všetky údaje o užitočnom zaťažení prijaté od druhého Arduina.

SerialTransfer.bytes Prečítajte si

Počet bajtov užitočného zaťaženia prijatých druhým Arduinom a uložených v SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inicializuje inštanciu triedy knižnice. Ako parameter môžete odovzdať akýkoľvek objekt triedy „Serial“- dokonca aj objekty triedy „SoftwareSerial“!

SerialTransfer.sendData (const uint16_t & messageLen)

Vďaka tomu bude vaše Arduino odosielať počet bajtov „messageLen“vo vysielacej vyrovnávacej pamäti do druhého Arduina. Ak je napríklad „messageLen“4, prvé 4 bajty SerialTransfer.txBuff budú odoslané sériovo do druhého Arduina.

SerialTransfer.available ()

Vďaka tomu bude vaše Arduino analyzovať všetky prijaté sériové údaje od druhého Arduina. Ak táto funkcia vráti logickú hodnotu „true“, znamená to, že nový paket bol úspešne analyzovaný a údaje novo prijatého paketu sú uložené/dostupné v SerialTransfer.rxBuff.

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

Vloží „len“počet bajtov ľubovoľného objektu (bajt, int, float, double, struct, atď …) do vyrovnávacej pamäte prenosu začínajúc od indexu, ako je určené argumentom „index“.

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

Načíta "len" počet bajtov z vyrovnávacej pamäte príjmu (rxBuff) začínajúcej na indexe, ako je určené argumentom "index" do ľubovoľného objektu (byte, int, float, double, struct, atď …).

POZNÁMKA:

Najjednoduchší spôsob prenosu údajov je najskôr definovať štruktúru, ktorá obsahuje všetky údaje, ktoré chcete odoslať. Arduino na prijímajúcom konci by malo mať definovanú identickú štruktúru.

Krok 3: Prenos základných údajov

Nasledujúci náčrt prenáša hodnotu ADC analogRead (0) aj hodnotu analogRead (0) prevedenú na napätie na Arduino #2.

Do Arduina č. 1 nahrajte nasledujúci náčrt:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plávajúce napätie; } údaje; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (údaje, veľkosť (údaje)); myTransfer.sendData (sizeof (údaje)); oneskorenie (100); }

Krok 4: Prijmite základné údaje

Nasledujúci kód vytlačí hodnoty ADC a napätia prijaté z Arduina #1.

Do Arduino #2 nahrajte nasledujúci kód:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plávajúce napätie; } údaje; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {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")); }}

Krok 5: Testovanie

Akonáhle sú oba náčrty nahrané do ich príslušných Arduinos, môžete pomocou sériového monitora na Arduino #2 overiť, či dostávate údaje z Arduino #1!

Odporúča: