1. Wprowadzenie

OpenThread (OT) od Google to implementacja protokołu Thread typu open source. Google udostępniło OpenThread, aby technologia sieciowa używana w produktach Google Nest była szerzej dostępna dla deweloperów. Ma to przyspieszyć rozwój produktów do domów inteligentnych i budynków komercyjnych. Dzięki wąskiej warstwie abstrakcji platformy i niewielkiemu wykorzystaniu pamięci OpenThread jest bardzo przenośny. Obsługuje zarówno układy SoC, jak i układy NCP.
Specyfikacja Thread definiuje niezawodny, bezpieczny i energooszczędny protokół komunikacji bezprzewodowej między urządzeniami oparty na IPv6, który jest przeznaczony do zastosowań domowych i komercyjnych.
Firma Silicon Labs ulepszyła OpenThread, aby działał ze sprzętem Silicon Labs. Ten kod źródłowy jest dostępny na GitHubie, a także jako pakiet SDK instalowany z Simplicity Studio 5 (SSv5). Pakiet SDK zawiera w pełni przetestowany zrzut kodu źródłowego GitHub. Obsługuje szerszy zakres sprzętu niż wersja GitHub i zawiera dokumentację oraz przykładowe aplikacje niedostępne w GitHub.
Z tego przewodnika dowiesz się, jak rozpocząć tworzenie aplikacji OpenThread za pomocą pakietu Silicon Labs OpenThread SDK i Simplicity Studio 5. Ilustracja poniżej przedstawia płytki (BRD) i konfigurację sprzętu z routerem brzegowym OT (OTBR) oraz 2 urządzeniami Thread używanymi w tym laboratorium.

Czego się nauczysz
- Jak utworzyć projekt OpenThread za pomocą środowiska IDE Silicon Labs Simplicity Studio.
- Jak tworzyć i wgrywać pliki binarne OpenThread CLI na płytki radiowe Silicon Labs.
- Jak skonfigurować Raspberry Pi 3B+ lub nowszy jako router graniczny OpenThread (OTBR) za pomocą Dockera.
- Jak utworzyć sieć Thread na OTBR.
- Konfigurowanie urządzeń w sieci Thread poza pasmem.
- Jak sprawdzić komunikację Thread między węzłami za pomocą polecenia ping.
2. Wymagania wstępne
Sprzęt:
- 3 płytki radiowe EFR32MGxx – można użyć dowolnej kombinacji tych urządzeń. W tym ćwiczeniu używamy BRD4166A jako RCP i dwóch BRD4168A jako urządzeń Full Thread.
- EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
- EFR32MG13 (BRD4168A)
- EFR32MG21 (BRD4180A, BRD4180B)
- BRD4001A: bezprzewodowe zestawy startowe (WSTK) do obsługi modułów radiowych. Z wyjątkiem BRD4166A wszystkie płytki radiowe wymagają głównej płytki startowej. Kable mini USB do podłączania i zasilania głównych płytek lub kabel micro USB do BRD4166A.

- Raspberry Pi 3B+ lub nowszy z obrazem systemu Raspbian Stretch Lite lub Raspbian Stretch z Desktopem, który jest połączony z internetem przez Ethernet. Konfigurujemy go jako router graniczny OT.
- System hosta Windows/Linux/Mac z co najmniej 2 portami USB i połączeniem z internetem. Wymagania sprzętowe i systemowe znajdziesz na stronie SSv5.
- Co najmniej 1 kabel Ethernet do podłączenia Raspberry Pi do internetu. Zestawy WSTK obsługują też debugowanie i flashowanie przez IP, więc opcjonalnie można użyć dodatkowych kabli Ethernet do podłączenia zestawu WSTK do systemu hosta za pomocą przełącznika Ethernet.
Oprogramowanie:
- Simplicity Studio 5 zainstalowane i zaktualizowane w systemie hosta Windows/Linux/Mac z
- Łańcuch narzędzi GNU ARM
- Pakiet Gecko SDK w wersji 3.2.0 lub nowszej oraz pakiet Silicon Labs OpenThread SDK.
3. Konfiguracja sprzętu
To ćwiczenie zostało utworzone przy użyciu
- EFR32MG12 BRD4166A Thunderboard Sense 2 jak pokazano po lewej stronie.
- Dwa moduły EFR32MG13 BRD4168A, jak pokazano po prawej stronie.
- Simplicity Studio w wersji 5 zainstalowane w systemie macOS Catalina 10.15.7 z
- Gecko SDK 3.2.0
- GNU ARM w wersji 7.2.1


Podłącz każdą płytę główną zestawu startowego do hosta za pomocą kabla USB, jak pokazano na ilustracji poniżej. Połączenia te umożliwią programowanie i analizę sieci RCP oraz urządzeń końcowych. Najpierw użyjemy komputera hosta, aby zaprogramować BRD4166A za pomocą oprogramowania ot-rcp, a następnie połączymy go z Raspberry Pi. Opcjonalnie urządzenia końcowe można podłączyć do komputera hosta za pomocą zwykłego przełącznika Ethernet. Zestawy startowe obsługują też programowanie i analizę sieci w protokole IPv4.

4. Konfiguracja oprogramowania
Możesz to zrobić na 2 sposoby. Obie opcje umożliwiają flashowanie oprogramowania, które jest wymagane w tym Codelabs.
- Projekty: (zalecane) utwórz, skompiluj i wgraj przykładową aplikację. Ta opcja umożliwia dostosowanie aplikacji w projekcie.
- Wersje demonstracyjne: (opcjonalnie) flashuj gotowe wersje demonstracyjne bezpośrednio na płycie radiowej dla dowolnej z przykładowych aplikacji. Zachęcamy użytkowników do wypróbowania konfiguracji oprogramowania demonstracyjnego jako ćwiczenia opcjonalnego. Szczegółowe informacje znajdziesz w sekcji „Opcjonalna konfiguracja oprogramowania sprzętowego – wersje demonstracyjne” na końcu tego ćwiczenia.
W tym samouczku 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ą aplikację przykładową dla swojej płytki.
- Otwórz menu Plik w Studio i wybierz Nowy > Kreator projektu Silicon Labs. Otworzy się okno wyboru platformy docelowej, pakietu SDK i zestawu narzędzi. Nie zmieniaj domyślnego środowiska IDE Simplicity ani łańcucha narzędzi GNU obsługiwanego przez OpenThread. Kliknij Dalej.
- Płytki docelowe: wyświetla wybraną płytkę radiową (BRD4168A) wraz z płytką główną (BRD4001A).
- Urządzenie docelowe: to pole zawiera informacje o mikrokontrolerze (MCU) na płycie. Płytka BRD4168A ma wbudowany mikrokontroler EFR32MG13.
- Pakiet SDK: tutaj możesz wybrać wersję pakietu SDK OT, z której korzystasz. Informacje o pakiecie obejmują np. tag pakietu SDK i wersję OpenThread od Silicon Labs
Platform 4.0.1.0iOpenThread 2.0.1.0 (GitHub-55af6ce2c). - IDE/ Toolchain: łańcuch narzędzi, który będzie używany do kompilowania projektu OT. Używamy GNU ARM.

- Otworzy się okno wyboru projektu przykładowego. Zobaczysz listę projektów przykładowych. Aby wyszukać konkretny przykład, użyj filtrów Thread (Typ technologii) i słów kluczowych. Zanotuj numer wersji pakietu SDK Gecko. Ten tag wersji będzie potrzebny podczas konfigurowania Raspberry Pi jako routera granicznego. Wybierz ot-cli-ftd, a następnie kliknij DALEJ.

- Otworzy się okno konfiguracji projektu. Możesz tu zmienić nazwę projektu, domyślną lokalizację pliku projektu oraz określić, czy chcesz połączyć pliki projektu, czy je skopiować. Połączone pliki projektu wskazują pakiet SDK, a wszystkie wprowadzone zmiany są dokonywane w pakiecie SDK i wykorzystywane w przyszłych projektach. Kopiowanie źródeł projektu umożliwia edytowanie lokalnej kopii projektu, dzięki czemu pliki pakietu SDK pozostają nienaruszone. Opcja „Połącz pakiet SDK i skopiuj źródła projektu” jest domyślnie zalecana. Kliknij ZAKOŃCZ.

- Otworzy się widok Simplicity IDE Perspective z otwartym narzędziem Project Configurator na karcie OVERVIEW (PRZEGLĄD).

Projekt jest konfigurowany na karcie Komponenty oprogramowania przez instalowanie i odinstalowywanie komponentów oraz konfigurowanie zainstalowanych komponentów. Sprawdzane są zainstalowane komponenty. Kliknij Installed Components (Zainstalowane komponenty), aby wyświetlić przefiltrowaną listę komponentów zainstalowanych przez przykładową aplikację. Wszystkie zmiany są zapisywane automatycznie, a pliki projektu są generowane automatycznie. Postęp jest widoczny w prawym dolnym rogu widoku Simplicity IDE.

W tej wersji demonstracyjnej użyjemy domyślnej konfiguracji aplikacji przykładowych. Powtórz powyższe kroki, aby utworzyć projekt ot-rcp dla innej tablicy.
Kompilowanie i flashowanie projektów
Twórz i flashuj projekty ot-rcp i ot-cli-ftd.
- Po skonfigurowaniu projektu kliknij Element sterujący kompilacją (ikona młotka) na górnym pasku narzędzi. Możesz też kliknąć projekt prawym przyciskiem myszy i wybrać opcję „Build project” (Skompiluj projekt).

- Postęp jest wyświetlany w konsoli i na pasku postępu w prawym dolnym rogu. W tym oknie wyjściowym pojawią się też wszelkie błędy lub ostrzeżenia związane z projektem.

- Obrazy binarne są generowane po pomyślnej kompilacji projektu. Obraz binarny możesz wgrać z widoku Eksploratora projektu. Znajdź plik .bin, .hex lub .s37 w podkatalogu kompilatora. Kliknij plik prawym przyciskiem myszy i wybierz Flash to Device (Wgraj na urządzenie). Jeśli masz więcej niż 1 urządzenie, wybierz urządzenie, które chcesz zaprogramować, i kliknij OK. Otworzy się program Flash Programmer z wypełnioną ścieżką pliku. Kliknij PROGRAM.

5. Podsumowanie konfiguracji oprogramowania
Na tym etapie powinny być już utworzone, skompilowane i wgrane odpowiednie wersje oprogramowania na płytki radiowe. Po wgraniu oprogramowania ot-rcp na BRD4166A odłącz go od systemu hosta i połącz z Raspberry Pi.
Po ukończeniu tej sekcji konfiguracja sprzętu sieci Thread będzie wyglądać tak.

6. Konfigurowanie konsoli szeregowej na urządzeniach ot-cli-ftd
Aby uruchomić interfejs konsoli, w widoku Simplicity IDE kliknij prawym przyciskiem myszy urządzenie J-Link w oknie Devices View / Debug Adapters (Widok urządzeń / Adaptery debugowania). Kliknij Uruchom konsolę. Aby wyświetlić prompt w Konsoli, wybierz kartę Serial 1 i naciśnij Enter. Sprawdź stan węzła FTD.

Zauważysz, że nie mamy jeszcze konsoli dla ot-rcp. W następnym kroku skonfigurujemy Raspberry Pi jako router graniczny OT i skonfigurujemy konsolę dla ot-rcp.
7. Konfigurowanie Raspberry Pi jako routera brzegowego
Firma Silicon Labs zaleca wdrażanie kontenera Dockera firmy z OTBR. Uruchomienie OTBR w kontenerze umożliwia tworzenie łatwych do wdrożenia artefaktów oraz szybkie prototypowanie i testowanie.
Obrazy Silicon Labs OTBR są hostowane na siliconlabsinc DockerHub i mają tagi. Każdy tag odpowiada wersji GSDK:
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
Kontenery Dockera muszą być używane z RCP utworzonymi za pomocą Simplicity Studio 5 w przypadku danej wersji. Upewnij się, że wersja tagu w kontenerze jest zgodna z wersją GSDK, której używasz do testowania. Jeśli na przykład w momencie, gdy w oknie Wybór projektu przykładowego wybrano opcję ot-rcp, wersja GDSK to Gecko SDK Suite v4.0.1 (140), użyj obrazu siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Konfiguracja Raspberry Pi
- Na karcie SD zainstaluj obraz systemu Raspbian Stretch Lite lub Raspbian Stretch z interfejsem graficznym.
- Możesz połączyć się z Raspberry Pi za pomocą SSH lub pracować bezpośrednio na Raspbian Desktop. Otwórz terminal.
- Przed zainstalowaniem Dockera zaktualizuj lokalne repozytoria i system zarządzania pakietami (użyj poleceń apt-get update i apt-get upgrade).
Instalowanie obrazu Dockera
- Zainstaluj Dockera na RPi za pomocą tego polecenia.
curl -sSL https://get.docker.com | sh
- Po zakończeniu możesz zmodyfikować ustawienia użytkownika Dockera, aby nie wymagać sudo przed każdym poleceniem. Wymagane ponowne uruchomienie.
sudo usermod -aG docker $USER
- Aby zainstalować kontenery, wydaj te polecenia. Pamiętaj, że w danym momencie możesz mieć uruchomiony tylko 1 kontener routera brzegowego z RCP. Sprawdź też, czy wersja GSDK w Simplicity Studio jest zgodna z odpowiednim obrazem Dockera. Na przykład:
gsdk-4.0.1.docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Konfigurowanie i uruchamianie Dockera
- Musisz skonfigurować port TTY, którego chcesz używać w OTBR, aby połączyć RCP podczas uruchamiania. Znajdź port TTY na urządzeniu RCP. Najłatwiej to zrobić, szukając wpisu
/tty/dev... po podłączeniu RCP. Zazwyczaj powinna to być wartość/dev/ttyUSB0lub/dev/ttyACM0. - Uruchom instalację Dockera za pomocą tego polecenia. Pamiętaj, aby zastąpić nazwę obrazu Dockera odpowiednią wersją GSDK. Na 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
-dzapewnia, że kontener działa w trybie odłączonym.- W każdej chwili możesz wyświetlić dzienniki działania kontenera za pomocą polecenia
docker logs. --namejest aktywny, dopóki kontener Dockera nie zostanie prawidłowo zamknięty (lub usunięty).- Port 8080 wskazuje port serwera WWW hostującego stronę zarządzania routerem brzegowym.
?uart-baudrate=460800jest wymagane w opcjach adresu URL radia, aby uniknąć problemów z fragmentacją i ponownym składaniem w przypadku UART, z kosztownymi operacjami, takimi 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, 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 pobrać listę identyfikatorów uruchomionych kontenerów.
$ docker ps -aq
Możesz sprawdzić okno, w którym działa kontener Dockera OTBR, aby wyświetlić dane wyjściowe logu routera granicznego, lub śledzić log 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 załadowany.
$ docker stop otbr
$ docker rm otbr
$ docker kill otbr
Opcjonalnie: aby zamknąć powłokę, naciśnij CNTL + C.
Powinny być teraz widoczne 3 konsole.
- 2 konsole
ot-cli-ftdw Simplicity Studio skonfigurowane jako urządzenia Full Thread. - Jedna
ot-ctlinteraktywna powłoka na Raspberry Pi, która jest skonfigurowana jako router graniczny OT.
Teraz możemy utworzyć sieć Thread.
8. Tworzenie sieci Thread
Konfigurowanie RCP
Aby utworzyć sieć, zaczynamy od ot-ctl powłoki na OTBR, która służy do komunikacji z węzłem RCP. Wpisz te polecenia w podanej poniżej kolejności:
Indeks | Polecenie | Opis polecenia | Oczekiwana odpowiedź | ||
1 |
| Utwórz nową konfigurację sieci. | Gotowe | ||
2 |
| Zatwierdź nowy zbiór danych w aktywnym operacyjnym zbiorze danych. | Gotowe | ||
3 |
| Włącz interfejs Thread. | Gotowe | ||
4 |
| Włącz i dołącz operację protokołu Thread. | Gotowe | ||
Poczekaj 10 sekund, aż interfejs Thread będzie gotowy. | |||||
5 |
| Sprawdź stan urządzenia. Powinien być liderem. | Lider | ||
6 |
| Wyświetl konfigurację sieci. | Active Timestamp: 1 | ||
Aby połączyć 2 urządzenia FTD z tą siecią wątkową, użyjemy numeru kanału i klucza sieci na urządzeniu ot-cli-ftd.
Konfigurowanie i dodawanie urządzenia FTD do sieci Thread (metoda poza pasmem)
W przypadku metody poza pasmem znamy wszystkie informacje o bezpieczeństwie i dodajemy węzeł ręcznie. W konsolach Simplicity dodaj oba urządzenia FTD do naszej sieci, używając tych poleceń w podanej poniżej kolejności.
Indeks | Polecenie | Opis polecenia | Oczekiwana odpowiedź | ||
1 |
| Ustaw kanał używany przez OTBR. | Gotowe | ||
2 |
| Aby urządzenie mogło połączyć się z siecią Thread, wymagany jest tylko klucz sieciowy. | Gotowe | ||
3 |
| Zatwierdź nowy zbiór danych w aktywnym operacyjnym zbiorze danych. | Gotowe | ||
4 |
| Włącz interfejs Thread. | Gotowe | ||
5 |
| Włącz i dołącz operację protokołu Thread. | Gotowe | ||
Poczekaj 20 sekund, aż urządzenie dołączy do sieci i się skonfiguruje. | |||||
6 |
| Wyświetl konfigurację sieci. | dziecko | ||
Komunikacja między urządzeniami Thread
Użyjemy polecenia ping, aby sprawdzić, czy urządzenia mogą się ze sobą komunikować. Aby użyć polecenia ping, potrzebujemy adresów IPv6 urządzeń. Można je uzyskać za pomocą 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 urządzeń FTD pinguj OTBR, używając 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, a komunikacja przebiegła pomyślnie. Powtórz ten proces, aby wysłać pingi do urządzeń FTD z OTBR.
9. Gratulacje
Sieć Thread została utworzona.
Wiesz już:
- Jak utworzyć projekt OpenThread za pomocą środowiska IDE Silicon Labs Simplicity Studio.
- Jak tworzyć i wgrywać pliki binarne OpenThread CLI na płytki radiowe Silicon Labs.
- Jak skonfigurować Raspberry Pi 3B+ lub nowszy jako router graniczny OpenThread (OTBR) za pomocą Dockera.
- Jak utworzyć sieć Thread na OTBR.
- Konfigurowanie urządzeń w sieci Thread poza pasmem.
- Jak sprawdzić komunikację Thread między węzłami za pomocą polecenia ping.
Więcej informacji
Na stronach openthread.io i GitHub znajdziesz różne materiały dotyczące OpenThread, w tym:
- Obsługiwane platformy – poznaj wszystkie platformy, które obsługują OpenThread.
- Kompilowanie OpenThread – więcej informacji o kompilowaniu i konfigurowaniu OpenThread.
- Podstawy protokołu Thread – omówienie wszystkich koncepcji protokołu Thread, które pojawiają się w tym ćwiczeniu z programowania.
- Szkolenie Silicon Labs OpenThread – wprowadzenie do OpenThread, omówienie uruchamiania i routerów brzegowych oraz praktyczne ćwiczenie polegające na utworzeniu sieci OpenThread.
- QSG170: Krótki przewodnik po OpenThread od Silicon Labs – szczegółowe informacje o rozpoczynaniu pracy nad rozwojem technologii Thread od Silicon Labs.
- AN1256: Using the Silicon Labs RCP with the OpenThread Border Router (tylko w języku angielskim) – instrukcje kompilacji i instalacji hosta routera brzegowego Raspberry Pi
10. Opcjonalna konfiguracja oprogramowania układowego – wersje demonstracyjne
Wersje demonstracyjne to gotowe obrazy oprogramowania układowego, które można pobrać na zgodne urządzenie. Najszybszym sposobem sprawdzenia, czy dla Twojego komponentu w Simplicity Studio dostępna jest wersja demonstracyjna, jest kliknięcie komponentu w widoku Debug Adapters (Adaptery debugowania), a następnie przejście do karty EXAMPLE PROJECTS & DEMOS (PRZYKŁADOWE PROJEKTY I WERSJE DEMONSTRACYJNE) w perspektywie Launcher (Uruchamianie). Wyłącz filtr przykładowych projektów i zaznacz pole wyboru Thread w sekcji Typ technologii.

Wstępnie skompilowane obrazy aplikacji demonstracyjnych dostarczane z pakietem OpenThread SDK są zgodne z tymi płytkami:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
W przyszłych wersjach pakietu SDK możemy zaktualizować tę listę, aby uwzględnić więcej płyt radiowych. Pełną listę obsługiwanych komponentów znajdziesz w informacjach o wersji pakietu Silicon Labs OpenThread SDK w sekcji Documentation (Dokumentacja).
Wgraj na odpowiednie płytki te wersje demonstracyjne. Aby flashować, wybierz płytkę w sekcji Debug Adapters (Debugery) po lewej stronie i kliknij RUN (URUCHOM) w przypadku odpowiednich przykładowych aplikacji. Wyskakujące okienko będzie pokazywać postęp flashowania.
- BRD4166A: ot-rcp – to urządzenie będzie działać jako procesor radiowy routera granicznego OT. Użyjemy tego urządzenia do utworzenia sieci Thread i dołączenia do niej pozostałych 2 urządzeń. Jako router graniczny urządzenie to pełni też funkcję bramy, która umożliwia urządzeniom w sieci Thread komunikację przez internet.
- 2 płytki BRD4168A: ot-cli-ftd – te 2 urządzenia będą pełnić funkcję urządzeń Full Thread Device. Dołączą one do sieci Thread utworzonej przez OTBR.