nRF52840 kartları ve OpenThread ile bir Thread ağı oluşturun

1. Giriş

26b7f4f6b3ea0700.png

OpenThread Google tarafından yayımlanan bir açık kaynak uygulamasıdır Thread® ağ protokolü. Google Nest, bağlantılı ev için ürünlerin geliştirilmesini hızlandırmak amacıyla Nest ürünlerinde kullanılan teknolojiyi geliştiricilerin geniş çapta kullanımına sunmak için OpenThread'i piyasaya sürdü.

Konu şartname ev uygulamaları için bir güvenilir, güvenli IPv6 tabanlı ve düşük güç kablosuz cihazdan cihaza iletişim protokolünü tanımlar. OpenThread, IPv6, 6LoWPAN, IEEE 802.15.4, MAC güvenliği, Mesh Bağlantısı Kurulumu ve Mesh Yönlendirme dahil olmak üzere tüm Thread ağ katmanlarını uygular.

Bu Codelab'de OpenThread'i gerçek donanım üzerinde programlayacak, bir Thread ağı oluşturacak ve yönetecek ve düğümler arasında mesajlar ileteceksiniz.

4806d16a8c137c6d.jpeg

ne öğreneceksin

  • OpenThread CLI ikili dosyalarını geliştirme panolarına oluşturma ve yanıp sönme
  • Bir Linux makinesi ve bir geliştirme panosundan oluşan bir RCP oluşturma
  • OpenThread Daemon ve kullanan bir RCP ile iletişim ot-ctl
  • Thread düğümlerini Screen ve OpenThread CLI ile manuel olarak yönetme
  • Cihazların bir Thread ağına güvenli bir şekilde devreye alınması
  • IPv6 çok noktaya yayın nasıl çalışır?
  • UDP ile iş parçacığı düğümleri arasında ileti geçirme

Neye ihtiyacın olacak

Donanım:

  • 3 Nordic Semiconductor nRF52840 geliştirme kartı
  • Kartları bağlamak için 3 USB - Micro-USB kablosu
  • En az 3 USB bağlantı noktasına sahip bir Linux makinesi

Yazılım:

  • GNU Araç Zinciri
  • Nordic nRF5x komut satırı araçları
  • Segger J-Link yazılımı
  • Açık Konu
  • Git

2. Başlarken

OpenThread Simülasyonu

Başlamadan önce bilgisayarınızda üzerinden çalışmasını isteyebilirsiniz OpenThread Simülasyon Codelab temel Konu kavramları ve OpenThread CLI tanımak için.

Seri port terminalleri

Bir terminal aracılığıyla bir seri bağlantı noktasına nasıl bağlanacağınızı bilmelisiniz. Bu Codelab, Screen'i kullanır ve kullanıma genel bir bakış sağlar, ancak başka herhangi bir terminal yazılımı kullanılabilir.

Linux makinesi

Bu Codelab, bir Radyo Ortak İşlemci (RCP) İş parçacığı aygıtına ana bilgisayar olarak hizmet etmek ve tüm İplik geliştirme kartlarını flaş etmek için i386 veya x86 tabanlı bir Linux makinesi kullanmak üzere tasarlanmıştır. Tüm adımlar Ubuntu 14.04.5 LTS (Trusty Tahr) üzerinde test edildi.

Nordic Semiconductor nRF52840 panoları

Bu Codelab üç kullanan nRF52840 PDK panoları .

a6693da3ce213856.png

Yerleşik JTAG modüllerine sahip nRF52840 kartlarını programlamak için SEGGER J-Link kullanıyoruz. Bunu Linux makinenize yükleyin.

J-Link Yazılım ve Dokümantasyon Paketini İndirin

Makineniz için uygun paketi indirin ve uygun yere kurun. Linux'ta bu /opt/SEGGER/JLink .

nRF5x Komut Satırı Araçlarını Kurun

nRF5x Komut Satırı Araçları, OpenThread ikili dosyalarını nRF52840 kartlarına flash etmenize olanak tanır. Linux makinenize uygun nRF5x-Command-Line-Tools-<OS> yapısını kurun.

nRF5x Komut Satırı Araçlarını İndirin

Kök klasörde çıkarılan paketi yerleştirin ~/

ARM GNU Toolchain'i kurun

ARM GNU Toolchain, inşa etmek için kullanılır.

ARM GNU Toolchain taşınabilir arşivini indirin

Biz çıkartılan arşiv içinde yerleştirilmesini önerir /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/ Linux makinede. Arşiv talimatları izleyin readme.txt yükleme yönergeleri için dosyanın.

Kurulum Ekranı (isteğe bağlı)

Screen, bir seri port ile bağlanan cihazlara erişmek için basit bir araçtır. Bu Codelab, Ekran kullanır, ancak istediğiniz herhangi bir seri bağlantı noktası terminal uygulamasını kullanabilirsiniz.

$ sudo apt-get install screen

3. Klon depoları

Açık Konu

OpenThread'i klonlayın ve yükleyin. script/bootstrap komutları emin araç zinciri yüklü yapıp ortamı düzgün yapılandırıldığını:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

OpenThread Daemon'u oluşturun:

$ script/cmake-build posix -DOT_DAEMON=ON

Artık OpenThread'i oluşturmaya ve nRF52840 kartlarına flash'lamaya hazırsınız.

4. RCP Joiner'ı kurun

Oluştur ve flaş

OpenThread nRF52840 örneğini Joiner ve yerel USB işleviyle oluşturun. Bir cihaz, güvenli bir şekilde kimlik doğrulaması yapmak ve bir Thread ağında görevlendirilmek için Joiner rolünü kullanır. Yerel USB, USB CDC ACM'nin nRF52840 ile ana bilgisayar arasında seri aktarım olarak kullanılmasını sağlar.

Önceki çalıştırarak ilk inşa Her zaman repo temizlemek rm -rf build .

$ cd ~/src
$ git clone --recursive https://github.com/openthread/ot-nrf528xx.git
$ cd ot-nrf528xx
$ script/build nrf52840 USB_trans

OpenThread RCP ikili dosyasının bulunduğu dizine gidin ve onu hex biçimine dönüştürün:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex

USB kablosunu nRF52840 kartındaki harici güç piminin yanındaki Mikro USB hata ayıklama bağlantı noktasına takın ve ardından Linux makinesine takın. VDD için nRF52840 gemide NRF güç kaynağı getirin. Doğru şekilde bağlandığında, LED5 üzerindedir.

20a3b4b480356447.png

Bu Linux makineye bağlı ilk tahta ise seri port gibi görünür /dev/ttyACM0 (bütün nRF52840 panoları kullanmak ttyACM seri port tanımlayıcı için).

$ ls /dev/ttyACM*
/dev/ttyACM0

RCP için kullanılan nRF52840 kartının seri numarasını not edin:

c00d519ebec7e5f0.jpeg

nRFx Komut Satırı Araçları konumuna gidin ve kartın seri numarasını kullanarak OpenThread RCP hex dosyasını nRF52840 kartına flashlayın:

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset

Başarı üzerine aşağıdaki çıktı oluşturulur:

Parsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programing device.
Applying system reset.
Run.

Daha sonra pano rollerini karıştırmamak için panoya "RCP" etiketleyin.

Yerel USB'ye bağlanın

OpenThread BİP inşa seri ulaşım gibi yerli USB CDC ACM kullanımını sağlar olduğundan, BİP konak (Linux makinesi) ile iletişim kurmak için nRF52840 gemide NRF USB bağlantı noktasını kullanması gerekir.

Debug limanından USB kablosunun mikro USB ucunu ayırın sonra RESET düğmesinin yanında Mikro USB NRF USB portuna takın, nRF52840 kurulu parladı. USB NRF güç kaynağı getirin.

46e7b670d2464842.png

OpenThread Daemon'u başlatın

RCP tasarımında, Thread cihazıyla iletişim kurmak ve yönetmek için OpenThread Daemon'u kullanın. Başlangıç ot-daemon ile -v Eğer günlük çıkışını ve çalışmakta olduğunu onaylamak görebilmek için bayrak ayrıntılı:

$ cd ~/src/openthread
$ ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'

Ne zaman başarılı, ot-daemon modu Aşağıda çıkış benzer üretir ayrıntılı içinde:

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun  7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun  7 2020 18:06:08

Dan günlükleri bu terminal penceresi açık bırakmak çok ot-daemon görülebilir.

Kullanım ot-ctl BİP düğümle iletişim. ot-ctl OpenThread CLI uygulamayla aynı CLI kullanır. Bu nedenle, kontrol edebilir ot-daemon diğer simüle Konu cihazları ile aynı şekilde düğümleri.

Bir ikinci terminal penceresinde, başlangıç ot-ctl :

$ ./output/posix/bin/ot-ctl
>

Kontrol state size başladı Düğüm 2 (BİP düğüm) ait ot-daemon :

> state
disabled
Done

5. FTD'leri ayarlayın

Bu Codelab'de kullanılan diğer iki İş parçacığı düğümü, standart Yonga Üzerinde Sistem (SoC) tasarımındaki Tam İş Parçacığı Aygıtlarıdır (FTD'ler). Onlar kullanmayın wpantund ve kullanıcı el OpenThread CLI onları yönetir.

Bir cihaz, güvenli bir şekilde kimlik doğrulaması yapmak ve bu ağda cihazları devreye almak için Yetkili olarak işlev görür. Diğer cihaz, Komisyon Üyesinin Thread ağında kimlik doğrulaması yapabileceği bir Joiner işlevi görür.

Oluştur ve flaş

Komiser ve Marangoz rolleri etkinken nRF52840 platformu için OpenThread FTD örneğini oluşturun:

$ cd ~/src/ot-nrf528xx
$ rm -rf build
$ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON

OpenThread Full Thread Device (FTD) CLI ikili dosyasının bulunduğu dizine gidin ve onu hex biçimine dönüştürün:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex

USB kablosunu nRF52840 kartındaki harici güç piminin yanındaki Mikro USB bağlantı noktasına takın ve ardından Linux makinesine takın. BİP hala Linux makineye bağlı ise, bu yeni yönetim kurulu seri port olarak görünmelidir /dev/ttyACM1 (bütün nRF52840 panoları kullanmak ttyACM seri port tanımlayıcı için).

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1

Daha önce olduğu gibi, FTD için kullanılan nRF52840 kartının seri numarasını not edin:

c00d519ebec7e5f0.jpeg

nRFx Komut Satırı Araçları konumuna gidin ve kartın seri numarasını kullanarak OpenThread CLI FTD hex dosyasını nRF52840 kartına flashlayın:

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset

Tahtayı "Komiser" olarak etiketleyin.

Yerel USB'ye bağlanın

OpenThread FTD inşa seri ulaşım gibi yerli USB CDC ACM kullanımını sağlar olduğundan, BİP konak (Linux makinesi) ile iletişim kurmak için nRF52840 gemide NRF USB bağlantı noktasını kullanması gerekir.

Debug limanından USB kablosunun mikro USB ucunu ayırın sonra RESET düğmesinin yanında Mikro USB NRF USB portuna takın, nRF52840 kurulu parladı. USB NRF güç kaynağı getirin.

46e7b670d2464842.png

Derlemeyi doğrulayın

Bir terminal penceresinden GNU Ekranını kullanarak OpenThread CLI'ye erişerek başarılı bir derlemeyi doğrulayın. nRF52840 kartları, 115200 baud hızı kullanır.

$ screen /dev/ttyACM1 115200

Yeni pencerede, Return tuşuna basın klavyede birkaç kez OpenThread CLI yetiştirmek > istemi. IPv6 arayüzünü açın ve adresleri kontrol edin:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:1cd6:87a9:cb9d:4b1d
Done

Ctrl+a → kullanın

d sonraki tahta parladı edilebileceğini Linux terminali, So FTD Komiseri CLI ekran ve dönüş ayırmak. İçin her zaman, kullanım de CLI yeniden girmek screen -r komut satırından. Geçerli ekranların bir listesini görmek için, kullanım screen -ls :

$ screen -ls
There is a screen on:
        74182.ttys000.mylinuxmachine        (Detached)
1 Socket in /tmp/uscreens/S-username.

FTD Joiner'ı kurun

Varolan kullanarak, üçüncü nRF52840 kurulu flaş yukarıdaki işlemi tekrarlayın ot-cli-ftd.hex yapı.

Bu üçüncü tahta takılıyken diğer iki düğümlerin Linux makineye bağlı iseniz, seri port olarak görünmelidir /dev/ttyACM2 :

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1  /dev/ttyACM2

Tahtayı "Marangoz" olarak etiketleyin.

Screen kullanarak doğrulama yaparken, komut satırından yeni bir Screen örneği oluşturmak yerine, mevcut olana yeniden bağlanın ve içinde yeni bir pencere oluşturun (FTD Commissioner için kullandığınız):

$ screen -r

Ctrl+a → ile Ekran içinde yeni pencere oluşturun

c

****. Yeni bir komut satırı istemi görünür. FTD Joiner için OpenThread CLI'ye erişin:

$ screen /dev/ttyACM2 115200

Bu yeni pencerede, Return tuşuna basın klavyede birkaç kez OpenThread CLI yetiştirmek > istemi. IPv6 arayüzünü açın ve adresleri kontrol edin:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:6c1e:87a2:df05:c240
Done

Şimdi FTD Joiner CLI FTD Komiseri olarak Screen aynı örneğinde olduğu, Ctrl + bir → kullanarak aralarında geçiş yapabilirsiniz n .

Ctrl+a → kullanın

d çıkış Ekrana herhangi bir zamanda.

6. Terminal penceresi kurulumu

İleride, Thread cihazları arasında sık sık geçiş yapacaksınız, bu nedenle hepsinin canlı ve kolay erişilebilir olduğundan emin olun. Şimdiye kadar, iki FTD'ye erişmek için Screen'i kullandık ve bu araç aynı terminal penceresinde bölünmüş ekrana da izin veriyor. Bir düğümün diğerine verilen komutlara nasıl tepki verdiğini görmek için bunu kullanın.

İdeal olarak, hazır dört pencereniz olmalıdır:

  1. ot-daemon servis / günlükleri
  2. İle RCP birleştirici ot-ctl
  3. OpenThread CLI üzerinden FTD Komiseri
  4. OpenThread CLI üzerinden FTD Joiner

Kendi terminal/seri bağlantı noktası yapılandırmanızı veya aracınızı kullanmak istiyorsanız, bir sonraki adıma geçmekten çekinmeyin. Tüm cihazlar için terminal pencerelerini sizin için en uygun şekilde yapılandırın.

Ekranı Kullanma

Kullanım kolaylığı için yalnızca bir Ekran oturumu başlatın. Her iki FTD'yi de kurduğunuzdan bir tanesine sahip olmalısınız.

Ekran içindeki tüm komutlar Ctrl+a ile başlar.

Temel Ekran komutları:

Ekran oturumuna yeniden bağlanın (komut satırından)

screen -r

Ekran oturumundan ayrıl

Ctrl + → d

Ekran oturumunda yeni pencere oluştur

Ctrl + → c

Aynı Ekran oturumunda pencereler arasında geçiş yapın

Ctrl + → n (ileri doğru) Ctrl + → p (geri)

Ekran oturumunda geçerli pencereyi kapat

Ctrl + → k

Bölünmüş ekran

Screen ile terminali birden çok pencereye bölebilirsiniz:

f1cbf1258cf0a5a.png

Komutlar screen Ctrl + a kullanılarak erişilir. Her komut bu erişim tuşu birleşimiyle başlamalıdır.

Codelab'i tam olarak takip ediyorsanız, aynı Ekran örneğinde iki pencereniz (FTD Commissioner, FTD Joiner) olmalıdır. Ekranı ikisi arasında bölmek için önce mevcut Ekran oturumunuzu girin:

$ screen -r

FTD cihazlarından birinde olmalısınız. Ekranda şu adımları izleyin:

  1. Ctrl + → S yatay pencere bölmek
  2. Ctrl + → Tab yeni bir boş pencereye imleci hareket ettirmek için
  3. Ctrl + → n anahtara yeni pencerede o yanındaki bir
  4. Üst penceresinde, Ctrl + → olarak fark etmezse n tekrar görüntülemek için diğer FTD cihaza

Şimdi ikisi de görülüyor. Ctrl + → kullanarak aralarında geçiş Tab . Size Ctrl + → her pencere adlandırmayınız tavsiye var A karışıklığı önlemek için.

Gelişmiş kullanım

Ayrıca bölünmeye parçaya bölünür ekran ve görüntülemek ot-daemon günlükleri ve BİP Marangoz ot-ctl , bu hizmetler aynı Ekran örneği içinde başlatılmalıdır. Bunu yapmak, durdurma için ot-daemon ve çıkış ot-ctl ve yeni Ekran pencereler (Ctrl + → içinde bunları yeniden c ).

Bu kurulum gerekli değildir ve kullanıcı için bir alıştırma olarak bırakılmıştır.

Aşağıdaki komutlarla pencereler arasında bölün ve gezinin:

Yeni pencere oluştur

Ctrl + → c

Pencereyi dikey olarak böl

Ctrl+a →

Pencereyi yatay olarak böl

Ctrl + → S

Bir sonraki görüntülenen pencereye atla

Ctrl + → Tab

Görüntülenen pencereyi ileri veya geri değiştirin

Ctrl + → n veya p

Geçerli pencereyi yeniden adlandır

Ctrl + → A

Ctrl + → ile herhangi bir zamanda Ekranı bırakın d ile ve Reattach screen -r komut satırından.

Ekranda daha fazla bilgi için bkz GNU Ekranı hızlı başvuru .

7. Thread ağını oluşturun

Artık tüm terminal pencerelerinizi ve ekranlarınızı yapılandırdığınıza göre, Thread ağımızı oluşturalım. FTD Komiseri, yeni bir Operasyonel Dataset oluşturmak ve aktif biri olarak işlemek. Operasyonel Veri Kümesi, oluşturmakta olduğunuz Thread ağının konfigürasyonudur.

## FTD Commissioner ##
----------------------

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 11
Channel Mask: 07fff800
Ext PAN ID: c0de7ab5c0de7ab5
Mesh Local Prefix: fdc0:de7a:b5c0/64
Network Key: 1234c0de7ab51234c0de7ab51234c0de
Network Name: OpenThread-c0de
PAN ID: 0xc0de
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

Ağ Anahtarı not edin 1234c0de7ab51234c0de7ab51234c0de sonra kullanılacaktır.

Bu veri kümesini aktif olan olarak kabul et:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

Thread protokolü işlemini başlatın:

> thread start
Done

Bir süre sonra cihaz durumunu kontrol edin. Lider olmalı. Ayrıca ileride başvurmak üzere RLOC16'yı edinin.

## FTD Commissioner ##
----------------------

> state
leader
Done
> rloc16
0c00
Done

Cihazın IPv6 adreslerini kontrol edin:

## FTD Commissioner ##
----------------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:c00         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a    # Mesh-Local EID (ML-EID)
fe80:0:0:0:1cd6:87a9:cb9d:4b1d         # Link-Local Address (LLA)

"Codelab" ağı artık diğer Thread cihazlarından tarandığında görülebilir.

Gönderen ot-ctl BİP birleştirici tarih:

## RCP Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

FTD birleştirici üzerinde OpenThread CLI Gönderen:

## FTD Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

"Codelab" ağı listede görünmüyorsa, tekrar taramayı deneyin.

Her iki taramalarında, ağ değil bağlanabilen (BİP birleştirici ve FTD birleştirici üzerinde J kolonu) gibi görünüyor dikkat edilebilir. Bu, yalnızca Thread Devreye Alma'nın ağda etkin olmadığı anlamına gelir. Yine de, marangoz cihazına ağ anahtarı manuel olarak girilerek bant dışı birleştirilebilir.

8. RCP Joiner'ı ekleyin

Yeni oluşturduğumuz Thread ağına bant dışı bir işlem kullanarak RCP Joiner'ı ekleyelim. BİP birleştirici üzerindeki ağları tara:

## RCP Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

Katılmak için, aktif veri kümesindeki RCP Joiner'da ağ anahtarını (FTD yetkilisinden yeni edindik) ayarlayın.

## RCP Joiner ##
----------------

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

Doğru ayarlandığından emin olmak için veri kümesini kontrol edin.

## RCP Joiner ##
----------------

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

RCP Joiner'ın "codelab" ağına katılması için Thread'i açın. Birkaç saniye bekleyin, durumu, RLOC16 ve IPv6 adreslerini kontrol edin:

## RCP Joiner ##
----------------

> thread start
Done
> state
child
Done
> rloc16
0c01
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:0c01         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f    # Mesh-Local EID (ML-EID)
fe80:0:0:0:18e5:29b3:a638:943b          # Link-Local Address (LLA)
Done

Mesh-Yerel IPv6 Adres not edin ( fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f burada), daha sonra kullanacağız.

FTD Komiseri üzerinde Geri iki alet de aynı ağının bir parçası olan onaylamak için yönlendirici ve çocuk tabloları kontrol edin. RCP Joiner'ı tanımlamak için RLOC16'yı kullanın.

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  35 | 1ed687a9cb9d4b1d |

Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|VER| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|  2| 1ae529b3a638943b |
Done

BİP birleştirici (BİP Marangozluk elde Mesh-Yerel adresin örgü yerel adresine ping ipaddr çıkışı) bağlantıyı doğrulamak için:

## FTD Commissioner ##
----------------------

> ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f
> 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms

Şimdi, bu topoloji diyagramıyla gösterilen iki düğümden oluşan bir Thread ağımız var:

otcodelab_top01C_2nodes.png

Topoloji diyagramları

Codelab'in geri kalanında çalışırken, ağın durumu her değiştiğinde yeni bir Thread topolojisi diyagramı göstereceğiz. Düğüm rolleri aşağıdaki gibi gösterilir:

b75a527be4563215.png

Yönlendiriciler her zaman beşgendir ve Son Cihazlar her zaman dairelerdir. Her düğümdeki sayılar, her bir düğümün o andaki mevcut rolüne ve durumuna bağlı olarak, CLI çıktısında gösterilen Yönlendirici Kimliğini veya Alt Kimliğini temsil eder.

9. FTD Joiner'ı görevlendirin

Şimdi üçüncü Thread cihazını "codelab" ağına ekleyelim. Bu sefer daha güvenli bant içi devreye alma sürecini kullanacağız. FTD birleştirici günü, şebekeleri taraması:

## FTD Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | f65ae2853ff0c4e4 | 11 | -36 |  57 |

Bir 0 J sütununda Alma cihazda aktif olmadığını Konu gösterir.

Bu sonraki cihazı devreye alırken spesifik olalım ve yalnızca FTD Joiner'ın katılmasına izin verelim. Yine FTD birleştirici üzerine olsun eui64 FTD Komiseri ayırt edebilmek için,:

## FTD Joiner ##
----------------

> eui64
2f57d222545271f1
Done

FTD Komiseri günü, komiseri başlangıç ve belirtmek eui64 Marangoz Credential birlikte katılabilir cihazın. Joiner Credential, cihaza özel bir paroladır.

## FTD Commissioner ##
----------------------

> commissioner start
Done
> commissioner joiner add 2f57d222545271f1 J01NME
Done

FTD birleştirici ve yeniden tarama geçin:

## FTD Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 1 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -45 | 196 |

İle gösterildiği gibi 1 J sütununda, Konu Alma şimdi ağ aktiftir. FTD Commissioner'da az önce ayarladığınız Joiner Credential ile marangoz rolünü başlatın:

## FTD Joiner ##
----------------

> ifconfig up
Done
> joiner start J01NME
Done

Bir dakika içinde, başarılı bir kimlik doğrulama onayı alırsınız:

## FTD Joiner ##
----------------

>
Join success

FTD Joiner'ın "codelab" ağına katılması için Thread'i açın ve durumu ve RLOC16'yı hemen kontrol edin:

## FTD Joiner ##
----------------

> thread start
Done
> state
child
Done
> rloc16
0c02
Done

Cihazın IPv6 adreslerini kontrol edin. ALOC olmadığına dikkat edin. Bunun nedeni, bu cihazın Lider olmaması ve bir ALOC gerektiren Anycast'e özgü bir role sahip olmamasıdır.

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:c02         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)

Hemen FTD Komiseri geçmek ve üç cihazlar "codelab" ağda var olduğunu onaylayın yönlendirici ve çocuk tabloları kontrol edin:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   2 | 0x0c02 |        240 |         15 |     3 |   44 |1|1|1|1| e6cdd2d93249a243 |
Done

RLOC16'yı temel alan FTD Joiner, ağa bir Son Cihaz (alt) olarak bağlanmıştır. İşte güncellenmiş topolojimiz:

otcodelab_top01C_ed01.png

10. İplik iş başında

Bu Codelab'deki İş Parçacığı cihazları, Yönlendiriciye Uygun Son Cihaz (REED) olarak adlandırılan belirli bir Tam İş Parçacığı Cihazı (FTD) türüdür. Bu, bir Yönlendirici veya Uç Aygıt olarak işlev görebilecekleri ve kendilerini bir Uç Aygıttan Yönlendiriciye yükseltebilecekleri anlamına gelir.

Thread 32 Router'a kadar destekleyebilir ancak Router sayısını 16 ile 23 arasında tutmaya çalışır. kendisini otomatik olarak bir Yönlendiriciye terfi ettirir.

Eğer FTD Joiner ekledikten sonra Konu ağında iki çocuğu olsaydı, en az iki dakika bekleyin ve sonra FTD Komiseri üzerinde yönlendirici ve çocuk tabloları yeniden kontrol:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
Done

(MAC = Genişletilmiş FTD birleştirici e6cdd2d93249a243 ) bir yönlendirici kendisini teşvik etmiştir. RLOC16 farklı olduğu not ( b800 yerine 0c02 ). Bunun nedeni, RLOC16'nın bir cihazın Yönlendirici Kimliğine ve Çocuk Kimliğine dayalı olmasıdır. Uç Cihazdan Yönlendiriciye geçiş yaptığında, Yönlendirici Kimliği ve Çocuk Kimliği değerleri değişir ve RLOC16 da değişir.

otcodelab_top01C.png

FTD birleştirici yeni devlet ve RLOC16 onayla:

## FTD Joiner ##
----------------

> state
router
Done
> rloc16
b800
Done

FTD Joiner'ı eski sürüme geçirin

El ile bir Bitiş Aygıta bir Yönlendirici arkasından FTD Joiner downgrading bu davranışı test edebilirsiniz. Durumu çocuk olarak değiştirin ve RLOC16'yı kontrol edin:

## FTD Joiner ##
----------------

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

FTD Komiseri dönüyoruz FTD Marangoz şimdi çocuk masanın (ID = 3) görünmelidir. Geçiş yaparken her ikisinde de olabilir:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   3 | 0x0c03 |        240 |         16 |     3 |   94 |1|1|1|1| e6cdd2d93249a243 |
Done

Bir süre sonra, bir RLOC ile Yönlendirici geri döneceksiniz b800 .

otcodelab_top01C.png

Lideri Kaldır

Lider, tüm İplik Yönlendiriciler arasından kendi kendine seçilir. Bu, mevcut Lider Thread ağından kaldırılırsa, diğer Yönlendiricilerden birinin yeni Lider olacağı anlamına gelir.

FTD Komiseri günü, Konu ağdan çıkarmak için konuya kapatın:

## FTD Commissioner ##
----------------------

> thread stop
Done
> ifconfig down
Done

İki dakika içinde, FTD Joiner yeni Konu lideri olur. Aşağıdakileri doğrulamak için FTD Joiner'ın durumunu ve IPv6 adreslerini kontrol edin:

## FTD Joiner ##
----------------

> state
leader
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00       # Now it has the Leader ALOC!
fdc0:de7a:b5c0:0:0:ff:fe00:b800
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd
fe80:0:0:0:e4cd:d2d9:3249:a243
Done

otcodelab_top02C_01.png

Çocuk masasını kontrol edin. Yeni bir RLOC16 olduğuna dikkat edin. Bu, ID'si ve Genişletilmiş MAC'si ile belirtildiği gibi RCP Joiner'dır. Thread ağını bir arada tutmak için, FTD Komiseri'nden FTD Joiner'a ana Yönlendiricileri değiştirdi. Bu, RCP Joiner için yeni bir RLOC16 ile sonuçlanır (çünkü Yönlendirici Kimliği 3'ten 46'ya değişti).

## FTD Joiner ##
----------------

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |         27 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

Sen BİP Joiner bir çocuk olarak FTD birleştirici eklemek için birkaç dakika beklemeniz gerekebilir. Aşağıdakileri doğrulamak için durumu ve RLOC16'yı kontrol edin:

## RCP Joiner ##
--------------

> state
child
> rloc16
b801

FTD Yetkilisini Yeniden Takın

İki düğümlü bir Thread ağı pek eğlenceli değil. FTD Komiserini tekrar çevrimiçi duruma getirelim.

FTD Komiseri günü, konuya yeniden başlatın:

## FTD Commissioner ##
----------------------

> ifconfig up
Done
> thread start
Done

İki dakika içinde, bir Uç Cihaz olarak "codelab" ağına otomatik olarak yeniden bağlanır ve ardından kendisini bir Yönlendiriciye yükseltir.

## FTD Commissioner ##
----------------------

> state
router
Done

Doğrulamak için FTD birleştirici üzerindeki yönlendirici ve çocuk tabloları kontrol edin:

## FTD Joiner ##
----------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |       63 |         0 |     3 |      3 |   0 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       46 |         0 |     0 |      0 |  15 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |        184 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

otcodelab_top02C_02.png

Thread ağımız yine üç düğümden oluşuyor.

11. Sorun Giderme

Farklı terminal veya Ekran pencerelerinde birden fazla cihazla bir Thread ağını yönetmek karmaşık olabilir. Sorunlarla karşılaşırsanız ağın durumunu veya çalışma alanınızı "sıfırlamak" için bu ipuçlarını kullanın.

Ekran

Hiç yapılandırma (çok fazla Ekran pencereler veya Ekran içinde Ekranlar) kaybolmak varsa, hiçbiri var olur ve kadar Ctrl + → k ile Ekran pencereleri öldürmeye devam screen -ls çıkışlar komut satırında No Sockets found . Ardından, her cihaz için Ekran pencerelerini yeniden oluşturun. Cihaz durumları, Ekran öldürüldüğünde bile korunur.

Konu düğümleri

Konu ağ topoloji olarak bu Codelab açıklanan değildir veya düğümler nedense (onlara güç Linux makine uyudu için olabilir) için keserseniz, bu konuya çökertmek ağ kimlik bilgilerini temizleyin ve oluşturma yeniden başlamak en iyisidir Konu ağ adımı.

FTD'leri sıfırlamak için:

## FTD Commissioner or FTD Joiner ##
------------------------------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

BİP üzerinden aynı şekilde sıfırlanabilir ot-ctl :

## RCP Joiner ##
----------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

12. Çok noktaya yayın kullanma

Çok noktaya yayın, bilgileri bir grup cihaza aynı anda iletmek için kullanılır. Bir Thread ağında, kapsama bağlı olarak farklı cihaz gruplarıyla çok noktaya yayın kullanımı için belirli adresler ayrılmıştır.

IPv6 Adresi

Kapsam

Teslim edildi

ff02::1

Bağlantı-Yerel

Tüm FTD'ler ve MED'ler

ff02::2

Bağlantı-Yerel

Tüm FTD'ler ve Sınır Yönlendiriciler

ff03::1

Mesh-Yerel

Tüm FTD'ler ve MED'ler

ff03::2

Mesh-Yerel

Tüm FTD'ler ve Sınır Yönlendiriciler

Bu Codelab'de bir Border Router kullanmadığımız için, iki FTD ve MED çok noktaya yayın adresine odaklanalım.

Link-Local kapsamı, tek bir radyo iletimi veya tek bir "atlama" ile erişilebilen tüm Thread arayüzlerini içerir. Cihazlar için bir ping yanıt ağ topoloji dikte ff02::1 çoklu yayın adresi.

Ping ff02::1 FTD Komiseri:

## FTD Commissioner ##
----------------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms

Ağda iki cihaz daha var (FTD Joiner ve RCP Joiner), ancak FTD Yetkilisi, FTD Joiner'ın Yerel Bağlantı Adresinden (LLA) yalnızca bir yanıt aldı. Bu, FTD Joiner'ın, FTD Commissioner'ın tek bir sekme ile ulaşabileceği tek cihaz olduğu anlamına gelir.

otcodelab_top02C_02_LL.png

Şimdi ping ff02::1 FTD Marangozluk:

## FTD Joiner ##
----------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms
8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms

İki yanıt! Diğer cihazlar için IPv6 adreslerini kontrol etme, ilkini (biten görebilirsiniz 4b1d ) FTD Komiserin LLA ve (biten ikinci bir 943b ) BİP Marangoz LLA olduğunu.

otcodelab_top02C_02_LL02.png

Bu, FTD Joiner'ın hem FTD Commissioner'a hem de topolojimizi doğrulayan RCP Joiner'a doğrudan bağlı olduğu anlamına gelir.

Mesh-Yerel

Mesh-Local kapsamı, aynı Thread ağı içinde erişilebilen tüm Thread arayüzlerini içerir. Diyelim için ping'e yanıtları görmek ff03::1 çoklu yayın adresi.

Ping ff03::1 FTD Komiseri:

## FTD Commissioner ##
----------------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms

Bu kez FTB Komisyon iki cevap FTD Marangoz Yönlendirme Locator bir (RLOC, biten alınan b800 (biten ML-Kimlik) ve RCP Marangoz Mesh Yerel EID bir tane d55f ). Bunun nedeni, ağ yerel kapsamının tüm Thread ağını içermesidir. Bir cihazdır ağda, bu abone olacak olursa olsun ff03::1 adresinde.

otcodelab_top02C_02_ML.png

Ping ff03::1 FTD Marangozluk aynı davranışı onaylamak için:

## FTD Joiner ##
----------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms

otcodelab_top02C_02_LL02.png

Her iki ping çıkışında da RCP Joiner'ın yanıt süresini not edin. RCP Joiner'ın FTD Yetkilisine (68ms) ulaşması, FTD Joiner'a (23ms) ulaşmasından çok daha uzun sürdü. Bunun nedeni, FTD Joiner için bir atlama ile karşılaştırıldığında, FTD Yetkilisine ulaşmak için iki atlama yapması gerektiğidir.

Ayrıca ağ-yerel çok noktaya yayın pinginin, RCP Joiner için değil, yalnızca iki FTD için RLOC ile yanıt verdiğini fark etmiş olabilirsiniz. Bunun nedeni, FTD'lerin ağ içindeki Yönlendiriciler olması ve RCP'nin bir Uç Cihaz olmasıdır.

Onaylayın BİP birleştirici durumunu kontrol edin:

## RCP Joiner ##
----------------

> state
child

13. UDP ile mesaj gönderin

OpenThread'in sağladığı uygulama hizmetlerinden biri, bir Taşıma Katmanı protokolü olan Kullanıcı Datagram Protokolü'dür (UDP). OpenThread üzerine kurulu bir uygulama, mesajları bir Thread ağındaki düğümler arasında veya harici bir ağdaki diğer cihazlara (Thread ağı bir Border Router içeriyorsa internet gibi) iletmek için UDP API'sini kullanabilir.

UDP yuvaları, OpenThread CLI aracılığıyla kullanıma sunulur. İki FTD arasında mesaj iletmek için kullanalım.

FTD birleştirici için Mesh-Yerel EID adresi alın. Bu adresi kullanıyoruz çünkü bu adrese Thread ağının herhangi bir yerinden ulaşılabiliyor.

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:b800        # Routing Locator (RLOC)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
Done

UDP'yi başlatın ve herhangi bir IPv6 adresi için bir sokete bağlayın:

## FTD Joiner ##
----------------

> udp open
Done
> udp bind :: 1212

FTD Komiseri geçin, UDP başlatın ve onun ML-EID kullanarak, FTD birleştirici üzerinde kurmak sen soketine bağlayın:

## FTD Commissioner ##
----------------------

> udp open
Done
> udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212
Done

UDP bağlantısı iki düğüm arasında canlı olmalıdır. FTD Yetkilisinden bir mesaj gönderin:

## FTD Commissioner ##
----------------------

> udp send hellothere
Done

FTD birleştirici günü, UDP mesajının alındığına dair!

## FTD Joiner ##
----------------

> 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere

14. Tebrikler!

Fiziksel bir Thread ağı oluşturdunuz!

b915c433e7027cc7.png

Artık biliyorsunuz:

  • Thread cihaz türleri, rolleri ve kapsamları arasındaki fark
  • Thread cihazları ağ içindeki durumlarını nasıl yönetir
  • UDP kullanarak düğümler arasında basit mesajlar nasıl iletilir

Sonraki adımlar

Bu Codelab'den yola çıkarak aşağıdaki alıştırmaları deneyin:

  • Kullanarak bir MTD olarak FTD Marangoz kurulu reflash ot-cli-mtd ikili, ve asla Lider olmak için bir Router veya deneme kendisini yükseltmeleri gözlemlemek
  • Ağa daha fazla cihaz ekleyin (farklı bir platform deneyin!)
  • Kullanım pyspinel NCP kontrol etmek
  • Kullanarak bir Border Router NCP dönüştürme OpenThread Sınır Yönlendirici ve internete Konu ağa bağlanmak

daha fazla okuma

Check out openthread.io ve GitHub OpenThread dahil kaynakları çeşitli:

Referans: