Tworzenie sieci wątków z płytkami Silicon Labs EFR32 i OpenThread przy użyciu Simplicity Studio v5

1. Wstęp

26b7f4f6b3ea0700.png

OpenThread (OT) Google to oprogramowanie typu open source, które korzysta z wątku. Aby przyspieszyć tworzenie produktów dla połączonych domów i budynków komercyjnych, firma Google udostępniła OpenThread, mając na celu szerszy dostęp do technologii sieciowych używanych w produktach Google Nest. OpenThread jest bardzo przenośny i ma niewielką warstwę abstrakcyjną platformy. Niewielki rozmiar pamięci. Obsługuje zarówno projekty oparte na układach scalonych, jak i współprocesorach sieciowych (NCP).

Specyfikacja wątku definiuje protokół zabezpieczeń IPv6 oparty na niezawodnym, bezpiecznym, niskim zużyciu energii między urządzeniami do użytku w budynkach domowych i komercyjnych.

Firma Silicon Labs ulepszyła OpenThread do współpracy ze sprzętem firmy Silicon Labs. Ten kod źródłowy jest dostępny w GitHubie, a także w pakiecie SDK (SDK) zainstalowanym w prostej wersji Studio 5 (SSv5). Pakiet SDK zawiera w pełni przetestowany zrzut kodu źródłowego GitHuba. Obsługuje on szerszy zakres sprzętowy niż wersja GitHub oraz zawiera dokumentację i przykładowe aplikacje niedostępne na GitHubie.

Z tego przewodnika dowiesz się, jak zacząć tworzyć aplikacje OpenThread przy użyciu pakietu Silicon Labs OpenThread SDK i Sonoy Studio 5. Na obrazie poniżej widać płyty (BRD) i sprzęt skonfigurowany przy użyciu OT Border routera i 2 urządzeń z wątkami używanych w ćwiczeniach z programowania.

EFR32MG Konfiguracja sprzętu

Czego się nauczysz

  • Jak utworzyć projekt OpenThread przy użyciu Silicon Labs Sonoy Studio IDE.
  • Jak tworzyć i błyskać pliki binarne wiersza poleceń OpenThread na tablicach radiowych Silicon Labs.
  • Jak skonfigurować program Raspberry Pi 3B+ lub nowszy jako router OpenThread Border Router (OTBR) przy użyciu Dockera.
  • Jak utworzyć sieć Thread na OTBR.
  • Poza zasięgiem uruchamiania urządzeń na potrzeby sieci Thread.
  • Jak zweryfikować komunikację między wątkami między węzłami przy użyciu polecenia ping.

2. Wymagania wstępne

Sprzęt:

  1. 3 tablice radiowe EFR32MGxx – możesz używać dowolnej kombinacji tych urządzeń. To ćwiczenie ćwiczeń korzysta z BRD4166A jako RCP i dwóch BRD4168A jako urządzeń z pełnym wątkiem.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Jeśli dopiero zaczynasz, możesz skorzystać z zestawu startowego EFR32 z płytkami wymienionymi powyżej.
  2. BRD4001A: bezprzewodowe tablice startowe (WSTK) służące do hostowania tablic radiowych. Każda płytka radiowa musi mieć tablicę początkową, z wyjątkiem BRD4166A. Mini kable USB do podłączenia do płyty głównej lub kabla micro USB dla BRD4166A.

EMT

  1. Raspberry Pi 3B+ lub nowsza z obrazem Raspbian Stretch Lite lub Raspbian Stretch with Desktop, który jest połączony z internetem przez Ethernet. Określamy go jako router OT Border.
  2. System hosta Windows/Linux/Mac z co najmniej 2 portami USB i połączeniem internetowym. Sprawdź wymagania sprzętowe i systemowe w SSv5.
  3. Co najmniej 1 kabel Ethernet do połączenia Raspberry Pi z internetem. Pliki WSTK obsługują też debugowanie i migotanie przez adresy IP, więc opcjonalnie możesz użyć dodatkowych kabli Ethernet, by połączyć WSTK z systemem hosta przez przełącznik Ethernet.

Oprogramowanie:

  • Instalacja i aktualizacja prostej wersji Studio 5 w systemie Windows/Linux/macOS
    • Łańcuch narzędzi ARM GNU
    • Pakiet Gecko SDK Suite w wersji 3.2.0 lub nowszej i pakiet SDK Silicon Labs OpenThread.

3. Konfiguracja sprzętu

To ćwiczenia z programowania zostały utworzone za pomocą

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, jak pokazano po lewej stronie.
  2. Dwa EFR32MG13 BRD4168A, jak widać po prawej.
  3. Prosta instalacja w wersji 5 na macOS Catalina 10.15.7 z
    1. Gecko SDK 3.2.0
    2. GNU ARM, wersja 7.2.1

4168 BRD

Podłącz każdą płytę główną bezprzewodową do komputera hosta przez USB, jak pokazano na ilustracji poniżej. Te połączenia pozwolą na programowanie i analizę sieci RCP i urządzeń końcowych. Najpierw wykorzystamy komputer hosta do zaprogramowania BRD4166A z oprogramowaniem układowym OT-CPP, a potem połączenia z Raspberry Pi. Opcjonalnie urządzenia końcowe można podłączyć do komputera za pomocą przełącznika sieci Ethernet. Zestawy startowe obsługują również programowanie i analizę sieci przez IPv4.

Połączenia

4. Konfiguracja oprogramowania

Możesz to zrobić na 2 sposoby. Obie opcje umożliwiają błyskanie oprogramowania układowego wymaganego w tym ćwiczeniu.

  1. Projekty: (zalecane) Utwórz, utwórz i uruchom przykładową aplikację. Ta opcja umożliwia dostosowanie aplikacji w projekcie.LUB
  2. Demonstracje: (opcjonalnie) stwórz gotowe prezentacje bezpośrednio na tablicy radiowej każdej z przykładowych aplikacji. Zachęcamy użytkowników do wypróbowania oprogramowania demonstracyjnego, które jest opcjonalne. Więcej informacji znajdziesz w sekcji „Opcjonalne konfigurowanie oprogramowania – demonstracje” na końcu tego ćwiczenia.

W tym ćwiczeniu z programowania użyjemy metody opartej na projekcie.

Tworzenie projektów na podstawie przykładów

Utworzymy dwa projekty. Projekt ot-rcp BRD4166A i ot-cli-ftd dla dwóch BRD4168A. Wykonaj te czynności i wybierz odpowiednią aplikację do swojego urządzenia.

  1. Otwórz menu Plik w Studio i wybierz Nowy & Silt Labs Project Project. Otworzy się okno wyboru miejsca docelowego, pakietu SDK i łańcucha narzędzi. Nie zmieniaj domyślnego łańcucha narzędzi Sifyy IDE lub GNU obsługiwanego przez OpenThread. Kliknij Dalej.
    • Tablice docelowe: pokazuje wybraną tablicę radiową (BRD4168A) wraz z płytą główną (BRD4001A)
    • Urządzenie docelowe: to pole pokazuje układ mikrokontrolera (MCU). BRD4168A zawiera wbudowane MCU EFR32MG13.
    • SDK: w tym miejscu możesz wybrać wersję pakietu SDK, z którą współpracujesz. Informacje o pakiecie obejmują tag SDK i kompilację Openicon Lab, np. Platform 4.0.1.0 i OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Łatwa narzędzi: łańcuch, który zostanie użyty do kompilacji projektu OT. Używamy GNU ARM.

Kreator nowego projektu

  1. Otworzy się okno Przykład wyboru projektu. Zobaczysz listę przykładowych projektów. Aby znaleźć określony przykład, użyj filtrów Typy i słowa kluczowe. Pamiętaj o zanotowaniu numeru wersji pakietu SDK pakietu Gecko. Ten tag wersji będzie potrzebny podczas konfigurowania routera Raspberry Pi jako routera granicy. Wybierz ot-cli-ftd i kliknij DALEJ.

Krok 2 nowego kreatora projektów

  1. Otworzy się okno konfiguracji projektu. W tym miejscu możesz zmienić nazwę projektu, zmienić domyślną lokalizację pliku projektu oraz określić, czy pliki mają być połączone, czy też skopiowane. Połączone pliki projektów wskazują pakiet SDK i wszelkie modyfikacje, które wprowadzisz w pakiecie SDK, i będą używane w przyszłych projektach. Kopiowanie źródeł projektów umożliwia edytowanie kopii lokalnych projektów, dzięki czemu pliki SDK pozostają niezmienione. Domyślnym i zalecanym rozwiązaniem jest Połącz SDK i skopiuj źródła projektów. Kliknij ZAKOŃCZ.

Krok 3 nowego kreatora projektów

  1. Otworzy się Perspektywa IDE Simply z otwartym konfiguratorem projektu na karcie OMÓWIENIE.

Omówienie projektu

Projekt konfiguruje się na karcie Komponenty oprogramowania przez zainstalowanie i odinstalowanie komponentów oraz skonfigurowanie zainstalowanych komponentów. Zainstalowane komponenty są sprawdzane. Kliknij Zainstalowane komponenty, by zobaczyć przefiltrowaną listę komponentów zainstalowanych przez przykładową aplikację. Wszystkie zmiany są zapisywane automatycznie, a pliki projektów są generowane automatycznie. Postęp widać w prawym dolnym rogu perspektywy Sprostowania.

Komponenty oprogramowania

W tej prezentacji użyjemy domyślnej konfiguracji z przykładowych aplikacji. Powtórz powyższe kroki, by utworzyć projekt ot-rcp dla innej tablicy.

Twórz i Flashuj projekty

Utwórz i uruchom Flash projekty ot-rcp i ot-cli-ftd.

  1. Po skonfigurowaniu projektu kliknij na pasku narzędzi u góry ikonę kompilacji (ikona młotka). Możesz też kliknąć projekt prawym przyciskiem myszy i wybrać kompilację.

Przycisk Utwórz projekt

  1. Postęp jest widoczny w konsoli, a pasek postępu w prawym dolnym rogu. Wszelkie błędy i ostrzeżenia związane z projektem pojawią się też w tym oknie.

Okno wyjściowe kompilacji projektu

  1. Obrazy binarne są generowane po udanym skompilowaniu projektu. Możesz go migać z widoku Eksploratora projektów. Znajdź plik .bin, .hex lub .s37 w podkatalogu kompilatora. Kliknij plik prawym przyciskiem myszy i wybierz Flash na urządzenie. Jeśli masz więcej niż 1 urządzenie połączone, wybierz urządzenie, które chcesz zaprogramować, kliknij OK. Uruchomi się program Flash Player z wypełnioną ścieżką pliku. Kliknij PROGRAM.

Flash

5. Podsumowanie konfiguracji oprogramowania

W tym momencie trzeba utworzyć, skompilować i wdrożyć odpowiednie oprogramowanie układowe na radiu. Gdy ot-rcp zacznie migać do BRD4166A, odłącz go od systemu hosta i podłącz tę tablicę do Raspberry Pi.

Gdy wykonasz czynności z tej sekcji, Twój sprzęt sieciowy Thread będzie wyglądał tak.

Konfigurowanie EFR32MG

6. Skonfiguruj konsolę szeregową dla urządzeń ot-cli-ftt

Aby uruchomić interfejs konsoli, w widoku IDE prostoty kliknij prawym przyciskiem myszy urządzenie J-Link w oknie urządzeń lub adapterach debugowania. Wybierz Launch Console (Konsola uruchamiania). Aby wyświetlić potwierdzenie w konsoli, wybierz kartę Serial 1 i naciśnij Enter. Sprawdź stan węzła FTD.

Konsola FTD Studio

Zauważysz, że nie mamy jeszcze konsoli konsoli ot-rcp. W następnym kroku skonfigurujemy Raspberry Pi jako router graniczny i skonfigurujesz konsolę dla ot-rcp.

7. Skonfiguruj Raspberry Pi jako router granicowy

Firma Silicon Labs zaleca wdrożenie kontenera Dockera firmy za pomocą OTBR. Uruchomienie OTBR w kontenerze pozwala na łatwe do wdrożenia artefakty oraz szybkie tworzenie i testowanie prototypów.

Obrazy OTBR firmy Silicon Labs są przechowywane na serwerze siliconlabsinc DockerHub wraz z tagami. Każdy tag odpowiada wersji GSDK:

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags

Kontenerów Dockera należy używać w połączeniu z aplikacjami RCP utworzonymi w Studio dla Szkół i Uczelni w wersji 5. Pamiętaj, aby dopasować wersję tagu do kontenera do wersji GSDK, którą testujesz. Jeśli na przykład Twoja wersja GDSK miała postać Gecko SDK Suite v4.0.1 (140) po wybraniu ot-rcp w oknie Przykładowy projekt, użyj obrazu siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Wersja GSDK

Konfiguracja Raspberry Pi

  1. Upewnij się, że na karcie SD widzisz obraz Raspbian Stretch Lite w OS lub Raspbian Stretch with Desktop.
  2. Możesz połączyć się przez Raspberry Pi albo połączyć się bezpośrednio z Raspbian Desktop. Otwórz terminal.
  3. Pamiętaj, aby przed zainstalowaniem Dockera zaktualizować lokalne repozytoria i menedżera pakietów (apt-get update i apt-get upgrade).

Zainstaluj obraz Dockera

  1. Zainstaluj Dockera za pomocą tego polecenia na RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Po zakończeniu możesz zmienić ustawienia użytkownika Dockera, aby nie wymagać sudo przed każdym poleceniem. Wymagane ponowne uruchomienie.
    sudo usermod -aG docker $USER
    
  3. Aby zainstalować kontenery, uruchom następujące polecenia. Pamiętaj, że RCP może działać jednocześnie tylko jeden kontener routera brzegowego. Sprawdź też, czy wersja G Suite Studio Studio jest zgodna z obrazem Dockera. Na przykład: gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Skonfiguruj i uruchom Dockera

  1. Musisz skonfigurować port TTY, którego chcesz używać, aby połączenie OTBR było odpowiednie do uruchamiania RCP podczas uruchamiania. Odszukaj port TTY urządzenia RCP. Najprostszym sposobem jest sprawdzenie, czy po połączeniu RCP znaleziono wpis /tty/dev... Musi to być /dev/ttyUSB0 lub /dev/ttyACM0.
  2. Zainstaluj instalację Dockera za pomocą tego polecenia. Zastąp nazwę obrazu Dockera odpowiednią wersją GSDK. Przykład: gsdk-4.0.1:
    docker run -d --name "otbr" \
     --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
     -p 8080:80 --dns=127.0.0.1 -it \
     --volume /dev/ttyACM0:/dev/ttyACM0 \
     --privileged siliconlabsinc/openthread-border-router:gsdk-4.0.1 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -d zapewnia, że kontener działa w trybie odłączonym.
    • Uruchomione logi kontenera możesz w każdej chwili sprawdzić za pomocą polecenia docker logs.
    • Element --name przykleja się do chwili zamknięcia lub usunięcia kontenera Dockera.
    • Port 8080 oznacza port serwera WWW, na którym jest hostowana strona zarządzania routerem Granicę.
    • Protokół ?uart-baudrate=460800 jest wymagany w opcjach adresów URL do obchodzenia problemów z fragmentacją/składaniem przez UART, co jest kosztowne podczas operacji (np. DTLS z długimi pakietami IPv6).

Interakcja z węzłem RCP

Po uruchomieniu Dockera możesz komunikować się z węzłem RCP za pomocą interaktywnej powłoki, używając tego polecenia. Sprawdź stan węzła RCP.

$ docker exec -ti otbr sh -c "sudo ot-ctl"
> state 
disabled
Done

Możesz uzyskać listę aktywnych identyfikatorów kontenerów

$ docker ps -aq

Możesz sprawdzić okno prowadzące do kontenera Dockera OTBR, by uzyskać dane wyjściowe logu routera Granice routera, lub przejść do dziennika kontenera w ten sposób:

$ docker logs [container-id] -f

Opcjonalnie możesz zatrzymać, usunąć lub zamknąć obraz, jeśli kontener Dockera został prawidłowo wczytany.

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

Opcjonalnie: aby zamknąć powłokę, użyj CNTL + C.

W tym momencie masz już 3 konsole.

  1. Dwie konsole ot-cli-ftd w SSimpley Studio, które są skonfigurowane jako urządzenia z pełnym wątkiem.
  2. Jedna interaktywna powłoka ot-ctl na Raspberry Pi skonfigurowana jako router OT.

Teraz możemy utworzyć sieć wątków.

8. Tworzenie sieci wątków

Skonfiguruj RCP

Aby utworzyć sieć, zaczynamy od powłoki ot-ctl w programie OTBR, który służy do komunikacji z węzłem RCP. Wpisz podane niżej polecenia w kolejności:

Indeks

Polecenie

Opis polecenia

Oczekiwana odpowiedź

1

dataset init new

Utwórz nową konfigurację sieci.

Gotowe

2

dataset commit active

Zatwierdź nowy zbiór danych do aktywnego zbioru danych operacyjnych.

Gotowe

3

ifconfig up

Włącz interfejs wątku.

Gotowe

4

thread start

Włącz i dołącz operację protokołu Thread.

Gotowe

Zaczekaj 10 sekund, aż interfejs wątku zacznie działać.

5

state

Sprawdź stan urządzenia. Powinien być liderem.
Inne możliwe stany: offline, wyłączone, odłączone,
dziecko, router lub lider.

Lider
Gotowe

6

dataset

Wyświetl konfigurację sieci.
Twoje wartości będą się różnić od tych ćwiczeń z programowania.
Zanotuj kanał, klucz sieci,
nazwę sieci i identyfikator PAN.

Sygnatura czasowa aktywności: 1
Kanał: 20
Maska kanału: 0x07fff800
Identyfikator zewnętrznego numeru PAN: 39ba71f7fc367160
Lokalny prefiks sieci typu mesh: fd5c:c6b:3a17:40b9::/64
Klucz sieci: 81ae2c2d1010
"
*10*10

Wykorzystamy numer kanału i klucz sieciowy w ot-cli-ftd, aby połączyć 2 FTD z tą siecią wątków.

Skonfiguruj FTD i dodaj ją do naszej sieci Thread (poza metodą pasma)

Dzięki metodzie spoza zakresu znamy wszystkie informacje o zabezpieczeniach i ręcznie dodamy ten węzeł. W konsoli Prostota dodaj obie sieci FTD do naszej sieci, używając poniższych poleceń w poniższej kolejności.

Indeks

Polecenie

Opis polecenia

Oczekiwana odpowiedź

1

dataset channel 20

Ustaw kanał używany przez OTBR.

Gotowe

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Aby urządzenie zostało podłączone do sieci Thread, potrzebny jest tylko klucz sieciowy.

Gotowe

3

dataset commit active

Zatwierdź nowy zbiór danych do aktywnego zbioru danych operacyjnych.

Gotowe

4

ifconfig up

Włącz interfejs wątku.

Gotowe

5

thread start

Włącz i dołącz operację protokołu Thread.

Gotowe

Poczekaj 20 sekund, aż urządzenie dołączy i skonfiguruje się.

6

state

Wyświetl konfigurację sieci.

dziecko
Gotowe

Komunikacja między urządzeniami Thread

Wykorzystamy polecenie ping, aby sprawdzić, czy urządzenia mogą się ze sobą komunikować. Aby użyć polecenia ping, potrzebujemy adresów IPv6 urządzeń. Aby je uzyskać, użyj polecenia ipaddr.

> ipaddr
fd5c:c6b:3a17:40b9:0:ff:fe00:fc00		# Leader Anycast Locator (ALOC)
fd5c:c6b:3a17:40b9:0:ff:fe00:1800		# Routing Locator (RLOC)
fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03		# Mesh-Local EID (ML-EID)
fe80:0:0:0:c449:ca4a:101f:5d16			# Link-Local Address (LLA)

Z obu FTD pinguj OTBR przy użyciu adresu RLOC OTBR&.

> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800
Done
> 
> 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms
16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms

Odpowiedź wskazuje, że ładunek został odebrany i że komunikacja zakończyła się powodzeniem. Powtórz cały proces, aby wysłać ping do FTD z OTBR.

9. Gratulacje

Udało Ci się utworzyć sieć wątku.

Teraz wiesz już:

  • Jak utworzyć projekt OpenThread przy użyciu Silicon Labs Sonoy Studio IDE.
  • Jak tworzyć i błyskać pliki binarne wiersza poleceń OpenThread na tablicach radiowych Silicon Labs.
  • Jak skonfigurować program Raspberry Pi 3B+ lub nowszy jako router OpenThread Border Router (OTBR) przy użyciu Dockera.
  • Jak utworzyć sieć Thread na OTBR.
  • Poza zasięgiem uruchamiania urządzeń na potrzeby sieci Thread.
  • Jak zweryfikować komunikację między wątkami między węzłami przy użyciu polecenia ping.

Więcej informacji

Zapoznaj się z materiałami openthread.io i GitHub. Znajdziesz tam wiele materiałów dotyczących OpenThread, w tym:

10. Konfiguracja opcjonalnego oprogramowania – wersje demonstracyjne

Wersje demo to gotowe obrazy oprogramowania, które są gotowe do pobrania na zgodne urządzenie. Najszybszym sposobem na sprawdzenie, czy Twoja wersja demonstracyjna jest dostępna w Twojej aplikacji w Spromieniu Studio, jest kliknięcie własnej części w widoku Adaptery debugowania i otwarcie karty PRZYKŁADOWE PROJEKTY &WERSJA DEMONSTRACYJNA w oknie Program uruchamiający. Wyłącz filtr Przykładowe projekty i zaznacz pole wyboru Wątek w sekcji Typ technologii.

Przykłady w Studio

Gotowe obrazy aplikacji dostarczone z pakietem SDK OpenThread są zgodne z tymi tablicami:

  1. 4161 BRD
  2. 4166 BRD
  3. 4168 BRD
  4. 4180 BRD
  5. 4304 BRD

Ta lista może zostać w przyszłości zaktualizowana w kolejnych wersjach pakietu SDK. Pełną listę obsługiwanych części znajdziesz w informacjach o wersji SDK Silicon Labs OpenThread w dokumentacji.

Odtwórz poniższe wersje demonstracyjne na odpowiedniej tablicy. Aby wyświetlić Flasha, wybierz płytkę w sekcji Adaptery debugowania po lewej stronie i kliknij URUCHOM odpowiadający jej przykładowe aplikacje. W wyskakującym okienku pojawi się postęp postępu.

  1. BRD4166A: ot-rcp – to urządzenie będzie działać jako procesor radiowy do routera OT Border. Wykorzystamy to urządzenie, aby utworzyć sieć Thread, i zarejestrujemy na niej pozostałe 2 urządzenia. Będąc routerem granicznym, urządzenie pełni też funkcję bramy dla urządzeń w sieci Thread, aby komunikować się przez internet.
  2. Dwa BRD4168A: ot-cli-ftd – te dwa urządzenia będą działać jako pełne wątki. Połączą się z wątkiem utworzonym przez OTBR.