logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

jak połączyć w sieć kilkanaście Raspberry Pi Zero?

_jta_ 03 Sie 2019 15:18 3348 40
Najlepsze odpowiedzi

Jak połączyć kilkanaście Raspberry Pi Zero w sieć bez Ethernetu, Wi‑Fi i wolnego portu szeregowego?

Najprościej użyć trybu USB gadget, w którym Pi Zero po załadowaniu odpowiednich sterowników działa jak urządzenie sieciowe Ethernet i jest widziane jako karta sieciowa po obu stronach [#18117521] Do zbudowania większej sieci można użyć kilku aktywnie zasilanych hubów USB 2.0, a na pozostałych malinkach ustawić emulację kart sieciowych ze stałymi adresami IPv4 i własnymi MAC; jedna malina może wtedy pełnić rolę punktu dostępowego [#18101326] W wątku podano też gotowy poradnik krok po kroku dla Raspberry Pi Zero Ethernet Gadget [#18106963]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 18094947
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Problem jest w tym, że one nie mają Ethernet-u, ani WiFi, na dodatek port szeregowy jest już wykorzystany do czego innego. Na czym jeszcze - z tego, co mają Pi Zero - można zrobić sieć do łączności między nimi? Chodzi o to, żeby do tego było jakieś oprogramowanie.

    Nie chciałbym dodawać do wszystkich wtyczek WiFi, bo po pierwsze to trochę kosztuje, po drugie wymaga routera WiFi (i trzeba by to uzgadniać z administratorami), po trzecie te Pi jakoś musiałyby się w tej sieci odnajdywać, i z tym mógłby być spory problem.
  • REKLAMA
  • #3 18095119
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    To jest dużo droższe od wtyczek WiFi, a mam wrażenie, że jeszcze więcej z tym będzie problemów.

    Te Pi Zero są już mechanicznie zamontowane, potrzebuję je połączyć tak, jak są, a nie montować na nowo.
  • REKLAMA
  • #4 18095128
    PiotrPitucha
    Poziom 34  
    Posty: 2658
    Pomógł: 201
    Ocena: 424
    Witam
    Jaki problem z WiFi? można chyba kupić za kilkanaście złotych WiFi na USB i po sprawie. Z Routerem chyba też nie ma problemu, bo można go zrobić z Pi Zero i po krzyku. Jak kochasz kable to są przelotki USB/Ethernet , sam taką miałem i używałem w sprzęcie przy konfiguracji WiFi.
    Pozdrawiam

    Dodano po 5 [minuty]:

    Witam
    Jeśli to, nie musi być Ethernet to jest cała masa "komunikatorów" na SPI, tylko pewnie trzeba by wziąć w rękę lutownicę, MODBUS, CAN, czy RS485 z jakimś własnym protokołem.
  • #5 18095170
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    WiFi na USB od około 7zł; Ethernet na USB od 10zł (są tańsze, ale z podanej informacji nie wynika, że będzie działać z Linux-em).

    Problem z WiFi: to ma być używane w miejscu, gdzie działa wiele sieci WiFi, i nie może ich zakłócać. No i znajdowanie Pi w sieci.

    SPI - masz namiary na jakiś opis i soft, który z tym pójdzie? Wiem, że się da, ale tworzenie projektu "od zera" to spora robota.
  • #6 18095589
    Konto nie istnieje
    Poziom 1  
  • #7 18095753
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Informację o ENC28J60 znalazłem; NRF24L01 jest ponad 2X tańszy, ale czy jest jakiś opis, jak na tym zbudować sieć? Czy przez sieć MESH rozumiesz "Mesh networking"?

    Znalazłem https://github.com/nRF24/RF24 i tam jest link do dokumentacji http://tmrh20.github.io/RF24/
  • #8 18095900
    PiotrPitucha
    Poziom 34  
    Posty: 2658
    Pomógł: 201
    Ocena: 424
    Witam
    Co do SPI to zarówno Modbus jak i CAN jest dobrze opisany w sieci, w Arduino są nawet przykłady które można adoptować do własnych zadań. Przykłady CAN sprawiają problem, bo są pisane do starych biblioteki a biblioteki same się aktualizują, trzeba ręcznie wgrać stare lub modyfikować program.
  • #9 18096083
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Piszesz na tyle ogólnikowo i niejasno, że nawet nie mogę się zorientować, czy to, co proponujesz, może się nadawać, czy nie. Nie określasz nawet, czy i jaki sprzęt jest do tego potrzebny, jaka może być topologia sieci...

    Z nazwami i opisami sieci Modbus i CAN się zetknąłem, ale od opisu do łączności w sieci jest bardzo daleka droga.

    Arduino Modbus napisał:
    This library implements the Modbus protocol over two different types of transport: serial communication over RS485 with RTU (Remote Terminal Unit) or Ethernet and WiFi communication with TCP protocol.
    - z tego by wynikało, że aby tego użyć, potrzebuję sprzętu, na którym łatwo mogę mieć sieć i bez tej biblioteki. Do CAN na szybko nie znajduję nic sensownego - jakieś oferty książek do przeczytania, żeby wiedzieć, jak się za to zabrać.

    Ja nie chcę komplikować tego, co może być proste. To nie ma być Wielki Projekt Zaawansowanej Sieci, tylko coś małego i prostego, co posłuży jako narzędzie do pracy.

    Do przesłania informacji bez potrzeby pilnowania szybkości i z potwierdzaniem wystarczą 3 linie (coś w stylu I2C + potwierdzanie każdej zmiany). Można by przyjąć, że wśród tych Pi jest master i on rozpoczyna transmisję, wpisując do jakiegoś rejestru (74HC595?) adres tego slave Pi, z którym ma się połączyć. Do tego dekoder adresu, żeby dalsze sygnały szły tylko do wybranego slave Pi.
  • REKLAMA
  • #10 18096301
    Konto nie istnieje
    Poziom 1  
  • #12 18096750
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    Może magistrala LIN ?
  • #13 18096841
    Konto nie istnieje
    Poziom 1  
  • #14 18096883
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Local Interconnect Network? No, niezupełnie - port szeregowy jest w użyciu. Jest dostępny np. I2C - ale czy da się w prosty sposób zrobić na nim sieć?

    Według https://radiostud.io/howto-i2c-communication-rpi/ Raspberry Pi może używać I2C w konfiguracji multi-master - ale jak to się robi? Mając multi-master I2C można podłączyć pamięć I2C i używać jej jako bufora do komunikacji; przydałoby się mieć możliwość odczytania i następnie zapisania bajtu bez zwalniania magistrali, żeby inne Pi nie zapisało tego samego, ale można zaplanować użycie bufora tak, by nie było to konieczne.

    Inna możliwość, to Raspberry Pi jako I2C slave (pytanie i linki, Raspberry as an I2C SLAVE) - i nawet nie trzeba tej pamięci - o ile to działa sprzętowo na Pi Zero.

    A co mi da MAX485? Translowanie poziomu napięć? Po co mi to na odległościach pół metra?
  • #15 18097575
    PiotrPitucha
    Poziom 34  
    Posty: 2658
    Pomógł: 201
    Ocena: 424
    Witam
    Czasami się zastanawiam jak to jest że mi google działa a pytającym nie :(.
    Wracając to I2C to szybkie pytanie do googla da ci odpowiedź po co to zostało stworzone i na jakie odległości działa, raczej zapomnij, pół metra razy kilkanaście urządzeń daje odległości praktycznie nieosiągalne.
    Wracając do SPI, jest cała masa urządzeń które przy pomocy SPI komunikują się z procesorem wyrzucając dane na zewnątrz przy pomocy jakichś protokołów.
    Pierwsze z brzegu to Modbus i CAN, wystarczy zaglądnąć na Aliexpress lub jak chce się przepłacać to można kupić w Polsce konwertery SPI/CAN, podobnie Modbus, ale Modbus jest droższy, nie wnikam dlaczego.
    Ostatecznie można zrobić RS485, jak Rx/Tx jest zajęte to można go zrobić programowo, nie wiem jak ale wiem że można!
    Nie powiem ci jak wygląda sieć CAN, bo to już kompletne lenistwo by tego nie znaleźć, w końcu chcesz robić sieć więc musisz o niej coś wiedzieć.
    Samo RS485 jest kłopotliwe, trzeba wiedzieć kto nadaje i odzyskać informacje o kierunku transmisji, da się ale po co ?
    O Modbus możesz poczytać dla przykładu w ostatniej Elektronice dla wszystkich, pewnie jeszcze jest w kioskach.
    Czekać cię będzie jeszcze kilka połączeń, lub kup gotowy CAN HAT dla RPi ZERO, ale to już koło 10$, ale zależy co jest droższe, forsa czy czas....
    Potem tylko szukanie po googlu by znaleźć gotowe przykłady oprogramowania, gotowy interface CAN/SPI znalazłem za 1,35$ więc lutować się nie opłaca bo części droższe.
  • REKLAMA
  • #16 18097822
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Wikipedia podaje łączną długość połączeń kilka metrów (pojemność 400pF) - wystarczy z zapasem, kwestia topologii.

    Problemem jest to, że I2C na Raspberry Pi nie ma modu multi-master. Ale slave jest dogodniejszy i ponoć jakoś działa.

    Czasami się zastanawiam jak to jest że mi google działa a pytającym nie

    Jakoś tak się złożyło, że to ja zamieszczałem tu linki do tego, co znalazłem przez Google. ;)
  • #17 18098038
    gag70
    Poziom 24  
    Posty: 500
    Pomógł: 65
    Ocena: 76
    PiotrPitucha napisał:
    Ostatecznie można zrobić RS485, jak Rx/Tx jest zajęte to można go zrobić programowo, nie wiem jak ale wiem że można!

    Napisany w assemblerze softwareowy COM chodził bez pudła z szybkością 1200bps na 8051 z zegarem 12MHz, w którym był procesem obocznym w stosunku do reszty (np. probkowanie sinusoidy na przerwaniach dla FFT). Także się da.
  • #18 18098170
    Konto nie istnieje
    Poziom 1  
  • #19 18098320
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    softwareowy COM chodził bez pudła z szybkością 1200bps na 8051 z zegarem 12MHz

    Zapewne na tym 8051 nie chodził tak zaawansowany system, z jakim używa się Pi. Wystarczy, że któryś sterownik na chwilę zablokuje przerwania...

    Sorry, że z innej beczki - to jak to się stało, że sprawa wyszła dopiero teraz, PO zamontowaniu Pi.

    Bo ten, kto to robił, nie wpadł na pomysł, że jakaś koordynacja działań tych Pi może być potrzebna. A nikt inny nie domyślił się, że on tego nie zaplanuje.
  • #20 18101326
    nobanmeplease
    Poziom 16  
    Posty: 232
    Pomógł: 7
    Ocena: 20
    Witam!
    Myślę że najtaniej jest je połączyć przy użyciu kilku hubów USB 2.0 z aktywnym zasilaniem do głównej maliny robiącej za punkt dostępowy. Zaś na pozostałych malinkach konfigurujesz emulację kart sieciowych ze stałymi adresami ipv4 jak i indywidualnymi adresami MAC.

    Dzięki temu masz szynę szybszą niż wifi i ethernet a każda malinka będzie wykrywana jako oddzielna karta sieciowa tak jak na poniższym filmie :D


  • #22 18101461
    Tremolo
    Poziom 43  
    Posty: 13799
    Pomógł: 1016
    Ocena: 497
    Każda ze stacji będzie działała w obie strony - wyjścia/wejścia. Czy każda będzie się komunikować z każdą? Przy niskiej wymaganej przepustowości - wolno zmieniające się sygnały robiłem przy kilku stacjach nadawczo-odbiorczych myk, że w pętli trzech urządzeń 1,2,3 puszczałem informacje z 1 do 3 za pośrednictwem 2. Oszczędzając w ten sposób dwie głowice i kilka płytek kosztem kilku mostków.
    Pomogłem? Kup mi kawę.
  • #23 18101609
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Rozumiem, że chodzi o wykorzystanie jakiegoś zestawu nadajnik-odbiornik w zakresie "radiowym" (może 433MHz, może 2.4GHz), każde Raspberry Pi jeden nadajnik i jeden odbiornik?

    A ja myślałem o połączeniu poprzez piny GPIO "w kółko" - 3 sygnały na połączenie, każda stacja odbiera od jednej i nadaje do jednej, czyli musi wykorzystywać 6 pinów. Przesłanie komunikatu + odpowiedzi wymaga w sumie uczestniczenia wszystkich stacji w "kółku" i użycia wszystkich połączeń. A może da się użyć mniej "drutów" i pinów? Ale to by było kosztem szybkości - np. każda stacja ma po 1 pinie do odbierania zegara, odbierania danych, nadawania zegara i nadawania danych. Nadawca podaje zegar i dane - inne je powtarzają - a nadawca po każdej zmianie czeka, aż dotrze ona z powrotem.

    Jeszcze inna możliwość: pamięć RAM z interfejsem I2C i zrobić software-owo I2C z arbitrażem, żeby działał jako multi-master (niestety sprzętowy I2C w Raspberry Pi nie ma trybu multi-master, więc nie da się go tu wykorzystać, trzeba emulować software-owo).
  • #24 18101647
    gag70
    Poziom 24  
    Posty: 500
    Pomógł: 65
    Ocena: 76
    Taki software'owy token ring (sześć pinów) jest zabójczy jeśli jedno urządzenie zgłupieje, stoi bez zasilania, albo ma zwykły problem z błędami transmisji itp.
  • #26 18102116
    nobanmeplease
    Poziom 16  
    Posty: 232
    Pomógł: 7
    Ocena: 20
    _jta_ napisał:
    A jest jakiś opis, jak to zrobić? Szybsze, niż Ethernet, to raczej nie - port USB na malince nie jest specjalnie szybki.


    Proponuję obejżeć uważnie film, zrobić to samo co na nim i zrobić resarch. Zaś USB 2.0 ma przepustowość jak 4,5 karty ethernet 100mbps.
    Niestety malinki nie mam ale gdzieś na niebezpieczniku czytałem że ten sposób działa i jest wykorzystywany do infekowania serwerów na Linuxie oraz Windowsie (mało inwazyjne omijanie firewalla) :D
    Zaś jeżeli malinki mają pingować między sobą to trzeba jakiś serwer DNS zrobić na głównej malince.
    Lepszego sposobu niż ten który podałem po prostu nie ma i nie będzie.
    Zaś jeżeli będziesz bawił się w jakieś token ring czy wifi to wydajność oraz niezawodność będą fatalne.
  • #27 18102982
    Tremolo
    Poziom 43  
    Posty: 13799
    Pomógł: 1016
    Ocena: 497
    Jakie sygnały to będzie wysyłało? Tylko 0 i 1 coś jeszcze programowego.będzie robiło? Powiedzmy ze stacji 2 input na wyjście stacji 15 ego? Może jakieś.prostsze metodyki da radę.

    Tu nie ma nic o łączeniu do komputerów.
    Pomogłem? Kup mi kawę.
  • #28 18104022
    pietszyk
    Poziom 14  
    Posty: 93
    Pomógł: 7
    Ocena: 47
    Jeśli będzie ostatecznie wybierzesz komunikację po sieci Ethernet bez różnicy czy wi-fi czy kabel ethernet lub emulacja przez USB do łączenia się z malinami proponuje użyć protokołu MQTT jest na malinę serwer/klient Mosquito konfiguracja prosta.
    Jedna malina musi robić za serwer i klienta a reszta będzie klientami. Są do tego ładnie opisane biblioteki pod python można też obsługiwać to skryptem bash.
    Poczytaj w wolnej chwili.
  • #30 18117521
    _jta_
    Specjalista elektronik
    Posty: 49072
    Pomógł: 3212
    Ocena: 4248
    Chyba tu jaśniej napisali, o co chodzi. Rozumiem, że przez załadowanie sterowników uzyskuje się to, że port USB w Raspberry Pi Zero staje się portem "device" i podłączony do komputera jest widziany jako port Ethernet z obu stron (i od tego Pi Zero, i od komputera)? No cóż, coś takiego + hub USB powinno pozwolić na zbudowanie sieci...

Podsumowanie tematu

✨ Użytkownicy dyskutują o sposobach połączenia kilku Raspberry Pi Zero w sieć, biorąc pod uwagę ograniczenia związane z brakiem Ethernetu i WiFi oraz wykorzystaniem portu szeregowego. Proponowane rozwiązania obejmują użycie modułów komunikacyjnych na SPI, takich jak ENC28J60 i nRF24L01, które mogą stworzyć sieć MESH. Inne sugestie to wykorzystanie magistrali RS485 lub I2C, z uwzględnieniem problemów z synchronizacją i obsługą przerwań. Użytkownicy rozważają także emulację kart sieciowych przez USB oraz zastosowanie protokołu MQTT do komunikacji. Wskazano na potrzebę prostoty w implementacji, aby uniknąć skomplikowanych rozwiązań.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA