1. Pengantar

OpenThread, yang dirilis oleh tim Google Nest, adalah implementasi open source dari protokol jaringan Thread® yang dirancang untuk mempercepat pengembangan produk untuk rumah yang terhubung. Spesifikasi Thread mendefinisikan protokol komunikasi nirkabel perangkat-ke-perangkat berbasis IPv6 yang andal, aman, dan berdaya rendah untuk aplikasi rumah dan bangunan komersial.
Espressif telah mem-porting stack OpenThread berdasarkan FreeRTOS dan LwIP, sehingga memungkinkan developer membangun jaringan Thread dengan cepat. Kode sumber terkait dapat diperoleh dari GitHub. Pada saat yang sama, Espressif juga telah mengimplementasikan Thread Border Router berdasarkan RTOS.
Dalam Codelab ini, Anda akan memprogram OpenThread di hardware sebenarnya, membuat dan mengelola jaringan Thread, serta meneruskan pesan antar-node.

Yang akan Anda pelajari
- Membangun dan mem-flash biner OpenThread CLI ke papan ESP.
- Membangun dan mem-flash router pembatas ke papan ESP Thread Border Router.
- Mengelola node Thread secara manual dengan ESP Monitor dan OpenThread CLI.
- Membentuk jaringan Thread di Router Pembatas Thread.
- Mengamankan penyiapan perangkat ke jaringan Thread.
- Melakukan ping ke alamat IPv6 di antara node Thread.
- Meneruskan pesan antar-node Thread dengan UDP.
Yang Anda butuhkan
Hardware:
Software:
2. Memulai
- Penginstalan ESP-IDF.
Ikuti Panduan Pemrograman ESP-IDF untuk menginstal lingkungan pengembangan software.
- Buat clone ESP Thread Border Router SDK.
ESP-THREAD-BR adalah SDK ESP Thread Border Router resmi. SDK ini mendukung semua fitur jaringan dasar untuk membangun Router Pembatas Thread dan mengintegrasikan fitur tingkat produk yang lengkap untuk produksi yang cepat.
$ cd <your-local-workspace> $ git clone --recursive https://github.com/espressif/esp-thread-br.git
3. Membangun dan mem-flash
Untuk membuat dan mem-flash file biner ot-cli-ftd di papan ESP dengan modul IEEE 802.15.4, Anda dapat melihat contoh ESP-IDF ot_cli untuk mengetahui detail selengkapnya:
$ cd <your-idf-path>/examples/openthread/ot_cli $ idf.py set-target <your-board-type>
Aktifkan fitur penggabung melalui menuconfig:
$ idf.py menuconfig
Component config > OpenThread > Enable Joiner, lalu build dan flash.
$ idf.py -p <your-local-port> build flash monitor
Untuk membuat dan mem-flash file biner ot-br di ESP Thread Border Router Board, Anda harus membuat file biner RCP terlebih dahulu. File biner RCP ini tidak perlu di-flash secara eksplisit ke perangkat di ESP Thread Border Router Board. File ini akan disertakan dalam file biner Border Router dan di-flash ke chip ESP32-H2 saat booting pertama (atau firmware RCP diubah). Anda dapat membaca dokumen ESP Thread BR untuk mengetahui detail selengkapnya:
$ 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
Aktifkan fitur komisioner melalui menuconfig:
$ idf.py menuconfig
Component config > OpenThread > Enable Commissioner, lalu build dan flash.
$ idf.py -p <your-local-port> build flash monitor
4. Membentuk jaringan Thread di Router Pembatas Thread
Sekarang Anda dapat membentuk jaringan Thread menggunakan command line OpenThread di ESP Thread Border Router Board (BR Commissioner):
## 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
Lakukan set data ini sebagai set data aktif:
> dataset commit active Done
Aktifkan antarmuka IPv6:
> ifconfig up I (59329) OPENTHREAD: Platform UDP bound to port 49153 Done I (59329) OT_STATE: netif up
Operasi protokol Start Thread:
> 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
Setelah beberapa saat, periksa status perangkat. Harus berupa Pemimpin.
> state leader Done >
5. Bergabung ke jaringan Thread melalui networkkey
Dalam codelab ini, dua papan ESP dengan modul IEEE 802.15.4 disiapkan untuk bergabung dengan jaringan yang dibentuk BR. Dalam sesi ini, kita akan menambahkan Board1 ke jaringan.
Dapatkan networkkey dari BR:
## BR Commissioner ## ---------------------- > networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done >
Setel networkkey ini ke satu board ESP (Board1 Joiner) dengan modul IEEE 802.15.4:
## Board1 Joiner ## ---------------------- > dataset networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done
Lakukan set data ini sebagai set data aktif:
> dataset commit active Done
Aktifkan antarmuka IPv6:
> ifconfig up Done I (20308) OT_STATE: netif up
Operasi protokol Start Thread:
> 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
Setelah beberapa saat, periksa status perangkat. Harus berupa Anak.
> state child Done
Tetapkan peran ke Router.
> 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. Bergabung dengan jaringan Thread melalui commissioning aman
Dalam sesi ini, kita akan menambahkan Board2 ke jaringan melalui commissioning keamanan:
Dapatkan PSKc dan panid dari BR Commissioner:
## BR Commissioner ## ---------------------- > pskc 54e7f18d2575014da94db09df29c5df0 Done > panid 0x1444 Done
Konfigurasi informasi jaringan ke Board2:
## Board2 Joiner ## ---------------------- > dataset pskc 54e7f18d2575014da94db09df29c5df0 Done > dataset panid 0x1444 Done
Lakukan set data ini sebagai set data aktif:
## Board2 Joiner ## ---------------------- > dataset commit active Done
Aktifkan antarmuka IPv6:
## Board2 Joiner ## ---------------------- > ifconfig up Done I (29146) OT_STATE: netif up
Dapatkan eui64 dari Board2:
## Board2 Joiner ## ---------------------- > eui64 4831b7fffec02be1 Done
Di BR Commissioner, mulai commissioner dan tentukan eui64 perangkat yang dapat bergabung, beserta Kredensial Joiner, misalnya J01NME. Kredensial Penggabung adalah string khusus perangkat yang terdiri dari karakter alfanumerik huruf besar (0-9 dan A-Y, tidak termasuk I, O, Q, dan Z agar mudah dibaca), dengan panjang antara 6 dan 32 karakter.
## BR Commissioner ## ---------------------- > commissioner start Commissioner: petitioning Done Commissioner: active > commissioner joiner add 4831b7fffec02be1 J01NME Done
Beralih ke Board2 Joiner. Mulai peran penggabung dengan Kredensial Penggabung yang baru saja Anda siapkan di BR Commissioner:
## Board2 Joiner ## ---------------------- > ifconfig up Done > joiner start J01NME Done
Dalam waktu sekitar satu menit, Anda akan mendapatkan konfirmasi bahwa autentikasi berhasil:
## Board2 Joiner ## ---------------------- > Join success
Setelah itu, Anda dapat memulai dan bergabung ke jaringan Thread yang dibentuk oleh BR Commissioner.
Operasi protokol Start Thread:
> 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
Tetapkan peran ke Router.
> 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 >
Sekarang Anda mendapatkan jaringan Thread dengan topologi yang ditunjukkan di bawah:

7. Melakukan ping ke alamat IPv6 antara node Thread
Anda dapat menggunakan perintah ping untuk berkomunikasi antara dua papan. Gunakan perintah ipaddr untuk mencetak alamat IPv6 setiap papan:
## 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
Misalnya, untuk melakukan ping MLE-ID Board2 dari BR Commissioner, Anda dapat menjalankan perintah ini di BR Commissioner:
## 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. Meneruskan pesan antar-node Thread dengan UDP
Dalam sesi ini, Anda akan mempelajari cara mengirim pesan antara dua perangkat Thread. Misalnya, buka udp dan ikat di port 20617 dan dengarkan semua alamat di BR:
## BR Commissioner ## ---------------------- > udp open Done > udp bind :: 20617 I (1298739) OPENTHREAD: Platform UDP bound to port 20617 Done
Kemudian, kirim pesan dari Board1 ke alamat dan port BR MLE-ID 20617:
## Board1 Joiner ## ---------------------- > udp open Done > udp send fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0 20617 ESP
Anda dapat melihat pesan yang diterima di BR:
## BR Commissioner ## ---------------------- 3 bytes from fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 49154 ESP
9. Selamat!
Anda telah membuat jaringan Thread fisik menggunakan papan ESP!

Sekarang Anda tahu:
- Membangun dan mem-flash biner OpenThread CLI ke papan ESP.
- Membangun dan mem-flash router pembatas ke papan ESP Thread Border Router.
- Mengelola node Thread secara manual dengan ESP Monitor dan OpenThread CLI.
- Membentuk jaringan Thread di Router Pembatas Thread.
- Mengamankan penyiapan perangkat ke jaringan Thread.
- Melakukan ping ke alamat IPv6 di antara node Thread.
- Meneruskan pesan antar-node Thread dengan UDP.
Bacaan lebih lanjut
Lihat openthread.io dan GitHub untuk berbagai referensi OpenThread, termasuk:
- Platform yang Didukung — temukan semua platform yang mendukung OpenThread
- Membangun OpenThread — detail lebih lanjut tentang membangun dan mengonfigurasi OpenThread
- Pengantar Thread — mencakup semua konsep Thread yang ditampilkan dalam Codelab ini
Referensi: