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.0
iOpenThread 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/ttyUSB0
lub/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
-d
dba 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
--name
pozostanie 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=460800
jest 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-ftd
w Simplicity Studio skonfigurowane jako urządzenia Full Thread. - Jedna interaktywna powłoka
ot-ctl
na 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.