B91 Geliştirme Kurulu ve OpenThread ile İş Parçacığı Ağı Oluşturma

1. Giriş

26b7f4f6b3ea0700.png

OpenThread, Nesnelerin İnterneti (IoT) cihazları için tasarlanmış sağlam ve güvenli bir kablosuz mesh ağ protokolü olan Thread® ağ protokolünün açık kaynaklı bir uygulamasıdır. OpenThread, Google'ın Nest ekibi tarafından geliştirilmiştir ve geliştirici topluluğuna açık kaynaklı bir proje olarak ücretsiz sunulur.

Thread Spesifikasyonu, akıllı evlerde ve ticari binalarda yaygın olarak bulunan, kaynak kısıtlı cihazlar için güvenilir, güvenli ve enerji tasarruflu bir kablosuz iletişim protokolü oluşturur. OpenThread, Thread'deki tam ağ katmanı kapsamını (ör. IPv6, 6LoWPAN, MAC güvenliğiyle IEEE 802.15.4, örgü bağlantısı oluşturma ve örgü yönlendirme) içerir.

Telink, OpenThread uygulamasını Zephyr RTOS'ye entegre ederek Telink donanımıyla sorunsuz uyumluluk sağlamıştır. Bu entegrasyonun kaynak koduna GitHub'dan kolayca erişilebilir. Ayrıca, yazılım geliştirme kiti (SDK) olarak da sağlanır.

Bu codelab'de, OpenThread'i gerçek donanım üzerinde programlayacak, bir Thread ağı oluşturup yönetecek ve düğümler arasında mesaj alışverişi yapacaksınız. Aşağıdaki resimde, OT Sınır Yönlendirici (OTBR) ve bir Thread cihazının yer aldığı donanım kurulumu gösterilmektedir.

codelab_overview.png

Neler öğreneceksiniz?

  • Telink Zephyr geliştirme ortamını kullanarak OpenThread uygulamasını ayarlama.
  • OpenThread CLI örneklerini (ot-cli-ftd ve ot-rcp) oluşturmak ve Telink B91 geliştirme kartlarına yüklemek için.
  • Raspberry Pi 3B+ veya daha yeni bir modelde Docker kullanarak OpenThread Border Router (OTBR) kurmak için.
  • OTBR'de Thread ağı oluşturmak için.
  • Bant dışı hata ayıklama kullanarak Thread ağına cihaz eklemek için.
  • KSA'yı kullanarak Thread ağındaki düğümler arasındaki bağlantıyı doğrulama

İhtiyacınız olanlar

Donanım:

  • İki B91 geliştirme kartı.
  • Raspbian OS Image yüklü bir Raspberry Pi 3B+ veya daha yeni bir model.
  • En az iki USB bağlantı noktasına sahip bir Linux makine.
  • İnternete bağlı bir anahtar (veya yönlendirici) ve birkaç Ethernet kablosu.

Yazılım:

  • Telink Burning and Debugging Tool —— LinuxBDT.
  • PuTTY gibi bir seri bağlantı noktası terminal aracı.
  • Git ve West gibi diğer araçlar.

2. Ön koşullar

Thread Kavramları ve OpenThread CLI

Bu codelab'den önce temel Thread kavramları ve OpenThread CLI hakkında bilgi edinmek için OpenThread Simulation codelab'ini incelemeniz faydalı olabilir.

Linux makine

Linux makinesi (Ubuntu v20.04 LTS veya sonraki sürümler), Telink Zephyr geliştirme ortamını kurmak ve tüm Thread geliştirme kartlarına yazılım yüklemek için derleme makinesi olarak işlev görür. Bu görevleri gerçekleştirmek için Linux makinede iki kullanılabilir USB bağlantı noktası ve internet bağlantısı olması gerekir.

Seri Bağlantı Noktası Bağlantısı ve Terminaller

Cihazı doğrudan Linux makinenin USB bağlantı noktasına takabilirsiniz. Ayrıca, cihazlara erişmek için bir seri bağlantı noktası terminal aracına ihtiyacınız olacaktır.

Bu codelab'de, FTD Joiner ve Raspberry Pi'yi kontrol etmek için terminal aracı PuTTY kullanılır. Kullanımıyla ilgili genel bir bakış sunar ancak başka terminal yazılımları da kullanılabilir.

Bu codelab için iki set B91 Geliştirme Kiti gerekir. Aşağıdaki fotoğrafta, bir setteki minimum sayıda gerekli bileşen gösterilmektedir.

overview.png

Bu kitlerden biri RCP (Radyo Yardımcı İşlemcisi), diğeri ise FTD (Tam Thread Cihazı) olarak kullanılır. Kiti henüz teslim almadıysanız Telink'in resmi web sitesinden daha fazla bilgi edinebilirsiniz. Kullanılacak bazı bileşenler şunlardır:

Dizin

Ad

1

Telink B91 Development Board

2

Telink Burning Board

3

2,4 GHz Anten

4

USB kablosu (USB A - mini USB)

Raspbian OS Image ile Raspberry Pi 3B+ veya daha yeni bir model

Bu codelab'de Raspbian Bullseye Lite OS görüntüsü veya Raspbian Bullseye with Desktop yüklü bir Raspberry Pi 3B+ ya da daha yeni bir model gereklidir. Ethernet üzerinden internete bağlanır ve OpenThread Border Router (OTBR) için ana makine olarak yapılandırılır.

Ağ Bağlantısı

İnternete bağlı bir anahtar (veya yönlendirici) ve birkaç Ethernet kablosu. Raspberry Pi'yi Linux makinesine bağlamak için kullanılır. Böylece, kullanıcılar Raspberry Pi'yi ana makine üzerinden yapılandırabilir.

LinuxBDT

Tüm Telink çip serileri için geçerli olan Telink Burning and Debugging Tool (BDT), OpenThread yazılımını Telink B91 geliştirme kartlarına silmenize ve yüklemenize olanak tanır. Linux makinenize X86 tabanlı Linux sürümü linuxBDT'yi yükleyin.

Diğer

  • Telink Zephyr geliştirme ortamını kurmak için Git.
  • West, Zephyr projesini yönetmek ve OpenThread ikililerini oluşturmak için kullanılır.

3. Donanım yazılımını ayarlama

Linux makinede bir CLI terminali açın ve APT'nizin güncel olduğundan emin olmak için aşağıdaki komutları çalıştırarak başlayın.

$ sudo apt update
$ sudo apt upgrade

Bu işlem tamamlandıktan sonra aşağıdaki adımlarla devam edin.

  1. Bağımlılıkları yükleyin.
    $ wget https://apt.kitware.com/kitware-archive.sh
    $ sudo bash kitware-archive.sh
    $ sudo apt install --no-install-recommends git cmake ninja-build \
    gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \
    python3-setuptools python3-tk python3-wheel xz-utils file make gcc \
    gcc-multilib g++-multilib libsdl2-dev
    
    Zephyr şu anda CMake (3.20.0), Python3 (3.6) ve Devicetree Compiler (1.4.6) gibi temel bağımlılıkların minimum sürümlerini gerektiriyor.
    $ cmake --version
    $ python3 --version
    $ dtc --version
    
    Sonraki adımlara geçmeden önce sisteminizde yüklü olan sürümleri doğrulayın. Sürümler doğru değilse APT yansısını kararlı ve güncel bir yansıyla değiştirin veya bu bağımlılıkları manuel olarak güncelleyin.
  2. Batı yüklemesi
    $ pip3 install --user -U west
    $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    $ source ~/.bashrc
    
    ~/.local/bin öğesinin $PATH ortam değişkeninizde olduğundan emin olun.
  3. Zephyr Project kaynak kodunu alın.
    $ west init ~/zephyrproject
    $ cd ~/zephyrproject
    $ west update
    $ west blobs fetch hal_telink
    $ west zephyr-export
    
  4. Zephyr için ek Python bağımlılıklarını yükleyin.
    $ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
    
  5. Zephyr araç zincirini kurun. Çoğu kartı flash etmenize olanak tanımak için Zephyr araç zincirini (yaklaşık 1-2 GB) yerel bir dizine indirin.
    $ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
    $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
    
    Zephyr SDK'sını indirip aşağıdaki gibi önerilen yola yerleştirin.
    $HOME/zephyr-sdk[-x.y.z]
    $HOME/.local/zephyr-sdk[-x.y.z]
    $HOME/.local/opt/zephyr-sdk[-x.y.z]
    $HOME/bin/zephyr-sdk[-x.y.z]
    /opt/zephyr-sdk[-x.y.z]
    /usr/zephyr-sdk[-x.y.z]
    /usr/local/zephyr-sdk[-x.y.z]
    
    Burada [-x.y.z], -0.16.1 gibi herhangi bir metin olabilen isteğe bağlı bir metindir. SDK yüklendikten sonra dizin taşınamaz. Ardından Zephyr araç zincirini yükleyin.
    $ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz
    $ cd zephyr-sdk-0.16.1
    $ ./setup.sh -t riscv64-zephyr-elf -h -c
    
  6. Hello World örneğini oluşturun. Öncelikle, Hello World örneğini kullanarak resmi Zephyr proje yapılandırmasının doğru olduğunu doğrulayın, ardından özel projenizi ayarlamaya devam edin.
    $ cd ~/zephyrproject/zephyr
    $ west build -p auto -b tlsr9518adk80d samples/hello_world
    
    West derleme komutunu kullanarak Zephyr deposunun kök dizininden hello_world örneğini oluşturun. zephyr.bin adlı donanım yazılımını build/zephyr directory altında bulabilirsiniz.
  7. Zephyr ortam komut dosyasını ~/.bashrc konumuna ekleyin. Aşağıdaki komutları çalıştırın.
    $ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc
    $ source ~/.bashrc
    
  8. Telink Zephyr uzak deposunu ekleyin. Telink deposunu yerel olarak geliştirme dalı olarak indirin ve güncelleyin.
    $ cd ~/zephyrproject/zephyr
    $ git remote add telink-semi https://github.com/telink-semi/zephyr
    $ git fetch telink develop
    $ git checkout develop
    $ west update
    $ west blobs fetch hal_telink
    

Daha fazla bilgi için Zephyr Doc – Getting Started Guide (Zephyr Dokümanı - Başlangıç Kılavuzu) başlıklı makaleyi inceleyebilirsiniz.

Telink LinuxBDT aracını indirip B91 Geliştirme Kartı'na ürün yazılımı yüklemeyi etkinleştirmek için Linux makinenizdeki yerel bir dizine (ör. ana dizin ~) çıkarın.

$ cd ~
$ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2
$ tar -vxf LinuxBDT.tar.bz2 

Burning Board'u USB arayüzü üzerinden Linux makineye bağlayın ve aşağıdaki komutları girin.

$ cd LinuxBDT
$ sudo ./bdt lsusb -v
Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller
Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD
Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse
Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6
Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller

"Telink Web Debugger v3.6" mesajını görüyorsanız BDT programlayıcısının Linux makinesine başarıyla bağlandığı anlaşılır.

Donanım Yazılımı Derlemesi

Bu codelab'de iki tür OpenThread ürün yazılımı oluşturulacak:

  • ot-cli-ftd,
  • ve ot-rcp.

Derleme yöntemleri şunlardır:

  1. Radyo yardımcı işlemcisi (ot-rcp)
    $ cd ~/zephyrproject
    $ rm -rf build_ot_coprocessor
    $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
    
  2. Etkileşimli Komut Satırı ile Tam Özellikli Thread Cihazı (ot-cli-ftd)
    $ cd ~/zephyrproject
    $ rm -rf build_ot_cli_ftd
    $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
    

Donanım Yazılımı Yükleme

Aşağıdaki şekilde gösterildiği gibi bir USB kablosu kullanarak B91 Geliştirme Kartı'nı Burning Board'a bağlayın.

connection_overview.png

Komut satırında, aşağıdaki komutları çalıştırarak yazılım yakma işlemini gerçekleştirin (ot-cli-ftd yazılımının yanıp sönmesi örnek olarak kullanılmıştır).

$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr
$ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin
$ cd ~/LinuxBDT
$ sudo ./bdt 9518 ac
 Activate OK!
$ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin
 EraseSectorsize...
 Total Time: 2181 ms
 Flash writing...
 [100%][-] [##################################################]
 File Download to Flash at address 0x000000: 491700 bytes
 Total Time: 30087 ms

ot-rcp için flaş yöntemi, ot-cli-ftd için kullanılanla temelde aynıdır. Ancak, donanım yazılımı yolları ve adları farklıdır.

Flaşlama işleminden sonra, iki B91 Geliştirme Kartı'nı uygun şekilde işaretleyerek birbirinden ayırın. ot-cli-ftd ile yanıp sönen kartı "FTD Joiner", ot-rcp ile yanıp sönen kartı ise "RCP" olarak etiketleyin.

4. FTD Joiner cihazı için Seri Konsol yapılandırma

Resimde gösterildiği gibi, FTD birleştiricisini doğrudan Linux makinesinin USB bağlantı noktasına takın.

usb_connection.png

FTD Joiner Device'ı Linux makinesine bağladıktan sonra PuTTY'yi açın. Ardından yeni bir terminal oluşturun, seri bağlantı noktası bilgilerini ayarlayın ve seri bağlantı noktasını açın.

uart_console.png

OpenThread komut satırı referansını OpenThread CLI Reference (OpenThread KSA Referansı) sayfasında bulabilirsiniz. Tüm komutların başına ot eklediğinizden emin olun.

Örnekler:

> ot state
disabled
Done
> ot channel
11
Done
>

5. Raspberry Pi'yi OpenThread Border Router olarak ayarlama

OpenThread sınır yönlendirici, iki ana bölümden oluşan bir cihazdır:

  • Raspberry Pi, bir sınır yönlendirici (BR) olarak işlev görmek için gereken tüm hizmetleri ve donanım yazılımlarını içerir.
  • İleti dizisi iletişiminden RCP sorumludur.

Radyo yardımcı işlemcisi (RCP)

ot-rcp donanım yazılımını yüklemek için ot-cli-ftd donanım yazılımı yükleme işlemindeki adımları uygulayın. B91 Geliştirme Kartı'nı aşağıdaki şekilde gösterildiği gibi Raspberry Pi'deki bir USB bağlantı noktasına bağlayın.

OTBR_overview.png

Raspberry Pi

  1. Raspbian Bullseye Lite OS görüntüsünün veya Raspbian Bullseye with Desktop'ın SD karta doğru şekilde yazıldığından emin olun.
  2. Raspberry Pi'ye SSH ile bağlanabilir veya doğrudan Raspbian Masaüstü ile çalışabilirsiniz. Bu codelab'de SSH kullanılacaktır.
  3. Bir sonraki adımda OTBR Docker'ı yüklemeye devam etmeden önce yerel depoyu ve paket yöneticisini güncellediğinizden emin olun.
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

Docker'ı yükle

Önceki adımda yalnızca yerel depoyu ve paket yöneticisi APT'yi güncellediyseniz Raspberry Pi'yi yeniden başlatın ve ardından bir SSH terminal penceresi açın.

  1. Docker'ı yükleyin:
    $ curl -sSL https://get.docker.com | sh
    
  2. İzni vermek için mevcut hesabı bir Docker grubuna yerleştirin. Böylece her komutun önüne sudo eklenmesi gerekmez.
    $ sudo usermod -aG docker $USER
    
    Değişikliklerin geçerli olması için Raspberry Pi'yi yeniden başlatmanız gerekir.
  3. Docker başlatılmamışsa başlatın:
    $ sudo dockerd
    
  4. OTBR güvenlik duvarı komut dosyaları, Docker container'da kurallar oluşturur. Bundan önce, iptables'in çekirdek modülünü yüklemek için modprobe komutunu çalıştırın.
    $ sudo modprobe ip6table_filter
    

Docker'ı yapılandırma ve çalıştırma

Bu codelab, OTBR Docker görüntüsünü doğrudan OpenThread Docker Hub'dan çeker. Bu görüntü, OpenThread ekibi tarafından test edilip doğrulandı.

  1. En son görüntüyü çekin:
    $ docker pull openthread/otbr:latest
    
  2. Docker container'daki resim listesini kontrol edin:
    $ docker images
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    openthread/otbr   latest    db081f4de15f   6 days ago   766MB
    
  3. /dev işaretini kontrol ederek RCP cihazının seri bağlantı noktası adını belirleyin. ttyACM0, RCP'nin doğru şekilde bağlandığını gösterir.
    $ ls /dev/tty*
    ...
    /dev/ttyACM0
    ... 
    
  4. OTBR Docker'ı ilk kez çalıştırın ve RCP'nin seri bağlantı noktasını referans alın (ttyACM0). Bu OTBR Docker'ı kullanmaya devam etmek istiyorsanız docker start otbr komutunu kullanın.
    $ docker run --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 openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
    
  5. Raspberry Pi ile RCP arasındaki bağlantıyı test etmek için yeni bir SSH terminal penceresi açın.
    $ docker exec -ti otbr sh -c "sudo ot-ctl"
    > state 
    disabled
    Done
    

İsteğe bağlı Docker komutları:

  • Çalışan Docker kapsayıcısı hakkında bilgi edinme:
    $ docker ps -aq
    
  • OTBR Docker'ı durdurma:
    $ docker stop otbr
    
  • OTBR Docker'ı kaldırma:
    $ docker rm otbr
    
  • OTBR Docker'ı yeniden yükleyin:
    $ docker restart otbr
    

Bu noktada bir FTD Joiner cihazı ve bir OTBR hazır durumdadır. Thread ağını oluşturmak için bir sonraki adıma geçebilirsiniz.

6. Thread ağı oluşturma

RCP'de Thread ağı oluşturma

Thread ağı oluşturmak için OTBR'de ot-ctl kabuğunu kullanırız. Önceki bölümde kabuktan çıktıysanız SSH terminalinde kabuğu tekrar başlatmak için aşağıdaki komutu girin:

$ docker exec -ti otbr sh -c "sudo ot-ctl"

Ardından, komutları tabloda belirtilen sırayla girin ve bir sonraki adıma geçmeden önce her adımın beklenen sonucu verdiğinden emin olun.

Dizin

Komut

Giriş

Beklenen Yanıt

1

dataset init new

Yeni bir rastgele ağ veri kümesi oluşturun.

Bitti

2

dataset commit active

Yeni veri kümesini, kalıcı olmayan depolama alanındaki Etkin Operasyonel Veri Kümesi'ne işleyin.

Bitti

3

ifconfig up

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

Bitti

4

thread start

Thread protokolü işlemini etkinleştirin ve bir Thread ağına bağlanın.

Bitti

İş parçacığı arayüzünün açılması için 10 saniye bekleyin.

5

state

Cihaz durumunu kontrol edin.Bu komut, lider olana ve sonraki adıma geçene kadar birden çok kez çağrılabilir.

leader
Bitti

6

dataset active

Tam Etkin Operasyonel Veri Kümesi'ni kontrol edin ve ağ anahtarını kaydedin.

Etkin Zaman Damgası: 1
Kanal: 13
Kanal Maskesi: 0x07fff800
Ext PAN ID: b07476e168eda4fc
Mesh Local Prefix: fd8c:60bc:a98:c7ba::/64
Network Key: c312485187484ceb5992d2343baaf93d
Network Name: OpenThread-599c
PAN ID: 0x599c
PSKc: 04f799ad752e8401a1933486c95299f60
Security Policy: 672 onrc 0
Bitti

Ağ oluşturma sırasında OTBR tarafından rastgele oluşturulan ağ anahtarı, ot-cli-ftd cihazları bu Thread ağına katıldığında kullanılır.

FTD Joiner'ı bant dışı devreye alma yoluyla Thread'e ekleme

Bant dışı devreye alma, ağ kimlik bilgilerinin ağa katılmayı bekleyen cihazlara kablosuz olmayan yöntemlerle (ör. OpenThread KSA'ya manuel olarak girme) iletilmesini ifade eder. FTD Joiner'ın seri konsoluna aşağıdaki komutları sırayla girin.

Dizin

Komut

Giriş

Beklenen Yanıtlar

1

ot dataset networkkey c312485187484ceb5992d2343baaf93d

Bir cihazın Thread ağına bağlanması için yalnızca Ağ Anahtarı gerekir.

Bitti

2

ot dataset commit active

Yeni veri kümesini, kalıcı olmayan depolama alanındaki Etkin Operasyonel Veri Kümesi'ne işleyin.

Bitti

3

ot ifconfig up

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

Bitti

4

ot thread start

Thread protokolü işlemini etkinleştirin ve bir Thread ağına bağlanın.

Bitti

Cihaz katılırken ve kendini yapılandırırken 20 saniye bekleyin.

5

ot state

Cihaz durumunu kontrol edin.

child/router
Done

Topoloji

Aşağıdaki kod snippet'lerindeki gibi yanıtlar almak için SSH terminaline ipaddr, child table, router table gibi komutlar girin.

> ipaddr rloc
fd8c:60bc:a98:c7ba:0:ff:fe00:b000
Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+
|   1 | 0xb001 |        240 |         23 |     3 |   51 |1|1|1|  3| 0 |     0 |   129 | 82bc12fbe783468e |

Done
> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 44 | 0xb000 |       63 |         0 |     0 |      0 |   0 | 7ae354109d611f7e |    0 |

Done
...
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+

Done
> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 33 | 0x8400 |       63 |         0 |     3 |      3 |  13 | e61487c1cda940a6 |    1 |
| 44 | 0xb000 |       63 |         0 |     0 |      0 |   0 | 7ae354109d611f7e |    0 |

Done

OTBR'nin RLOC16 değeri 0xb000, FTD Joiner'ın RLOC16 değeri ise başlangıçta 0xb001'dir. Ardından, yönlendirici kimliği alındıktan sonra FTD Joiner'ın RLOC16 değeri 0x8400 olur. FTD Joiner'ın alt öğeden yönlendiriciye yükseltildiği görülüyor.

Mevcut Thread ağında iki düğüm bulunur ve topoloji aşağıdaki şekilde gösterildiği gibidir.

topology.png

7. Thread Cihazları Arasında İletişim

ICMPv6 İletişimi

Aynı ağdaki Thread cihazlarının birbiriyle iletişim kurup kuramadığını kontrol etmek için ping komutunu kullanırız. Öncelikle, cihazın RLOC'unu almak için ipaddr komutunu kullanın.

> ipaddr
fd8c:60bc:a98:c7ba:0:ff:fe00:fc11
fdbd:7274:649c:1:1d19:9613:f705:a5af
fd8c:60bc:a98:c7ba:0:ff:fe00:fc10
fd8c:60bc:a98:c7ba:0:ff:fe00:fc38
fd8c:60bc:a98:c7ba:0:ff:fe00:fc00
fd8c:60bc:a98:c7ba:0:ff:fe00:b000       # Routing Locator (RLOC)
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
fe80:0:0:0:78e3:5410:9d61:1f7e
Done

Ping işlemini yürütmek için FTD Joiner'ın seri konsoluna aşağıdaki komutu girin.

> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000
16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms.
Done

Seri bağlantı noktasının çıkış yanıtı, OTBR tarafının ping isteğini aldığını ve FTD Joiner'ın OTBR tarafından döndürülen ping yanıtını aldığını gösterir. İki cihaz arasındaki iletişim başarılı olmalıdır.

UDP iletişimi

OpenThread tarafından sağlanan uygulama hizmetleri arasında UDP de bulunur. UDP API'yi kullanarak Thread ağındaki düğümler arasında bilgi aktarabilir veya Border Router aracılığıyla harici ağlara bilgi aktarabilirsiniz. OpenThread'in UDP API'siyle ilgili ayrıntılı giriş, OpenThread CLI - UDP Örneği'nde yer almaktadır. Bu codelab'de, OTBR ile FTD Joiner arasında bilgi iletmek için bu API'lerden bazıları kullanılacaktır.

Öncelikle OTBR'nin Mesh-Local EID'sini alın. Bu adres, Thread cihazının IPv6 adreslerinden biridir ve aynı Thread ağı bölümündeki Thread cihazlarına erişmek için kullanılabilir.

> ipaddr mleid
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
Done

OTBR UDP'yi etkinleştirmek ve cihazın 1022 bağlantı noktasını bağlamak için SSH terminaline aşağıdaki komutları girin.

> udp open
Done
> udp bind :: 1022
Done

Seri konsola aşağıdaki komutları girin ve FTD Joiner'ın UDP'sini etkinleştirin. Cihazın 1022 bağlantı noktasını bağlayın ve ardından OTBR'ye 5 baytlık hello mesajı gönderin.

> ot udp open 
Done
> ot udp bind :: 1022
Done
> ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello
Done

SSH terminali aşağıdaki bilgileri verir. OTBR, FTD Joiner'dan hello mesajını alır. Bu, UDP iletişiminin başarılı olduğu anlamına gelir.

> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello

8. Tebrikler

Basit bir Thread ağı oluşturup bu ağdaki iletişimi doğruladınız.

Artık şunları biliyorsunuz:

  • Telink Zephyr geliştirme ortamını oluşturma ve kullanma
  • ot-cli-ftd ve ot-rcp ikili dosyalarını oluşturma ve bunları Telink B91 Geliştirme Kartları'na yükleme
  • Docker kullanarak Raspberry Pi 3B+ veya daha yeni bir sürümü OpenThread Border Router (OTBR) olarak ayarlama
  • OTBR'de Thread ağı oluşturma
  • Bant dışı devreye alma yoluyla Thread ağına cihaz ekleme
  • Thread ağındaki düğümler arasındaki bağlantı nasıl doğrulanır?

Daha fazla bilgi

Aşağıdakiler de dahil olmak üzere çeşitli OpenThread kaynakları hakkında bilgi edinmek için openthread.io ve GitHub'u ziyaret edin:

Referans belgeler: