Zbuduj sieć z wątkami za pomocą tablic Silicon Labs EFR32 i OpenThread za pomocą Simplicity Studio w wersji 5

1. Wprowadzenie

26b7f4f6b3ea0700.png

Otwarta przez Google platforma OpenThread (OT) to oprogramowanie typu open source. Opublikowaliśmy OpenThread, aby umożliwić deweloperom dostęp do technologii sieciowych używanych w usługach Google Nest. Ma to na celu przyspieszenie rozwoju produktów dla domów inteligentnych i komercyjnych. OpenThread ma bardzo wąską warstwę abstrakcji i niewielki rozmiar pamięci. Obsługuje on zarówno układy SOC, jak i procesory współprocesorowe sieci.

Specyfikacja wątku definiuje protokół sprzętowy do komunikacji między urządzeniami domowymi i komercyjnymi korzystający z protokołu IPv6 opartego na standardzie IPv6, bezpieczny i bezpośredni.

Firma Silicon Labs ulepszyła OpenThread do pracy ze sprzętem firmy Silicon Labs. Ten kod źródłowy jest dostępny w usłudze GitHub oraz w pakiecie SDK. Jest on zainstalowany z prostotą 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 i zawiera dokumentację oraz przykładowe aplikacje niedostępne na GitHubie.

Ten przewodnik wyjaśnia, jak zacząć tworzyć aplikacje OpenThread za pomocą pakietu SDK Silicon Labs OpenThread i platformy Simplicity Studio 5. Poniższa ilustracja przedstawia tablice (BRD) i sprzęt skonfigurowany za pomocą routera OTBR (Granic) oraz 2 urządzenia z wątkami używane w ćwiczeniach z programowania.

Konfiguracja sprzętu EFR32MG

Czego się nauczysz

  • Jak utworzyć projekt OpenThread za pomocą Silicon Labs Simplicity Studio IDE.
  • Jak tworzyć pliki binarne wiersza poleceń OpenThread i dodawać je do tablic radiowych Silicon Labs.
  • Jak skonfigurować Raspberry Pi 3B lub nowsze jako OpenThread Border Router (OTBR) za pomocą Dockera.
  • Jak utworzyć sieć Thread na OTBR.
  • Poza zakresem pobierania urządzeń w sieci typu Thread.
  • Jak zweryfikować komunikację w wątkach między węzłami za pomocą polecenia ping.

2. Wymagania wstępne

Sprzęt:

  1. 3 radia EFR32MGxx – można używać dowolnej kombinacji tych urządzeń. To ćwiczenie ćwiczeń korzysta z BRD4166A jako RCP i dwóch BRD4168 jako urządzeń z pełnym wątkiem.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Jeśli zaczynasz od zera, możesz skorzystać z zestawu startowego EFR32 Threader, który zawiera powyższe listy.
  2. BRD4001A: płyty główne bezprzewodowe (WSTK), w których znajdują się tablice radiowe. Wszystkie tablice radiowe z wyłączeniem BRD4166A wymagają tablicy startowej. Minima kable USB do podłączenia i zasilania zasilania płyt głównych lub kabla micro USB do BRD4166A.

Przygotowanie do egzaminów ASTK

  1. Raspberry Pi 3B+ lub nowsza z Raspbian Stretch Lite OS lub Raspbian Stretch with Desktop, która jest połączona z internetem przez Ethernet. Skonfigurujemy go jako router graniczny OT.
  2. System hosta Windows/Linux/Mac z co najmniej 2 portami USB i połączeniem z internetem. Sprawdź wymagania sprzętowe i systemowe w SSv5.
  3. Co najmniej 1 kabel Ethernet do połączenia Raspberry Pi z internetem. WSTK obsługuje też debugowanie i błyskanie przez IP, dlatego można użyć dodatkowych kabli Ethernet, aby połączyć WSTK z systemem hosta przez przełącznik Ethernet.

Oprogramowanie:

  • Narzędzie Simplicity Studio v5 zostało zainstalowane i zaktualizowane w systemie hosta systemu Windows/Linux/Mac za pomocą pliku
    • Łańcuch narzędzi GNU ARM
    • Pakiet Gecko SDK Suite w wersji 3.2.0 lub nowszej oraz pakiet Silicon Labs OpenThread.

3. Konfiguracja sprzętu

To ćwiczenie ćwiczeń zostało utworzone za pomocą

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, jak pokazano po lewej.
  2. 2 EFR32MG13 BRD4168A, jak pokazano po prawej.
  3. Proste oprogramowanie Studio v5 zainstalowane w systemie macOS Catalina 10.15.7 z systemem
    1. Pakiet SDK Gecko 3.2.0
    2. GNU ARM, wersja 7.2.1

4168A BRD

Połącz każdą płytę główną pakietu Wireless Starter Kit z komputerem hosta przez USB, tak jak na obrazie poniżej. Te połączenia umożliwiają programowanie i analizę sieci RCP i urządzeń końcowych. Najpierw wykorzystamy komputer hosta do zaprogramowania BRD4166A z oprogramowaniem OTP, a na koniec połączysz go z Raspberry Pi. Opcjonalnie urządzenia końcowe można podłączyć do komputera hosta przez wspólny przełącznik 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. W obu przypadkach możesz zainstalować oprogramowanie, które jest wymagane w przypadku tego ćwiczenia z programowania.

  1. Projekty: (zalecane) tworzenie, kompilowanie i uruchamianie aplikacji próbnej. Ta opcja umożliwia dostosowanie aplikacji w projekcie.LUB
  2. Wersje demo: (opcjonalnie) demonstruj gotowe wersje demonstracyjne bezpośrednio na tablicy radiowej każdej z przykładowych aplikacji. Zachęcamy użytkowników do wypróbowania oprogramowania demonstracyjnego, które zostało skonfigurowane jako opcjonalne. Aby dowiedzieć się więcej, zapoznaj się z sekcją „Konfigurowanie opcjonalnego oprogramowania układowego – wersje demonstracyjne” na końcu tego ćwiczenia.

Na potrzeby tego ćwiczenia użyjemy metody opartej na projekcie.

Tworzenie projektów na podstawie przykładów

Utworzymy 2 projekty. Projekt ot-rcp dla BRD4166A i projekt ot-cli-ftd dla dwóch BRD4168A. Wykonaj te czynności i wybierz odpowiednią próbkę dla swojej tablicy.

  1. Otwórz menu Plik w Studio i wybierz Nowy > Kreator projektu z Silicon Labs. Otworzy się okno wyboru miejsca docelowego, pakietu SDK i łańcucha narzędzi. Nie zmieniaj domyślnego łańcucha narzędzi Simplicity IDE / GNU obsługiwanego przez OpenThread. Kliknij Dalej.
    • Tablice docelowe: pokazuje wybraną tablicę radiową (BRD4168A) i tablicę główną (BRD4001A)
    • Urządzenie docelowe: to pole pokazuje zamontowany mikrokontroler (MCU). Urządzenie BRD4168A ma wbudowany moduł MFR EFR32MG13.
    • SDK: tutaj możesz wybrać wersję OT, z której korzystasz. Informacje o pakiecie obejmują tag SDK i kompilację Silicon Labs OpenThread, np. Platform 4.0.1.0 i OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ łańcuch narzędzi: łańcuch narzędzi, który będzie używany do kompilowania projektu OT. Używamy narzędzi GNU ARM.

Kreator nowego projektu

  1. Otworzy się okno „Przykładowy projekt”. Zobaczysz listę przykładowych projektów. Aby wyszukać konkretny przykład, użyj filtra technologii Wątek i filtrów słów kluczowych. Pamiętaj, aby zapisać numer wersji Gecko SDK Suite. Ten tag wersji będzie potrzebny podczas konfigurowania Raspberry Pi jako routera granicznego. Wybierz ot-cli-ftd, a następnie kliknij DALEJ.

Krok 2 nowego kreatora projektów

  1. Otworzy się okno „Project Project” (Konfiguracja projektu). W tym miejscu możesz zmienić nazwę projektu, zmienić domyślną lokalizację pliku projektu oraz określić, czy chcesz połączyć pliki, czy je skopiować. Połączone pliki projektów wskazują na pakiet SDK i wszelkie wprowadzane przez Ciebie zmiany w pakiecie SDK i używanie ich w przyszłych projektach. Kopiowanie źródeł projektu umożliwia edytowanie kopii projektu lokalnego, dzięki czemu pliki SDK pozostają niezmienione. Domyślnym i zalecanym wyborem jest „Połącz pakiet SDK i skopiuj źródła projektu”. Kliknij ZAKOŃCZ.

Krok 3 nowego kreatora projektów

  1. Otworzy się interfejs Perspective API o prostym wystroju z otwartą kartą Konfiguratora projektu na karcie PRZEGLĄD.

Opis projektu

Projekt można skonfigurować na karcie Komponenty oprogramowania przez zainstalowanie i odinstalowanie komponentów oraz skonfigurowanie zainstalowanych komponentów. Zainstalowane komponenty są zaznaczone. Kliknij Zainstalowane komponenty, aby zobaczyć przefiltrowaną listę komponentów zainstalowanych przez przykładową aplikację. Wszystkie zmiany są zapisywane automatycznie, a pliki projektu są generowane automatycznie. Postęp jest wyświetlany w prawym dolnym rogu perspektywy SIDE.

Komponenty oprogramowania

Na potrzeby tej demonstracji użyjemy domyślnej konfiguracji przykładowych aplikacji. Powtórz powyższe kroki, aby utworzyć projekt ot-rcp dla drugiej tablicy.

Tworzenie i tworzenie projektów

Utwórz i błyskaj projekty ot-rcp oraz ot-cli-ftd.

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

Przycisk tworzenia projektu

  1. Postępy są wyświetlane w konsoli, a w prawym dolnym rogu – jako pasek postępu. W tym oknie wyjściowym pojawią się również wszelkie błędy i ostrzeżenia związane z projektem.

Okno wyjściowe kompilacji projektu

  1. Obrazy binarne są generowane po pomyślnym utworzeniu projektu. Obraz binarny możesz migać z poziomu 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 połączone urządzenie, wybierz urządzenie do zaprogramowania, klikając OK. Uruchomi się program Flash z wypełnioną ścieżką pliku. Kliknij PROGRAMUJ.

Flash

5. Podsumowanie konfiguracji oprogramowania

Na tym etapie należy utworzyć, skompilować i wgrać odpowiednie oprogramowanie układowe. Po załadowaniu ot-rcp do BRD4166A odłącz go od systemu hosta i podłącz tę tablicę do Raspberry Pi.

Gdy ukończysz tę sekcję, konfiguracja sieci typu Thread będzie wyglądać tak.

Konfiguracja EFR32MG

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

Aby uruchomić interfejs konsoli, w widoku Simplicity IDE kliknij prawym przyciskiem myszy urządzenie J-Link w oknie urządzeń lub widoku debugowania. Kliknij Uruchom konsolę. Aby to zrobić, wybierz kartę Serial 1 i naciśnij Enter. Sprawdź stan węzła FTD.

Widok konsoli FTD Studio

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

7. Skonfiguruj Raspberry Pi jako router graniczny

Firma Silicon Labs zaleca wdrożenie firmowego kontenera Dockera, który jest połączony z kanałem OTBR. Uruchomienie OTBR w kontenerze pozwala na łatwe tworzenie artefaktów do szybkiego wdrożenia oraz szybkie prototypowanie i testowanie.

Obrazy Silicon Labs OTBR są hostowane w siliconlabsinc DockerHub przy użyciu tagów. Każdy tag odpowiada wersji GSDK:

https://hub.docker.com/r/siliconlabsinc/openthread-granic-router/tags (w języku angielskim)

Kontenerów Dockera należy używać z protokołami RCP utworzonymi w Simplicity Studio 5 w przypadku danej wersji. Sprawdź, czy wersja tagu kontenera jest zgodna z wersją pakietu SDK G Suite, którą testujesz. Jeśli na przykład wersja GDSK była Gecko SDK Suite v4.0.1 (140) w przypadku wybrania ot-rcp w oknie Przykładowy wybór projektu, użyj obrazu siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Wersja GSDK

Konfiguracja Raspberry Pi

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

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, tak aby nie wymagał sudo przed każdym poleceniem. Wymagany restart.
    sudo usermod -aG docker $USER
    
  3. Aby zainstalować kontenery, uruchom następujące polecenia. Pamiętaj, że z RCP może być uruchomiony tylko jeden kontener routera granicznego naraz. Sprawdź też, czy wersja G Suite Simplicity Studio jest prawidłowa i czy odpowiada jej obraz 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ć do połączenia OTBR z systemem RCP podczas uruchamiania. Znajdź port TTY urządzenia RCP. Najprostszym sposobem, aby to zrobić, jest znalezienie wpisu /tty/dev... po podłączeniu RCP. Zasadniczo powinna to być /dev/ttyUSB0 lub /dev/ttyACM0.
  2. Uruchom instalację Dockera za pomocą tego polecenia. Pamiętaj, aby zastąpić 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 będzie działać w trybie odłączonym.
    • Bieżące logi kontenera możesz w każdej chwili sprawdzić za pomocą polecenia docker logs.
    • Pole --name jest przyklejone do czasu zamknięcia lub usunięcia kontenera Dockera.
    • Port 8080 wskazuje port serwera WWW, na którym jest hostowana strona internetowa zarządzania routerem granicznym.
    • Protokół ?uart-baudrate=460800 jest wymagany w opcjach adresów URL do obchodzenia problemów z fragmentacją lub ponownym łączeniem przez UART. Jest to kosztowne działanie, takie jak 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, korzystając z tego polecenia. Sprawdź stan węzła RCP.

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

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

$ docker ps -aq

Możesz sprawdzić okno uruchamiania kontenera Dockera OTBR, by uruchomić dane wyjściowe logów routera granicznego, lub wykonać te czynności w logu kontenera:

$ 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 klawiszy CNTL + C.

Na tym etapie powinny być dostępne 3 konsole.

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

Teraz możemy już tworzyć sieć Thread.

8. Tworzenie sieci typu Thread

Skonfiguruj RCP

Aby utworzyć sieć, zaczynamy od powłoki ot-ctl z kluczem OTBR, który jest używany do komunikacji z węzłem RCP. Wpisz następujące polecenia w tej kolejności:

Indeks

Polecenie

Opis polecenia

Oczekiwana odpowiedź

1

dataset init new

Utwórz nową konfigurację sieci.

OK

2

dataset commit active

Zatwierdzenie nowego zbioru danych dla aktywnego zbioru danych operacyjnych

OK

3

ifconfig up

Włącz interfejs wątku.

OK

4

thread start

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

OK

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

5

state

Sprawdź stan urządzenia. Powinien to być lider.
Inne możliwe stany: offline, wyłączone, odłączone,
element podrzędny, 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 sieciowy,
nazwę sieci i identyfikator PAN.

Aktywna sygnatura czasowa: 1
Kanał: 20
Maska kanału: 0x07fff800
Identyfikator zewnętrznego numeru PAN: 39ba71f7fc367160
Lokalny prefiks sieci mesh: fd5c:c6b:3a17:40b9::/64
Klucz sieci: 81ae2c218




Użyjemy numeru kanału i klucza sieciowego ot-cli-ftd, aby połączyć FTD z tą siecią wątków.

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

Dzięki metodzie spoza zakresu wiemy wszystkie informacje o zabezpieczeniach i ręcznie dodamy węzeł. W konsoli prostoty dodaj obie sieci do naszej sieci za pomocą poleceń wymienionych poniżej.

Indeks

Polecenie

Opis polecenia

Oczekiwana odpowiedź

1

dataset channel 20

Ustaw kanał używany przez OTBR.

OK

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Aby urządzenie mogło podłączyć się do sieci typu Thread, potrzebny jest tylko klucz sieciowy.

OK

3

dataset commit active

Zatwierdzenie nowego zbioru danych dla aktywnego zbioru danych operacyjnych

OK

4

ifconfig up

Włącz interfejs wątku.

OK

5

thread start

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

OK

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

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, potrzebujesz adresów IPv6 tych 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)

Obie FTD pingują OTBR przy użyciu adresu RLBR 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 otrzymany ładunek i informację o udanej komunikacji. Powtórz ten proces, aby wysłać sygnały FTD z terminala OTBR.

9. Gratulacje

Udało Ci się utworzyć sieć wątków

Teraz wiesz już:

  • Jak utworzyć projekt OpenThread za pomocą Silicon Labs Simplicity Studio IDE.
  • Jak tworzyć pliki binarne wiersza poleceń OpenThread i dodawać je do tablic radiowych Silicon Labs.
  • Jak skonfigurować Raspberry Pi 3B lub nowsze jako OpenThread Border Router (OTBR) za pomocą Dockera.
  • Jak utworzyć sieć Thread na OTBR.
  • Poza zakresem pobierania urządzeń w sieci typu Thread.
  • Jak zweryfikować komunikację w wątkach między węzłami za pomocą polecenia ping.

Więcej informacji

Odwiedź strony openthread.io i GitHub, aby sprawdzić różne zasoby OpenThread, w tym:

10. Konfigurowanie opcjonalnego oprogramowania układowego – wersje demonstracyjne

Wersje demonstracyjne to gotowe obrazy oprogramowania układowego gotowe do pobrania na zgodne urządzenie. Najszybszym sposobem na sprawdzenie, czy dana wersja jest dostępna w przypadku tej części, jest kliknięcie jej w widoku Adaptery debugowania i otwarcie karty PRZYKŁADOWE PROJEKTY I DEMONSTYKI w Menu z aplikacjami. Wyłącz filtr Przykładowe projekty i zaznacz pole wyboru Wątek w sekcji Typ technologii.

Wersje demo Studio

Wstępnie skompilowane obrazy aplikacji demonstracyjnych dołączone do pakietu OpenThread SDK są zgodne z tymi tablicami:

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

W przyszłych wersjach pakietu SDK możemy aktualizować tę listę, aby uwzględnić więcej plansz. Pełną listę obsługiwanych części znajdziesz w informacjach o wersji pakietu SDK Silicon Labs OpenThread w dokumentacji.

Odtwórz poniższe wersje demonstracyjne na odpowiednich tablicach. Aby przeprowadzić Flash, wybierz tablicę w sekcji Adaptery debugowania po lewej i kliknij URUCHOM obok odpowiednich aplikacji. W wyskakującym okienku wyświetli się postęp lampy błyskowej.

  1. BRD4166A: ot-rcp – to urządzenie będzie działać jako procesor Radio Co. Wykorzystamy je do utworzenia sieci typu Thread i zarejestrowania na pozostałych 2 urządzeniach w sieci. Jako urządzenie graniczne z tym urządzeniem działa też jako brama, dzięki której urządzenia w sieci Thread mogą komunikować się przez internet.
  2. Dwa BRD4168A: ot-cli-ftd – te 2 urządzenia będą działać jako urządzenia z pełnymi wątkami. Dołączą do sieci Thread, utworzonej przez OTBR.