Obsah:
- Zásoby
- Krok 1: Fyzická připojení
- Krok 2: Jak používat knihovnu
- Krok 3: Přenos základních dat
- Krok 4: Získejte základní data
- Krok 5: Testování
Video: Sériová komunikace Arduino: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
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í
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
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:
Sériová brána UDP/IP pro Arduino na štítu ESP8266: 8 kroků
Sériová brána UDP/IP pro Arduino založená na štítu ESP8266: V roce 2016 jsem již publikoval tento návod „Jak vytvořit vlastní bránu Wifi pro připojení vaší sítě Arduino k síti IP“. Protože jsem provedl několik vylepšení kódu a stále toto řešení používám. Přesto nyní existuje několik štítů ESP8266
Sériová komunikace PIC MCU a Python: 5 kroků
Sériová komunikace PIC MCU a Python: Dobrý den, lidi! V tomto projektu se pokusím vysvětlit své experimenty na sériové komunikaci PIC MCU a Python. Přes internet existuje mnoho návodů a videí, jak komunikovat s PIC MCU přes virtuální terminál, což je velmi užitečné. Howev
Sériová komunikace Arduino a Python - displej klávesnice: 4 kroky
Sériová komunikace Arduino a Python - zobrazení klávesnice: Tento projekt je určen pro uživatele počítačů Mac, ale lze jej také implementovat pro Linux a Windows, jediným krokem, který by se měl lišit, je instalace
Bezdrátová sériová komunikace pomocí Bluefruit: 4 kroky
Bezdrátová sériová komunikace pomocí Bluefruit: Zde je jednoduchý krok za krokem průvodce, jak vyměnit vaše vodiče za nízkoenergetické připojení bluetooth: Chvíli mi trvalo, než jsem na to přišel, protože neexistuje téměř žádná dokumentace, jak to udělat s moderními bluetooth nízkoenergetickými technologiemi, jako je jako Bluefrui
Sériová komunikace pomocí ARM Cortex-M4: 4 kroky
Sériová komunikace pomocí ARM Cortex-M4: Jedná se o projekt založený na breadboardu, který používá ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) pro sériovou komunikaci pomocí virtuálního terminálu. Výstup lze získat na obrazovce LCD 16x2 a vstup pro sériovou komunikaci lze zadat v Serial Mo