ESP32H2 ve ESP Thread Kenarlık Freze Kartı ile İş Parçacığı Oluşturma

1. Giriş

26b7f4f6b3ea0700.png

Google Nest ekibi tarafından yayınlanan OpenThread, bağlı ev için ürünlerin geliştirilmesini hızlandırmak amacıyla Thread® ağ protokolünün açık kaynaklı bir uygulamasıdır. İş parçacığı Spesifikasyonu, ev ve ticari bina uygulamaları için IPv6 tabanlı güvenilir, güvenli ve düşük güçlü kablosuz cihazdan cihaza iletişim protokolünü tanımlar.

Espressif, FreeRTOS ve LwIP tabanlı OpenThread yığınını taşımıştır. Böylece geliştiriciler, Thread ağlarını hızlı bir şekilde oluşturabilir. İlgili kaynak kodu GitHub'dan alınabilir. Aynı zamanda Espressif, RTOS'ye dayalı bir İş Parçacığı Kenarlığı Yönlendiricisi de uygulamıştır.

Bu Codelab'de, OpenThread'i gerçek donanımda programlayacak, Thread ağı oluşturup yönetecek ve iletiler arasında geçiş yapacaksınız.

Espressif_hardware_setup.jpg

Neler öğreneceksiniz?

  • OpenThread CLI ikili programları oluşturma ve ESP kartlarına yansıtma.
  • Sınır yönlendirici oluşturup ESP Dişli Kenar Yönlendirici kartına yanıp sönen.
  • Thread düğümlerini ESP Monitor ve OpenThread CLI ile manuel olarak yönetme.
  • İş Parçacığı Kenarlığı Yönlendiricide iş parçacığı ağı oluşturma.
  • Cihazların Thread ağında devreye alınmasını sağlama.
  • İş parçacığı düğümleri arasında IPv6 adresi pingleme.
  • UDP ile Thread düğümleri arasında mesaj iletme.

Gerekenler

Donanım:

  • IEEE 802.15.4 modüllü 2 ESP kartı.
  • 1 ESP Dişli Kenarlık Freze Kartı.

Yazılım:

2. Kullanmaya başlama

  1. ESP-IDF Kurulumu.

Yazılım geliştirme ortamını yüklemek için lütfen ESP-IDF Programlama Kılavuzu'ndaki talimatları uygulayın.

  1. ESP İş Parçacığı Sınırı Yönlendirici SDK'sını klonlayın.

ESP-thread-BR, resmi ESP İş Parçacığı Kenarlığı Yönlendirici SDK'sıdır. İş Parçacığı Kenarlığı Yönlendiricisi oluşturmak için tüm temel ağ özelliklerini destekler ve hızlı üretim için ürün düzeyindeki zengin özellikleri entegre eder.

$ cd <your-local-workspace>
$ git clone --recursive https://github.com/espressif/esp-thread-br.git

3. Derleme ve flash

ot-cli-ftd ikili dosyasını IEEE 802.15.4 modülleriyle ESP kartlarında oluşturmak ve yanıp söndürmek için daha ayrıntılı bilgi için ESP-IDF örneğine ot_cli bakabilirsiniz:

$ cd <your-idf-path>/examples/openthread/ot_cli
$ idf.py set-target <your-board-type>

Birleştirici özelliğini menü yapılandırmasını kullanarak etkinleştirin:

$ idf.py menuconfig

Bileşen yapılandırması > OpenThread > Birleştiriciyi Etkinleştir'i tıklayın, ardından derleme işlemini başlatın.

$ idf.py -p <your-local-port> build flash monitor

ot-br ikili dosyasını ESP İş Parçacığı Yönlendirici Kartında oluşturmak ve yanıp sönmek için önce RCP ikili dosyasını oluşturmanız gerekir. Bu RCP ikili dosyasının ESP İş Parçacığı Yönlendirici Kartı'ndaki cihaza açık bir şekilde yanıp sönmesi gerekmez. Sınır Yönlendirici ikili dosyasına dahil edilir ve ilk başlatmada (veya RCP donanım yazılımı değiştiğinde) ESP32-H2 çipine yansıtılır. Daha fazla ayrıntı için ESP Thread BR dokümanlarına bakabilirsiniz:

$ cd <your-idf-path>/examples/openthread/ot_rcp
$ idf.py set-target esp32h2
$ idf.py build
$ cd <your-esp-thread-br-path>/examples/basic_thread_border_router
$ idf.py set-target esp32s3

Menü yapılandırması üzerinden komisyoncu özelliğini etkinleştirin:

$ idf.py menuconfig

Bileşen yapılandırması > OpenThread > komisyoncuyu etkinleştir > derleme ve Flash sunma.

$ idf.py -p <your-local-port> build flash monitor

4. İş Parçacığı Sınırı Yönlendiricide iş parçacığı ağı oluşturma

Artık ESP İş Parçacığı Yönlendirici Kartı'nda (BR Commissioner) OpenThread komut satırını kullanarak bir İş parçacığı ağı oluşturabilirsiniz:

## BR Commissioner ##
----------------------
> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 21
Channel Mask: 0x07fff800
Ext PAN ID: 151975d11bea97b5
Mesh Local Prefix: fd6a:b54b:d6a3:b05a::/64
Network Key: 731ab6a60a64a0a0b14b259b86b2be01
Network Name: OpenThread-1444
PAN ID: 0x1444
PSKc: 54e7f18d2575014da94db09df29c5df0
Security Policy: 672 onrc 0
Done

Bu veri kümesini etkin veri olarak kaydedin:

> dataset commit active
Done

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

> ifconfig up
I (59329) OPENTHREAD: Platform UDP bound to port 49153
Done
I (59329) OT_STATE: netif up

Thread protokol işlemini başlatın:

> thread start
I(61709) OPENTHREAD:[N] Mle-----------: Role disabled -> detached
Done
> I(62469) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset
I(69079) OPENTHREAD:[N] RouterTable---: Allocate router id 11
I(69079) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2c00
I(69089) OPENTHREAD:[N] Mle-----------: Role detached -> leader
I(69089) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6
I (69099) OPENTHREAD: Platform UDP bound to port 49154

Kısa bir süre sonra cihaz durumunu kontrol edin. Lider olmalıdır.

> state
leader
Done
> 

5. Ağ anahtarı aracılığıyla Thread ağına katılma

Bu codelab'de, IEEE 802.15.4 modülüne sahip iki ESP kartı, BR biçimli ağa katılmak için hazırlanmıştır. Bu oturumda, Pano1'i ağa ekleyeceğiz.

BR'den ağ anahtarını alın:

## BR Commissioner ##
----------------------
> networkkey
731ab6a60a64a0a0b14b259b86b2be01
Done
> 

Bu ağ anahtarını, IEEE 802.15.4 modüllerine sahip bir ESP kartına (Board1 Joiner) ayarlayın:

## Board1 Joiner ##
----------------------
> dataset networkkey 731ab6a60a64a0a0b14b259b86b2be01
Done

Bu veri kümesini etkin veri olarak kaydedin:

> dataset commit active
Done

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

> ifconfig up
Done
I (20308) OT_STATE: netif up

Thread protokol işlemini başlatın:

> thread start
I(23058) OPENTHREAD:[N] Mle-----------: Role disabled -> detached
Done
> I(23408) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset
I(30028) OPENTHREAD:[N] Mle-----------: Attach attempt 1 unsuccessful, will try again in 0.288 seconds
I(30328) OPENTHREAD:[N] Mle-----------: Attach attempt 2, AnyPartition 
I(33498) OPENTHREAD:[N] Mle-----------: Delay processing Announce - channel 21, panid 0x1444
I(33758) OPENTHREAD:[N] Mle-----------: Processing Announce - channel 21, panid 0x1444
I(33758) OPENTHREAD:[N] Mle-----------: Role detached -> disabled
I(33758) OPENTHREAD:[N] Mle-----------: Role disabled -> detached
I(34178) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition 
I(35068) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2c01
I(35068) OPENTHREAD:[N] Mle-----------: Role detached -> child

Kısa bir süre sonra cihaz durumunu kontrol edin. Bu, Çocuk olmalıdır.

> state
child
Done

Rolü Yönlendirici olarak ayarlayın.

> state router
Done
I(51028) OPENTHREAD:[N] Mle-----------: RLOC16 2c01 -> 2800
I(51028) OPENTHREAD:[N] Mle-----------: Role child -> router
I(51028) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6
> 

esp_ot_tp_LR.jpg

6. Güvenli devreye alma ile Thread ağına katılın

Bu oturumda, güvenlik devreye alma özelliği aracılığıyla Board2'yi ağa ekleyeceğiz:

BR Commissioner'dan PSKc ve panid belgesini alın:

## BR Commissioner ##
----------------------
> pskc
54e7f18d2575014da94db09df29c5df0
Done
> panid
0x1444
Done

Ağ bilgilerini Pano2 olarak yapılandırın:

## Board2 Joiner ##
----------------------
> dataset pskc 54e7f18d2575014da94db09df29c5df0
Done
> dataset panid 0x1444
Done

Bu veri kümesini etkin veri olarak kaydedin:

## Board2 Joiner ##
----------------------
> dataset commit active 
Done

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

## Board2 Joiner ##
----------------------
> ifconfig up
Done
I (29146) OT_STATE: netif up

Board2'den eui64'ü alın:

## Board2 Joiner ##
----------------------
> eui64
4831b7fffec02be1
Done

BR Commissioner (Brezilya Yetkilisi) bölümünde, yetkiliyi başlatın ve birleştirici kimlik bilgisiyle (ör. J01NME) birlikte katılabilecek cihazın eui64 kodunu belirtin. Birleştirici Kimlik Bilgisi, tüm büyük alfanümerik karakterlerden (okunabilirlik için I, O, Q ve Z hariç 0-9 ve A-Y) oluşan, 6 ila 32 karakter uzunluğunda olan cihaza özel bir dizedir.

## BR Commissioner ##
----------------------
> commissioner start
Commissioner: petitioning
Done
Commissioner: active
> commissioner joiner add 4831b7fffec02be1 J01NME
Done

Board2 Joiner'a geçin. Katılımcı rolüne, kısa süre önce BR Yetkilisi'nde ayarladığınız Katılımcı Kimlik Bilgileri ile başlayın:

## Board2 Joiner ##
----------------------
> ifconfig up
Done
> joiner start J01NME
Done

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

## Board2 Joiner ##
----------------------
>
Join success

Ardından, BR Yetkilisi tarafından oluşturulan Thread ağını başlatabilir ve bu ağa katılabilirsiniz.

Thread protokol işlemini başlatın:

> thread start
I(35727) OPENTHREAD:[N] Mle-----------: Role disabled -> detached
Done
> I(36197) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset
I(37007) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2801
I(37007) OPENTHREAD:[N] Mle-----------: Role detached -> child

Rolü Yönlendirici olarak ayarlayın.

> state router
Done
I(46057) OPENTHREAD:[N] Mle-----------: RLOC16 2801 -> 4400
I(46057) OPENTHREAD:[N] Mle-----------: Role child -> router
I(46057) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6
> 

Artık aşağıda gösterilen topolojiye sahip bir Thread ağı elde edersiniz:

esp_ot_tp_LRR.jpg

7. İş parçacığı düğümleri arasında IPv6 adresi pingleme

Ping komutunu kullanarak iki pano arasında iletişim kurabilirsiniz. Her kartın IPv6 adresini yazdırmak için ipaddr komutunu kullanın:

## BR Commissioner ##
----------------------
> ipaddr
fd6a:b54b:d6a3:b05a:0:ff:fe00:fc00          # Leader Anycast Locator (ALOC)
fd6a:b54b:d6a3:b05a:0:ff:fe00:2c00          # Routing Locator (RLOC)
fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0     # Mesh-Local EID (ML-EID) 
fe80:0:0:0:687c:7248:cc14:9c4d              # Link-Local Address (LLA)
Done
> 
## Board1 Joiner ##
----------------------
> ipaddr
fd6a:b54b:d6a3:b05a:0:ff:fe00:2800          # Routing Locator (RLOC)
fd6a:b54b:d6a3:b05a:e461:db08:c833:1248     # Mesh-Local EID (ML-EID)
fe80:0:0:0:18ac:df04:4671:6a45              # Link-Local Address (LLA)
Done
## Board2 Joiner ##
----------------------
> ipaddr
fd6a:b54b:d6a3:b05a:0:ff:fe00:4400          # Routing Locator (RLOC)
fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc     # Mesh-Local EID (ML-EID)
fe80:0:0:0:a8cc:1483:f696:91a2              # Link-Local Address (LLA)
Done

Örneğin, BR Commissioner'dan Board2 MLE-ID'sini pinglemek için şu komutu BR Commissioner'da çalıştırabilirsiniz:

## BR Commissioner ##
----------------------
> ping fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc
16 bytes from fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc: icmp_seq=1 hlim=255 time=123ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 123/123.0/123 ms.
Done

8. UDP ile Thread düğümleri arasında mesaj iletme

Bu oturumda, iki Thread cihazı arasında nasıl mesaj göndereceğinizi öğreneceksiniz. Örneğin, udp'yi açıp 20617 bağlantı noktasına bağlayın ve BR üzerindeki tüm adresleri dinleyin:

## BR Commissioner ##
----------------------
> udp open
Done
> udp bind :: 20617
I (1298739) OPENTHREAD: Platform UDP bound to port 20617
Done

Ardından Board1'den BR MLE-ID adresine ve 20617 bağlantı noktasına bir mesaj gönderin:

## Board1 Joiner ##
----------------------
> udp open
Done
> udp send fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0 20617 ESP

Alınan mesajı BR'de görebilirsiniz:

## BR Commissioner ##
----------------------
3 bytes from fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 49154 ESP

9. Tebrikler!

ESP beyaz tahtalarını kullanarak fiziksel bir Thread ağı oluşturdunuz.

esp_ot_final_topology.jpg

Artık bu bilgileri biliyorsunuz:

  • OpenThread CLI ikili programları oluşturma ve ESP kartlarına yansıtma.
  • ESP Diş Kenarlığı Yönlendirici kartı için yanıp sönen sınır yönlendirici oluşturuluyor.
  • Thread düğümlerini ESP Monitor ve OpenThread CLI ile manuel olarak yönetme.
  • İş Parçacığı Kenarlığı Yönlendiricide iş parçacığı ağı oluşturma.
  • Cihazların Thread ağında devreye alınmasını sağlama.
  • İş parçacığı düğümleri arasında IPv6 adresi pingleme.
  • UDP ile Thread düğümleri arasında mesaj iletme.

Daha fazla bilgi

Aşağıdakiler de dahil olmak üzere çeşitli OpenThread kaynakları için openthread.io ve GitHub'a göz atın:

  • Desteklenen Platformlar: OpenThread'i destekleyen tüm platformları keşfedin
  • OpenThread: OpenThread oluşturma ve yapılandırma hakkında daha fazla bilgi
  • Thread Primer: Bu Codelab'de yer alan tüm Thread kavramlarını kapsar

Referans: