Komunikace mezi dvěma deskami Arduino

vesterna12

  • ***
  • 124
  • byrokracie zabíjí kreativitu
    • Zobrazit profil
    • E-mail
Komunikace mezi dvěma deskami Arduino
« kdy: 18. 07. 2021, 11:58:17 »
Pro komunikaci mezi ústřednou a čtečkou přemýšlím nad použitím ModBus nebo CAN. Do budoucna bych chtěl čtečky přidávat. Vzdálenost mezi ústřednou a čtečkou nepřesahuje 40M. Pokud je tu někdo kdo řešil podobný problém jaký protokol se Vám osvědčil?


Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #1 kdy: 18. 07. 2021, 14:43:35 »
To záleží na topologii. Bude to celé řídit master (ústředna) nebo tam budete mít asynchronní zprávy od čteček? Modbus je řízený masterem, CAN je asynchronní s prioritizací (a omezením délky zpráv). Jak bude řešena adresace? Pevné adresy nebo dynamické podle stavu sítě?

Nabízí se totiž i něco nad RS422 nebo RS485, na což oproti CAN nepotřebujete složitou logiku.

Jaká data budete přenášet? I nad obyčejnou UART linkou se dá postavit něco jednoduchého na implementaci třeba s HLDC pakety [1].

https://en.wikipedia.org/wiki/High-Level_Data_Link_Control#Asynchronous_framing

vesterna12

  • ***
  • 124
  • byrokracie zabíjí kreativitu
    • Zobrazit profil
    • E-mail
Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #2 kdy: 18. 07. 2021, 14:47:39 »
Ústředna se bude doptávat čteček v cyklech jestli mají data k odeslání (id karty). Kolize tak snad nebudou vznikat. Každá čtečka dostane vlastní statické id. Z toho asi plyne logičtěji Modbus nebo teda RS485

Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #3 kdy: 18. 07. 2021, 15:28:22 »
Osobně Modbus nemám moc rád (jeho stáří je vidět..), ale ano, CAN se tu moc nehodí, protože nevyužijete jeho vlastnosti a jen si budete komplikovat život.

Mimochodem, ta čtečka karet (125 kHz nebo ISO 14443?) bude také přes Arduino? Jeden takový projekt se mi tu válí v šuplíku. Před pár lety jsem testoval jsem možnost levných a bezpečných karet - Mifare Ultralight C.

http://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html

PanVP

Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #4 kdy: 18. 07. 2021, 15:42:47 »
Podobnou věc jsem řešil přes ESP a Ethernet.
Důvod?
Výhoda je, že Ethernet je obecně všude roztahaný, hlavně se dostanete do switche a pak už kamkoliv.

  • Snadno se to debuguje z hlediska kabeláže - může vyzkoušet i ajťák
  • Komunikace se dá zachytávat zrcadlením portů a wiresharkem
  • K dispozici jsou standardní knihovny, což i u CAN/I2C/RS, ale Ethernet se ladí snáz
  • Když ti něco nepůjde, dokáže ti s tím poradit hodně lidí, podle sestavených paketů
  • Dokonce i laciné potvory zvládnout cca 50 až 80 metrů, dobré kusy samozřejmě 100+
  • Ethernet může být i zdroj napájení (klidně pasivní PoE)
  • V podniku můžete mít připravenou další čtečku, třeba i se stejnou IP, kus za kus vymění i údržba a nemusí se tam jezdit
  • Ethernet je považován za standard na delší vzdálenosti
  • Přestěhování zařízení k jiným dveřím je o úroveň snazší.

Z mého pohledu je transparentnější, aby jednotky nekomunikovaly spolu, ale se serverem.
Chováš se k tomu jako k hernímu serveru - klienti se připojují k serveru.
Změny na topologii se dělají snáz a bude možné zapojení lépe aktualizovat.
Dá se říct, že trend je odklon od chuchvalců součástek k software.
« Poslední změna: 18. 07. 2021, 15:48:15 od PanVP »


PanVP

Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #5 kdy: 18. 07. 2021, 15:56:09 »
Doplnění:

ESP můžeš přepnout na Wi-Fi....třeba v domácí automatizaci.

No a nebo, pokud se ti zachce, poslat to přes zásuvku - opět v domácí automatizaci:
https://pctuning.cz/article/domaci-sitovani-powerline-sit-pres-zasuvky-s-230-v

Speciální kabely spojující dvě zařízení....to je myslím historie.
Přijde mi to hrozně neflexibilní.

V rámci jednoho stroje bych určitě "násilně" nespojoval dvě zařízení přes Ethernet, ale ven ze zařízení by měl vést právě Ethernet. Ethernet je pro mnoho lidí srozumitelné rozhraní, znají jeho vlastnosti a nebudou ve stresu, že tam je nějaké dementní propojení, které musí hlídat. Vyměnit Ethernetový kabel je ve firmách běžný postup.
Řešit nějakou blbou dvoulinku...máš na to zavolat síťaře nebo elektrikáře? Já bych to nedělal.
Ono to fungovat bude, ale představ si, že ti někdo přinese film na BlueRay disku, že to je fakt super.
Koukneš na něj a budeš si myslet něco o podivínech.
Prostě čekáš, že ho přinese na flashce nebo pustí online.

Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #6 kdy: 18. 07. 2021, 15:59:32 »
Pokud je v místě ethernet a server, tak proč ne, má to spoustu výhod. Pro zablokování ztracené karty nemusíte nikam chodit atd.

Nicméně u vstupu je stejně vhodné, aby byla fyzicky (a elektricky!) oddělena čtečka a její řízení (tj. to napojení na ethernet). Jinak riskujete, že schopný vandal otevře krabičku, pustí do drátů třeba nějaké vyšší napětí a tím odpálí drahý síťový prvek na konci vedení.

Nicméně k ethernetu a hlavně jeho kabeláži.. já po UTP provozuju i ty různé RS485. Dokonce jednou i full duplex SPI přes RS422 převodník. Ten kabel je tak úžasně všudypřítomný, levný a použitelný, že jsem z něj poslední rok udělal i (po rozpletení párů) anténu a zrovna dneska jsem na pár vlasových spojů dokonce rozebral jednu z UTP licen :)

vesterna12

  • ***
  • 124
  • byrokracie zabíjí kreativitu
    • Zobrazit profil
    • E-mail
Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #7 kdy: 18. 07. 2021, 16:26:34 »
Na ethernet se dostane pouze ústředna, které se bude dotazovat na autentizaci a autorizaci načtených karet.
Celé řešení bude používat vlastní záložní zdroj.
V případě, že server není dostupný info o autentizaci a autorizace bude dostupné na kartě.
Linku připojovat před barák zatím nemůžu, protože nevím jak dostatečně ochránit komunikaci proti odposlechu komunikace. Moc jsem to ještě neměl čas zkoumat. Pochopitelně ochrana proti zkratu atd. s tím počítám...
Zatím jde o klasické 125 Khz klíčenky.

_Jenda

  • *****
  • 1 601
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #8 kdy: 18. 07. 2021, 16:44:18 »
Já to chvíli zkoušel s RS485 (s galvanicky neizolovaným převodníkem), hořelo to a byly s tím samé problémy, a pak jsem se na to vykašlal, nakoupil jsem routříky s OpenWRT (Arduino připojené přes USB) a provozuju to na tom + ethernet.

Je to galvanicky izolované (RS485 transceivery s galvanickou izolací existují taky, ale stojí raketu), o něco dražší (ale v porovnání s tím izolovaným RS485 zas ne o moc) a nesrovnatelně pohodlnější na programování, protože je tam normální Linux, Python, SSH a sokety, než aby někdo musel řešit sběrnici a taky třeba vzdálené upgrady FW a debugování.

Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #9 kdy: 18. 07. 2021, 18:11:50 »
Galvanicky izolovat OC sběrnice jako RS485 nebo I2C je děsná drbačka, to je fakt. Ale ono občas stačí použít 2x RS422, protože 2x jednosměrná komunikace se izoluje o dost snáz.

Ta venkovní čtečka ale izolovaná být musí. Klidně si umím představit topologii

čtečka (Arduino, RC522 nebo podobný krám přes Wiegand) - dveře - opto-izolace - OpenWRT - ethernet ...

PanVP

Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #10 kdy: 18. 07. 2021, 22:50:30 »
Arduino připojené přes USB

Víš, že OpenWRT umí I2C?
Třeba na připojení nějaké čtečky to může být lepší než USB.
...já USB moc nevěřím...

_Jenda

  • *****
  • 1 601
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #11 kdy: 19. 07. 2021, 00:19:02 »
Ano, vím, že OpenWRT umí I2C (pokud to podporuje daný SoC, což tady asi není ten případ, ale má to GPIO, takže jde bitbangovat), ale já mám na tom Arduinu realtime aplikaci (krokový motor), kterou nemůžu pouštět bez zásadního hackování na tom OpenWRT (a asi by bylo málo GPIO). A ano, taky vím, že bych to mohl připojit přes sériák, který je vestavěný v tom routeru, jenže to (stejně jako to I2C) znamená ten router rozebrat a připájet to tam (což taky znamená, že to pak nemůže technik vyměnit v terénu), a navíc nějak hackovat upgrady firmwaru (abys mohl MCU resetnout do bootloaderu), a to je jednodušší tam za $2 dát to USB, nehledě na to, že to pak vypadá profesionálněji než vybrakovaný router, což byla jedna z podmínek návrhu toho zařízení (tady o tom psal šéf).

vesterna12

  • ***
  • 124
  • byrokracie zabíjí kreativitu
    • Zobrazit profil
    • E-mail
Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #12 kdy: 19. 07. 2021, 01:04:20 »
OpenWrt je v tomhle úplně skvělý. V minulosti jsem používal právě sériový port na desce pro čtečku karet. V závěru z toho byl docházkový systém. Jediné co chybělo byla podpora openssl, ale je to už tak 5 let zpátky...
Můžete poslat jaký HW používáte? Proč jste nepoužil Arduino s Wifi, ESP32 nebo rovnou Raspberry?

_Jenda

  • *****
  • 1 601
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Komunikace mezi dvěma deskami Arduino
« Odpověď #13 kdy: 19. 07. 2021, 05:45:09 »
OpenWrt je v tomhle úplně skvělý. V minulosti jsem používal právě sériový port na desce pro čtečku karet. V závěru z toho byl docházkový systém. Jediné co chybělo byla podpora openssl, ale je to už tak 5 let zpátky...
Můžete poslat jaký HW používáte? Proč jste nepoužil Arduino s Wifi, ESP32 nebo rovnou Raspberry?
OpenSSL samozřejmě v OpenWRT repozitářích normálně je. Wifi jsem nepoužil, protože zařízení je v hliníkové krabici položené na centimetr tlusté ocelové desce, těsně nad tím vysílá radar a komunikuje se s tím zdola. Navíc se později ukázalo, že přítomnost switche taky řeší případné připojení kamer (máme aktuálně všude jednu kameru, která se dívá na radar, jestli se nerozsypala mechanika, a někde několik kamer co koukají na oblohu). Raspberry jsem nepoužil, protože nám to všude příšerně odchází a má to špatný povolený rozsah teplot. Jako HW používám hranaté bílé Mikrotiky, jak je vidět z fotky. Buď hEX (RB750Gr3 - dvoujádro s HT, 256 MB RAM) nebo hAP (menší výkon, ale má wifi).