Předpokládejme, že jeden připojí dvě desky Arduino Uno přes piny Rx a Tx. Pak, pokud by byla jedna nebo obě desky Arduino připojeny k počítači a případně by se otevřely sériové monitory, budou pin Tx a Rx stále fungovat? tj. bude Arduino i nadále komunikovat prostřednictvím pinů Rx a Tx, když komunikuje s počítačem? Pokud ne, jak je zajistit, aby fungovaly při připojení k počítači?
Komentáře
- Čip USB FTDI je připojen k pinům TX / RX. Serial tedy nemusí fungovat tak, jak očekáváte.
Odpovědět
Předpokládejme, že jedna propojila dvě desky Arduino Uno přes piny Rx a Tx.
Předpokládám, že připojíte TX jednoho Arduina k RX druhého a naopak, což je správný způsob, jak je propojit. Jak vysvětlil Sealion ve své odpovědi, neměli byste spojovat dva TX piny dohromady.
pokud byla jedna nebo obě desky Arduino připojeny k počítači a případně otevřely sériové monitory
Pokud to uděláte, Arduino si toho ani nevšimne.
No, abych byl přesnější … na Uno, nea je malý čip r USB konektor označený „MEGA16U2“. Tento čip se používá jako USB / sériový převodník a si to všimne, když připojíte USB odkaz a když otevřete port. Hlavní čip (velký PDIP28), který je mikrokontrolérem, který spouští vaši skicu, však nebude ani vědět, ani se o něj nebude starat.
bude pin Tx a Rx stále pracujete?
Absolutně.
bude Arduino stále komunikovat prostřednictvím Rx a Tx pin, když komunikuje s počítačem?
RX nebude s počítačem komunikovat. Co se stane, je:
- Ať vaše Arduino zapíše na svůj sériový port, přijme jej jak ostatní Arduino, tak sériový monitor.
- Cokoli pošlete přes sériový monitor, bude ztraceno.
- Když
Serial.read()
, získáte vše, co nastavilo druhé Arduino.
Důvodem tohoto chování je 1 kΩ rezistor, který leží mezi TX Mega16U2 a RX hlavního mikrokontroléru. Když připojíte tento RX k druhému TX Arduina, který má nízkou impedanci (≈ 2 5 Ω), že TX „vyhraje“: nízkoimpedanční výstup přemůže vysokoimpedanční.
Odpovědět
jak zajistit, aby [dva navzájem komunikovali Arduinos] při připojení k počítači?
Existují různé způsoby, jak mohou 2 Arduinos navzájem přímo komunikovat, zatímco jeden nebo oba komunikují se sériovým monitorem přenosného počítače přes USB.
-
Pro komunikaci Arduinos použijte UART, který je nezávislý na připojení USB. (Viz https://www.arduino.cc/reference/en/language/functions/communication/serial/ )
- Několik desek kompatibilních s Arduino, například Arduino Mega 2560, Arduino Due, Arduino Uno Wifi Rev.2 atd. Mají 4 hardwarové UART; piny Serial1 (všimněte si „1“) lze použít ke komunikaci s jiným Arduino, aniž by došlo k narušení komunikace UART Serial (bez „1“) přes USB k notebooku. (Bohužel, Arduino Uno má pouze 1 hardware UART).
- Arduino Micro založené na ATmega32u4 a deriváty Arduino založené na Arduino Leonardo a ATmega32u4, jako je FLORA a mnoho ARM derivátů založených na ARM, jako je řada Teensy , má rozhraní USB, které nepoužívá žádné kolíků UART; takže kolíky Serial1 (všimněte si „1“) lze použít ke komunikaci s jiným Arduinem, aniž by docházelo k interferenci komunikace Serial (bez „1“) bez UART přes USB k notebooku. (Bohužel , Arduino Uno má USB rozhraní, které používá své jediné hardwarové UART piny).
- Dokonce i Arduino Uno, které má pouze 1 hardwarový UART, jehož piny jsou pevně připojeny čip rozhraní USB, může bit-bang pomalou simulaci UART na jiných pinech. Viz Jaký je ' rozdíl mezi všemi softwarové sériové knihovny? Která z nich je kompatibilní s Arduino Nano? .
-
Spíše než se pokoušet simulovat UART v softwaru (načasování je trochu složité), může být jednodušší / rychlejší použít jiné méně časově citlivé způsoby komunikace mezi Arduino Unos nebo jinými Arduiny, například
- SPI mezi 2 Arduinos (a) ; (b)
- I2C mezi 2 Arduinos (a) (b)
- PJON mezi 2 Arduinos
- několik asynchronních komunikačních protokolů nemá vůbec žádné časové souvislosti
- atd.
Odpověď
Mám úplně stejný problém! Pro ladění jsem používal desku Arduino Uno s Jtag ICE mkii, což fungovalo dobře. Když jsem začal používat UART, byl to těžký nepořádek. Přenos z Arduina na externí adaptér TTL-USB fungoval, ale ne v opačném směru. Hrál jsem hodiny, než jsem viděl toto vlákno, a to mi dalo nápad podívat se do shematic – > Bang! Viděl jsem dva odpory. Poučení: Nepoužívejte hardware Arduino bez zbylých nástrojů! Myslel jsem, že je dobrý nápad použít hardware pro rychlý vývoj. Nyní mě to stojí víc času, než jsem si myslel …
Odpověď
Neměli byste spojovat dva TX piny dohromady. Arduino má několik ochranných rezistorů, ale ani se nedoporučuje připojit dva výstupní piny.
Jediným způsobem, jak ušetřit přímé použití pinů RX / TX, je odstranění ochranných rezistorů (RN4A a RN4B v referenčním provedení) ) nebo alespoň RN4A a používat pouze jedno připojení najednou. Nepomáhá, pokud nepoužíváte připojení k PC, nebo neotevře Serial Monitor, protože piny jsou stále výstupem.
(Více pinů RX není problém, protože jsou vstupy)
(A samozřejmě vím, že by to většinu času mohlo fungovat společně s více piny TX, ale doporučil bych to)