Obsah:

Sériová komunikace Arduino: 5 kroků
Sériová komunikace Arduino: 5 kroků

Video: Sériová komunikace Arduino: 5 kroků

Video: Sériová komunikace Arduino: 5 kroků
Video: 5. Arduino program 2024, Červenec
Anonim
Sériová komunikace Arduino
Sériová komunikace Arduino

Mnoho projektů Arduino spoléhá na přenos dat mezi několika Arduiny.

Ať už jste fanouškem stavění RC auta, RC letadla nebo navrhování meteorologické stanice se vzdáleným displejem, budete potřebovat vědět, jak spolehlivě přenášet sériová data z jednoho Arduina do druhého. Pro fandy je bohužel obtížné získat sériovou datovou komunikaci fungující ve vlastních projektech, protože sériová data jsou odesílána jako proud bajtů.

Bez jakéhokoli kontextu v proudu bajtů je téměř nemožné interpretovat data. Bez schopnosti interpretovat data nebudou vaši Arduinos schopni spolehlivě komunikovat. Klíčem je přidat tato kontextová data do bajtového proudu pomocí standardního designu sériových paketů.

Sériový design paketů, plnění paketů a analýza paketů jsou složité a obtížně dosažitelné. Naštěstí pro uživatele Arduina jsou k dispozici knihovny, které dokážou celou tuto složitou logiku v zákulisí, takže se můžete soustředit na to, aby váš projekt fungoval bez dalšího omezení. Tento Instructable bude používat knihovnu SerialTransfer.h pro zpracování sériových paketů.

Stručně řečeno: tento Instructable se bude zabývat tím, jak můžete snadno implementovat robustní sériová data do jakéhokoli projektu pomocí knihovny SerialTransfer.h. Pokud se chcete dozvědět více o teorii nízké úrovně o robustní sériové komunikaci, podívejte se na tento tutoriál.

Zásoby

  • 2 Arduino

    Důrazně doporučujeme používat Arduino, které má více hardwarových UART (tj. Arduino Mega)

  • Propojovací drát
  • Nainstalujte SerialTransfer.h

    K dispozici prostřednictvím Správce knihoven Arduino IDE

Krok 1: Fyzická připojení

Fyzická spojení
Fyzická spojení

Při použití sériové komunikace je třeba mít na paměti několik bodů zapojení:

  • Ujistěte se, že jsou všechny pozemky propojeny!
  • Pin Arduino TX (Transmit) musí být připojen k jinému pinu RX (Receive) Arduino

Krok 2: Jak používat knihovnu

Jak používat knihovnu
Jak používat knihovnu

SerialTransfer.h vám umožňuje snadno odesílat velké množství dat pomocí vlastního paketového protokolu. Níže je uveden popis všech funkcí knihovny - mnohé z nich použijeme později v tomto tutoriálu:

SerialTransfer.txBuff

Jedná se o bajtové pole, kde jsou před přenosem uložena všechna data užitečného zatížení, která mají být odeslána sériově. Tuto vyrovnávací paměť můžete naplnit bajty dat a odeslat ji do jiného Arduina.

SerialTransfer.rxBuff

Jedná se o bajtové pole, kde jsou uložena všechna data užitečného zatížení přijatá od druhého Arduina.

SerialTransfer.bytesRead

Počet bajtů užitečného zatížení přijatých druhým Arduinem a uložených v SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inicializuje instanci třídy knihovny. Jako parametr můžete předat jakýkoli objekt třídy „Serial“- dokonce i objekty třídy „SoftwareSerial“!

SerialTransfer.sendData (const uint16_t & messageLen)

To způsobí, že vaše Arduino pošle počet bajtů ve vysílací vyrovnávací paměti „messageLen“druhému Arduinu. Pokud je například „messageLen“4, budou první 4 bajty SerialTransfer.txBuff odeslány sériově do druhého Arduina.

SerialTransfer.available ()

Díky tomu bude váš Arduino analyzovat veškerá přijatá sériová data z druhého Arduina. Pokud tato funkce vrací logickou hodnotu „true“, znamená to, že nový paket byl úspěšně analyzován a data nově přijatého paketu jsou uložena/dostupná v SerialTransfer.rxBuff.

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

Vloží "len" počet bytů libovolného objektu (byte, int, float, double, struct, atd …) do přenosové vyrovnávací paměti počínaje indexem, jak je specifikováno argumentem "index".

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

Načte počet "len" bytů z přijímací vyrovnávací paměti (rxBuff) počínaje indexem, jak je specifikováno argumentem "index" do libovolného objektu (byte, int, float, double, struct, atd …).

POZNÁMKA:

Nejjednodušší způsob přenosu dat je nejprve definovat strukturu, která obsahuje všechna data, která chcete odeslat. Arduino na přijímacím konci by mělo mít definovanou identickou strukturu.

Krok 3: Přenos základních dat

Následující skica přenáší jak hodnotu ADC analogRead (0), tak hodnotu analogRead (0) převedenou na napětí na Arduino #2.

Nahrajte do Arduina č. 1 následující skicu:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plovoucí napětí; } data; neplatné nastavení () {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 (data, sizeof (data)); myTransfer.sendData (sizeof (data)); zpoždění (100); }

Krok 4: Získejte základní data

Následující kód vytiskne hodnoty ADC a napětí přijaté od Arduina #1.

Nahrajte následující kód do Arduina #2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plovoucí napětí; } data; neplatné nastavení () {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: Testování

Jakmile jsou oba náčrty nahrány do příslušných Arduinos, můžete pomocí Serial Monitor na Arduino #2 ověřit, že přijímáte data z Arduino #1!

Doporučuje: