1. Wprowadzenie

Opracowana przez Google implementacja OpenThread (OT) to implementacja Thread typu open source. Udostępniliśmy rozwiązanie OpenThread, aby szerzej udostępnić deweloperom technologię sieciową wykorzystywaną w produktach Google Nest i przyspieszyć opracowywanie produktów do domów inteligentnych oraz budynków komercyjnych. Dzięki wąskiej abstrakcyjnej warstwie abstrakcji platformy i niewielkiej ilości pamięci OpenThread jest wysoce przenośny. Obsługuje zarówno projekty układów SOC, jak i współprocesorów sieciowych (NCP).
Specyfikacja Thread Specification definiuje oparty na protokole IPv6 niezawodny, bezpieczny i oszczędny protokół komunikacyjny między urządzeniami mobilnymi, przeznaczony do zastosowań domowych i komercyjnych.
Usługa Silicon Labs ulepszyła środowisko OpenThread, aby obsługiwało je na sprzęcie Silicon Labs. Ten kod źródłowy jest dostępny na GitHubie oraz jako pakiet SDK zainstalowany z użyciem Simplicity Studio 5 (SSv5). Pakiet SDK zawiera w pełni przetestowany zrzut kodu źródłowego GitHub. Obsługuje ona szerszą gamę sprzętu niż wersja GitHub. Zawiera też dokumentację i przykładowe aplikacje niedostępne na GitHubie.
Z tego przewodnika dowiesz się, jak zacząć tworzyć aplikacje OpenThread przy użyciu pakietu SDK Silicon Labs OpenThread SDK i Simplicity Studio 5. Na ilustracji poniżej widać płytki i sprzęt skonfigurowany do pracy z routerem OTBR (OTB) oraz 2 urządzenia Thread, które zostały użyte w ćwiczeniach z programowania.

Czego się nauczysz
- Jak utworzyć projekt OpenThread przy użyciu środowiska IDE Silicon Labs Simplicity Studio.
- Dowiedz się, jak tworzyć i flashować pliki binarne interfejsu wiersza poleceń OpenThread w przypadku tablic radiowych Silicon Labs.
- Jak skonfigurować Raspberry Pi 3B lub nowszy jako router granic OpenThread (OTBR) przy użyciu Dockera.
- Jak utworzyć sieć Thread w OTBR.
- Poza zakresem uruchomienia urządzeń w sieci Thread.
- Jak sprawdzić komunikację Thread między węzłami przy użyciu polecenia ping.
2. Wymagania wstępne
Sprzęt:
- 3 tablice radiowe EFR32MGxx – można używać dowolnej kombinacji tych urządzeń. W tym ćwiczeniu w Codelabs używane jest BRD4166A jako RCP, a 2 BRD4168A jako urządzenia pełnowątkowe.
- EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
- EFR32MG13 (BRD4168A)
- EFR32MG21 (BRD4180A, BRD4180B)
- BRD4001A: bezprzewodowe płyty inicjujące startowe (WSTK) do hostowania tablic radiowych. Z wyjątkiem BRD4166A, wszystkie stacje radiowe muszą mieć płytę główną początkową. Kabel mini USB do podłączenia i zasilania płyt głównych lub kabla micro USB do urządzenia BRD4166A.

- Komputer Raspberry Pi 3B lub nowszy z obrazem systemu operacyjnego Raspbian Stretch Lite lub Raspbian Stretch z komputerem podłączony do internetu przez Ethernet. Skonfigurowaliśmy go jako OTBorder Router.
- System hosta Windows/Linux/Mac z co najmniej 2 portami USB i połączeniem internetowym. Sprawdź wymagania dotyczące sprzętu i systemu operacyjnego w SSv5.
- Co najmniej jeden kabel Ethernet do podłączenia Raspberry Pi do internetu. Platformy WSTK obsługują również debugowanie i flashowanie przez IP, więc opcjonalnie możesz użyć dodatkowych kabli Ethernet do połączenia WSTK z systemem hosta za pomocą przełącznika Ethernet.
Oprogramowanie:
- Aplikacja Simplicity Studio v5 została zainstalowana i zaktualizowana w systemie Windows/Linux/macOS za pomocą programu
- Łańcuch narzędzi GNU ARM
- Gecko SDK Suite w wersji 3.2.0 lub nowszej i pakiet SDK OpenThread Silicon Labs.
3. Konfiguracja sprzętu
Te ćwiczenia z programowania zostały utworzone przy użyciu
- EFR32MG12 BRD4166A Thunderboard Sense 2, jak pokazano po lewej stronie.
- Dwa telefony EFR32MG13 BRD4168A, jak pokazano z prawej strony.
- Aplikacja Simplicity Studio w wersji 5 została zainstalowana na urządzeniu z systemem macOS Catalina 10.15.7 z zainstalowanym oprogramowaniem
- Gecko SDK 3.2.0
- GNU ARM 7.2.1


Podłącz każdą płytkę główną pakietu startowego bezprzewodowego do komputera przez USB, jak pokazano na ilustracji poniżej. Te połączenia pozwolą na zaprogramowanie i analizę sieci RCP i urządzeń końcowych. Najpierw użyjemy komputera hosta, aby zaprogramować urządzenie BRD4166A w oprogramowaniu układowym ot-rcp, a następnie połączyć je z Raspberry Pi. Opcjonalnie urządzenia końcowe można podłączyć do komputera hosta za pomocą wspólnego przełącznika Ethernet. Zestawy startowe obsługują też programowanie i analizę sieci przy użyciu protokołu IPv4.

4. Konfiguracja oprogramowania układowego
Możesz to zrobić na 2 sposoby. Obie opcje umożliwiają flashowanie oprogramowania układowego wymaganego w tym ćwiczeniu z programowania.
- Projekty: (zalecane) tworzenie, kompilowanie i flashowanie przykładowej aplikacji. Ta opcja umożliwia dostosowanie aplikacji w projekcie.OR
- Wersje demonstracyjne: (opcjonalnie) prześlij gotowe wersje demonstracyjne dowolnej z przykładowych aplikacji bezpośrednio na tablicy. Użytkownicy są zachęcani do wypróbowania oprogramowania w wersji demonstracyjnej jako opcjonalne ćwiczenie. Zapoznaj się z sekcją „Opcjonalna konfiguracja oprogramowania układowego – wersje demonstracyjne”. na końcu tego ćwiczenia z programowania.
W tym ćwiczeniach z programowania 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 typów BRD4168A. Wykonaj poniższe czynności i wybierz odpowiednią aplikację próbną dla swojej tablicy.
- Otwórz menu Plik w Studio i wybierz Nowy > Kreator projektu Silicon Labs. Otworzy się okno elementu docelowego, pakietu SDK i pęku 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) wraz z płytką główną (BRD4001A).
- Urządzenie docelowe: to pole pokazuje wbudowany mikrokontroler (MCU). BRD4168A ma wbudowany MCU EFR32MG13.
- SDK: tutaj możesz wybrać wersję OT, której używasz. Informacje z pakietu obejmują tag SDK i kompilację z OpenThread z Silicon Labs, np.
Platform 4.0.1.0iOpenThread 2.0.1.0 (GitHub-55af6ce2c). - IDE/ łańcuch narzędzi: łańcuch narzędzi, który zostanie użyty do kompilacji projektu OT. Używamy GNU ARM.

- Otworzy się okno wyboru przykładowego projektu. Zobaczysz listę przykładowych projektów. Użyj opcji Typ technologii Wątek i filtrów słów kluczowych, aby wyszukać konkretny przykład. Pamiętaj, by zapisać numer wersji Gecko SDK Suite. Ten tag wersji będzie potrzebny podczas konfigurowania Raspberry Pi jako routera Border Router. Wybierz ot-cli-ftd i kliknij DALEJ.

- Otworzy się okno Konfiguracja projektu. Możesz tu zmienić nazwę projektu, domyślną lokalizację pliku projektu i określić, czy chcesz utworzyć połączenie z plikami projektu czy je skopiować. Połączone pliki projektu wskazują pakiet SDK, a wszelkie wprowadzane przez Ciebie modyfikacje są wprowadzane w pakiecie SDK i wykorzystywane w przyszłych projektach. Kopiowanie źródeł projektu pozwala edytować kopię lokalną projektu, dzięki czemu pliki SDK pozostają niezmienione. „Połącz pakiet SDK i skopiuj źródła projektu” to domyślna i zalecana opcja. Kliknij ZAKOŃCZ.

- Otworzy się Perspective IDE Perspective z otwartym konfiguratorem projektów na karcie PRZEGLĄD.

Aby skonfigurować projekt, otwórz kartę Komponenty oprogramowania. W tym celu musisz zainstalować i odinstalować komponenty oraz skonfigurować zainstalowane komponenty. Zainstalowane komponenty są sprawdzane. Kliknij Zainstalowane komponenty, aby zobaczyć przefiltrowaną listę komponentów zainstalowanych przez przykładową aplikację. Wszystkie wprowadzone zmiany są zapisywane automatycznie, a pliki projektu są generowane automatycznie. Postęp jest widoczny w prawym dolnym rogu perspektywy Simplicity IDE.

W tej wersji demonstracyjnej użyjemy domyślnej konfiguracji przykładowych aplikacji. Powtórz powyższe kroki, aby utworzyć projekt ot-rcp na drugiej tablicy.
Tworzenie i flashowanie projektów
Twórz i flashuj zarówno projekty ot-rcp, jak i ot-cli-ftd.
- Po skonfigurowaniu projektu kliknij Kontroler kompilacji (ikona młotka) na górnym pasku narzędzi. Możesz też kliknąć projekt prawym przyciskiem myszy i wybrać Utwórz projekt.

- Postęp jest widoczny w konsoli, a w prawym dolnym rogu widać pasek postępu. W tym oknie wyjściowym pojawią się również wszystkie błędy i ostrzeżenia związane z projektem.

- Obrazy binarne są generowane po pomyślnej kompilacji projektu. Obraz binarny możesz zainstalować w widoku Eksploratora projektów. W podkatalogu kompilatora znajdź plik .bin, .hex lub .s37. Kliknij plik prawym przyciskiem myszy i wybierz Flash do urządzenia. Jeśli masz podłączonych więcej niż jedno urządzenie, wybierz to, które chcesz zaprogramować, a potem kliknij OK. Otworzy się program Flash Programmer z wpisaną ścieżką pliku. Kliknij PROGRAM.

5. Podsumowanie konfiguracji oprogramowania
Na tym etapie należało utworzyć, skompilować i zainstalować odpowiednie oprogramowanie układowe na płytce radiowej. Po zaktualizowaniu urządzenia ot-rcp do BRD4166A odłącz go od systemu hosta i podłącz tę płytkę do Raspberry Pi.
Po ukończeniu tej sekcji konfiguracja sprzętu sieciowego Thread będzie wyglądać tak.

6. Skonfiguruj konsolę szeregową dla urządzenia OT-Cli-ftd
Aby uruchomić interfejs konsoli, w perspektywie Simplicity IDE kliknij prawym przyciskiem myszy swoje urządzenie J-Link w oknie Device View / Debug Adapters (Wyświetlanie urządzeń/adaptery debugowania). Wybierz Uruchom konsolę. Aby wyświetlić monit w konsoli, wybierz kartę Serial 1 i naciśnij Enter. Sprawdź stan węzła FTD.

Zauważysz, że nie mamy jeszcze konsoli dla usługi ot-rcp. W następnym kroku skonfigurujemy Raspberry Pi jako router graniczny OT oraz skonfigurujemy konsolę dla ot-rcp.
7. Konfigurowanie Raspberry Pi jako routera granicznego
Silicon Labs zaleca wdrożenie kontenera Dockera dla firmy przy użyciu OTBR. Uruchamianie OTBR w kontenerze umożliwia tworzenie łatwych do wdrożenia artefaktów oraz szybkie prototypowanie i testowanie.
Obrazy OTBR Silicon Labs są hostowane w siliconlabsinc DockerHub z tagami. Każdy tag odpowiada wersji pakietu GSDK:
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
Kontenerów Dockera należy używać z RCP utworzonymi za pomocą Simplicity Studio 5 w przypadku danej wersji. Pamiętaj, aby dopasować wersję tagu kontenera do wersji GSDK, której używasz do testowania. Jeśli na przykład wersja GDSK to Gecko SDK Suite v4.0.1 (140) w momencie wyboru ot-rcp w oknie Przykładowego wyboru projektu, użyj obrazu siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Konfiguracja Raspberry Pi
- Na karcie SD prześlij obraz systemu operacyjnego Raspbian Stretch Lite lub Raspbian Stretch with Desktop.
- Możesz połączyć się przez SSH z Raspberry Pi lub wybrać pracę bezpośrednio z Raspbian Desktop. Otwórz terminal.
- Pamiętaj, aby przed zainstalowaniem Dockera zaktualizować repozytoria lokalne i menedżer pakietów (apt-get update i apt-getupgrade).
Zainstaluj obraz Dockera
- Zainstaluj Dockera za pomocą następującego polecenia w RPi.
curl -sSL https://get.docker.com | sh
- Po zakończeniu możesz zmienić ustawienia użytkownika Dockera tak, aby nie wymagało sudo przed każdym poleceniem. Wymagany restart.
sudo usermod -aG docker $USER
- Aby zainstalować kontenery, uruchom następujące polecenia. Pamiętaj, że z RCP może być uruchomiony tylko jeden kontener routera granicznego jednocześnie. Pamiętaj też, aby dopasować wersję pakietu GSDK Simplicity Studio do właściwego obrazu Dockera. Przykład:
gsdk-4.0.1:docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Skonfiguruj i uruchom Dockera
- Musisz skonfigurować port TTY, którego chcesz używać na potrzeby OTBR do łączenia RCP podczas uruchamiania. Poszukaj portu TTY urządzenia RCP. Najłatwiej to zrobić, szukając wpisu
/tty/dev... po połączeniu RCP. Powinna to zwykle być wartość/dev/ttyUSB0lub/dev/ttyACM0. - Uruchom instalację Dockera za pomocą tego polecenia. Pamiętaj, aby zastąpić nazwę obrazu Dockera odpowiednią wersją pakietu 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
-ddba o to, aby kontener działał w trybie odłączonym.- Uruchomione logi kontenera możesz wyświetlić w każdej chwili za pomocą polecenia
docker logs. - Element
--namepozostanie przyklejony, dopóki kontener Dockera nie zostanie prawidłowo zamknięty (lub usunięty). - Port 8080 wskazuje port serwera WWW hostującego stronę internetową zarządzania routerem Border Router.
- Parametr
?uart-baudrate=460800jest wymagany w opcjach adresów URL, aby ominąć problemy z fragmentacją / ponownym montażem w usłudze UART w przypadku kosztownych operacji, takich 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 przy użyciu tego polecenia. Sprawdź stan węzła RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
Możesz wyświetlić listę uruchomionych identyfikatorów kontenerów
$ docker ps -aq
Możesz sprawdzić okno z kontenerem Dockera OTBR, w którym są uruchamiane dane wyjściowe logów routera Border Router, lub wykonać te czynności:
$ docker logs [container-id] -f
Opcjonalnie możesz zatrzymać, usunąć lub zamknąć obraz, jeśli kontener Dockera został wczytany prawidłowo.
$ docker stop otbr
$ docker rm otbr
$ docker kill otbr
Opcjonalnie: aby zamknąć powłokę, naciśnij CNTL + C.
W tym momencie powinny być już 3 konsole.
- Dwie konsole
ot-cli-ftdw Simplicity Studio skonfigurowane jako urządzenia Full Thread. - Jedna interaktywna powłoka
ot-ctlna Raspberry Pi skonfigurowana jako router graniczny OT.
Teraz możemy utworzyć sieć Thread.
8. Tworzenie sieci Thread
Skonfiguruj RCP
Aby utworzyć sieć, zaczynamy od powłoki ot-ctl w OTBR, która służy do komunikacji z węzłem RCP. Wpisz te polecenia w poniższej kolejności:
Indeks | Polecenie | Opis polecenia | Oczekiwana odpowiedź | ||
1 |
| Utwórz nową konfigurację sieci. | Gotowe | ||
2 |
| Zatwierdź nowy zbiór danych w aktywnym zbiorze danych operacyjnych. | Gotowe | ||
3 |
| Włącz interfejs Thread. | Gotowe | ||
4 |
| Włącz i podłącz operację protokołu Thread. | Gotowe | ||
Odczekaj 10 sekund, aż interfejs wątku się uruchomi. | |||||
5 |
| Sprawdź stan urządzenia. Powinien to być lider. | Leader | ||
6 |
| Wyświetl konfigurację sieci. | . 1 | ||
Użyjemy numeru kanału i klucza sieci w ot-cli-ftd, aby złączyć 2 punkty końcowe z tą siecią wątków.
Konfiguracja i dodawanie FTD do naszej sieci Thread (metoda poza zakresem)
Jeśli chodzi o metodę poza zakresem, znamy wszystkie informacje dotyczące zabezpieczeń i ręcznie dodajemy węzeł. W konsolach Simplicity dodaj do naszej sieci oba adresy FTD, używając następujących poleceń w podanej niżej kolejności.
Indeks | Polecenie | Opis polecenia | Oczekiwana odpowiedź | ||
1 |
| Ustaw kanał używany przez OTBR. | Gotowe | ||
2 |
| Aby urządzenie mogło podłączyć się do sieci Thread, wymagany jest tylko klucz sieciowy. | Gotowe | ||
3 |
| Zatwierdź nowy zbiór danych w aktywnym zbiorze danych operacyjnych. | Gotowe | ||
4 |
| Włącz interfejs Thread. | Gotowe | ||
5 |
| Włącz i podłącz operację protokołu Thread. | Gotowe | ||
Odczekaj 20 sekund, aż urządzenie dołączy do sieci i skonfiguruje się samoczynnie. | |||||
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 można było użyć polecenia ping, potrzebne są adresy IPv6 urządzeń. Możesz 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 FTD pinguje 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 się udała. Powtórz ten proces, aby wysłać pingi do FTD z OTBR.
9. Gratulacje
Udało Ci się utworzyć sieć Thread.
Wiesz już:
- Jak utworzyć projekt OpenThread przy użyciu środowiska IDE Silicon Labs Simplicity Studio.
- Dowiedz się, jak tworzyć i flashować pliki binarne interfejsu wiersza poleceń OpenThread w przypadku tablic radiowych Silicon Labs.
- Jak skonfigurować Raspberry Pi 3B lub nowszy jako router granic OpenThread (OTBR) przy użyciu Dockera.
- Jak utworzyć sieć Thread w OTBR.
- Poza zakresem uruchomienia urządzeń w sieci Thread.
- Jak sprawdzić komunikację Thread między węzłami przy użyciu polecenia ping.
Więcej informacji
Na stronach openthread.io i GitHub znajdziesz różne zasoby OpenThread, w tym:
- Obsługiwane platformy – poznaj wszystkie platformy obsługujące OpenThread.
- Utwórz OpenThread – więcej informacji o tworzeniu i konfigurowaniu OpenThread.
- Thread Primer – obejmuje wszystkie pojęcia związane z Thread ćwiczenia z programowania;
- Silicon Labs OpenThread Training – wprowadzenie do rozwiązania OpenThread, w którym omówione są uruchamianie i routery graniczne oraz praktyczne ćwiczenie dotyczące tworzenia sieci OpenThread.
- QSG170: Silicon Labs Thread – krótki przewodnik – zawiera szczegółowe informacje na temat rozpoczynania pracy nad Silicon Labs Thread.
- AN1256: używanie RCP Silicon Labs z routerem Border Router OpenThread – instrukcje kompilacji i instalacji dla hosta routera granicznego 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 na sprawdzenie, czy wersja demonstracyjna jest dostępna dla Ciebie w Simplicity Studio, to kliknięcie swojej części w widoku Adaptery debugowania i przejście do PRZYKŁADOWYCH PROJEKTU Karta Wersje demonstracyjne w Menu z aplikacjami. Wyłącz filtr Przykładowe projekty i zaznacz pole wyboru Wątek w sekcji Typ technologii.

Wstępnie skompilowane obrazy aplikacji demonstracyjnej z pakietu OpenThread SDK są zgodne z tymi płytami:
- BRD 4161A
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
Ta lista może zostać zaktualizowana w kolejnych wersjach pakietu SDK, aby uwzględnić więcej tablic radiowych. Pełną listę obsługiwanych części znajdziesz w informacjach o wersji pakietu OpenThread SDK Silicon Labs w dokumentacji.
Zaprezentuj poniższe wersje demonstracyjne na odpowiednich tablicach. Aby zamigać, wybierz swoją płytkę w sekcji Adaptery debugowania po lewej stronie i kliknij URUCHOM obok odpowiednich przykładowych aplikacji. Pojawi się wyskakujące okienko z postępem lampy błyskowej.
- 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 dodamy 2 pozostałe urządzenia do tej sieci. W roli routera granicznego to urządzenie działa też jako brama, przez którą urządzenia w sieci Thread komunikują się przez internet.
- Dwa BRD4168A: ot-cli-ftd – te 2 urządzenia będą działać jako urządzenia pełnowątkowe. Dołączą do sieci Thread utworzonej przez OTBR.