1. Giriş
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.
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
- 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.
- 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 >
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:
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.
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: