1. Wprowadzenie
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.
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:
- 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)
- 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.
- 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.
- System hosta Windows/Linux/Mac z co najmniej 2 portami USB i połączeniem z internetem. Sprawdź wymagania sprzętowe i systemowe w SSv5.
- 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ą
- EFR32MG12 BRD4166A Thunderboard Sense 2, jak pokazano po lewej.
- 2 EFR32MG13 BRD4168A, jak pokazano po prawej.
- Proste oprogramowanie Studio v5 zainstalowane w systemie macOS Catalina 10.15.7 z systemem
- Pakiet SDK Gecko 3.2.0
- GNU ARM, wersja 7.2.1
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.
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.
- Projekty: (zalecane) tworzenie, kompilowanie i uruchamianie aplikacji próbnej. Ta opcja umożliwia dostosowanie aplikacji w projekcie.LUB
- 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.
- 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
iOpenThread 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.
- 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.
- 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.
- Otworzy się interfejs Perspective API o prostym wystroju z otwartą kartą Konfiguratora projektu na karcie PRZEGLĄD.
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.
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
.
- 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.
- 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.
- 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.
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.
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.
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
.
Konfiguracja Raspberry Pi
- Upewnij się, że na karcie SD pojawił się obraz Raspbian Stretch Lite lub Raspbian Stretch z komputerem.
- Możesz połączyć się przez Raspberry Pi albo wybrać bezpośrednią współpracę z Raspbian Desktop. Otwórz terminal.
- Pamiętaj, aby przed zaktualizowaniem Dockera zaktualizować repozytoria lokalne i menedżera pakietów (apt-get update i apt-getupgrade).
Zainstaluj obraz Dockera
- Zainstaluj Dockera za pomocą tego polecenia na RPi.
curl -sSL https://get.docker.com | sh
- 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
- 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
- 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
. - 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.
- Dwie konsole
ot-cli-ftd
w Simplicity Studio, które są skonfigurowane jako urządzenia z pełnym wątkiem. - 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 |
| Utwórz nową konfigurację sieci. | OK | ||
2 |
| Zatwierdzenie nowego zbioru danych dla aktywnego zbioru danych operacyjnych | OK | ||
3 |
| Włącz interfejs wątku. | OK | ||
4 |
| Włącz i dołącz operację protokołu Thread. | OK | ||
Poczekaj 10 sekund, aż interfejs wątku zacznie działać. | |||||
5 |
| Sprawdź stan urządzenia. Powinien to być lider. | Lider | ||
6 |
| Wyświetl konfigurację sieci. | Aktywna sygnatura czasowa: 1 |
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 |
| Ustaw kanał używany przez OTBR. | OK | ||
2 |
| Aby urządzenie mogło podłączyć się do sieci typu Thread, potrzebny jest tylko klucz sieciowy. | OK | ||
3 |
| Zatwierdzenie nowego zbioru danych dla aktywnego zbioru danych operacyjnych | OK | ||
4 |
| Włącz interfejs wątku. | OK | ||
5 |
| Włącz i dołącz operację protokołu Thread. | OK | ||
Poczekaj 20 sekund, aż urządzenie dołączy do konfiguracji i się skonfiguruje. | |||||
6 |
| Wyświetl konfigurację sieci. | dziecko |
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:
- Obsługiwane platformy – poznaj wszystkie platformy obsługujące OpenThread
- Build OpenThread – więcej informacji o tworzeniu i konfigurowaniu OpenThread
- Thread Primer – obejmuje wszystkie pojęcia związane z wątkami przedstawione w tym ćwiczeniu z programowania.
- Silicon Labs OpenThread – wprowadzenie do OpenThread, omawiające wdrażanie prowizji i routerów granicznych oraz ćwiczenie praktyczne dotyczące tworzenia sieci OpenThread.
- QSG170: Silicon Labs OpenThread – krótki przewodnik – zawiera szczegółowe informacje o procesie wdrażania Silicon Labs Thread.
- AN1256: korzystanie z narzędzia RCP Silicon Labs z routerem granicznym OpenThread – instrukcje tworzenia i instalacji hosta routera granicznego Raspberry Pi
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.
Wstępnie skompilowane obrazy aplikacji demonstracyjnych dołączone do pakietu OpenThread SDK są zgodne z tymi tablicami:
- 4161a BRD
- 4166a BRD
- 4168a BRD
- 4180 BRD
- 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.
- 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.
- 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.