Membangun jaringan Thread dengan board EFR32 Silicon Labs dan OpenThread menggunakan Simplicity Studio v5

1. Pengantar

26b7f4f6b3ea0700.png

OpenThread (OT) Google adalah implementasi Thread open source. Google telah merilis OpenThread untuk membuat teknologi jaringan yang digunakan dalam produk Google Nest tersedia lebih luas bagi developer, guna mempercepat pengembangan produk untuk rumah yang terhubung dan bangunan komersial. Dengan lapisan abstraksi platform yang sempit dan jejak memori yang kecil, OpenThread sangat portabel. Platform ini mendukung desain system-on-chip (SoC) dan network co-processor (NCP).

Spesifikasi Thread mendefinisikan protokol komunikasi nirkabel perangkat-ke-perangkat berbasis IPv6 yang andal, aman, dan berdaya rendah untuk aplikasi rumah dan bangunan komersial.

Silicon Labs telah meningkatkan OpenThread agar dapat bekerja dengan hardware Silicon Labs. Kode sumber ini tersedia di GitHub dan juga sebagai software development kit (SDK) yang diinstal dengan Simplicity Studio 5 (SSv5). SDK ini mencakup snapshot kode sumber GitHub yang telah diuji sepenuhnya. Versi ini mendukung rentang hardware yang lebih luas daripada versi GitHub, dan mencakup dokumentasi serta aplikasi contoh yang tidak tersedia di GitHub.

Panduan ini menjelaskan cara mulai mengembangkan aplikasi OpenThread menggunakan Silicon Labs OpenThread SDK dan Simplicity Studio 5. Gambar di bawah menunjukkan papan (BRD) dan penyiapan hardware dengan Router Batas OT (OTBR) dan dua perangkat Thread yang digunakan dalam codelab.

Penyiapan Hardware EFR32MG

Yang akan Anda pelajari

  • Cara membuat project OpenThread menggunakan Silicon Labs Simplicity Studio IDE.
  • Cara membuat dan mem-flash biner OpenThread CLI ke papan radio Silicon Labs.
  • Cara menyiapkan Raspberry Pi 3B+ atau yang lebih baru sebagai Router Pembatas OpenThread (OTBR) menggunakan Docker.
  • Cara membuat jaringan Thread di OTBR.
  • Penyiapan perangkat di luar band ke jaringan Thread.
  • Cara memverifikasi komunikasi Thread antara node menggunakan perintah ping.

2. Prasyarat

Hardware:

  1. 3 papan radio EFR32MGxx - kombinasi perangkat ini dapat digunakan. Codelab ini menggunakan BRD4166A sebagai RCP dan dua BRD4168A sebagai Perangkat Thread Lengkap.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Jika memulai dari awal, Anda bisa mendapatkan salah satu kit pemula Thread EFR32 yang memiliki papan yang tercantum di atas.
  2. BRD4001A: Papan utama starter nirkabel (WSTK) untuk menghosting papan radio. Kecuali BRD4166A, semua papan radio memerlukan papan utama starter masing-masing. Kabel USB mini untuk menghubungkan dan menyuplai daya ke papan utama atau kabel USB mikro untuk BRD4166A.

WSTK AEM

  1. Raspberry Pi 3B+ atau yang lebih baru dengan image OS Raspbian Stretch Lite atau Raspbian Stretch dengan Desktop yang terhubung ke internet melalui Ethernet. Kita mengonfigurasi ini sebagai OT Border Router.
  2. Sistem Host Windows/Linux/Mac dengan minimal 2 port USB dan koneksi internet. Periksa persyaratan hardware dan OS di SSv5.
  3. Setidaknya satu kabel Ethernet untuk menghubungkan Raspberry Pi ke Internet. WSTK juga mendukung proses debug dan flashing melalui IP, sehingga secara opsional, kabel Ethernet tambahan dapat digunakan untuk menghubungkan WSTK ke sistem host Anda melalui Switch Ethernet.

Software:

  • Simplicity Studio v5 diinstal dan diupdate di sistem Host Windows/Linux/Mac dengan
    • Toolchain GNU ARM
    • Gecko SDK Suite 3.2.0 atau yang lebih baru dan Silicon Labs OpenThread SDK.

3. Penyiapan hardware

Codelab ini dibuat menggunakan

  1. EFR32MG12 BRD4166A Thunderboard Sense 2 seperti yang ditunjukkan di sebelah kiri.
  2. Dua EFR32MG13 BRD4168A seperti yang ditunjukkan di sebelah kanan.
  3. Simplicity Studio v5 diinstal di macOS Catalina 10.15.7 dengan
    1. Gecko SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

Hubungkan setiap papan utama Wireless Starter Kit ke komputer host melalui USB seperti yang ditunjukkan pada gambar di bawah. Koneksi ini akan memungkinkan analisis jaringan dan pemrograman RCP serta perangkat akhir. Pertama-tama kita akan menggunakan komputer host untuk memprogram BRD4166A dengan firmware ot-rcp dan akhirnya menghubungkannya ke Raspberry Pi. Secara opsional, perangkat akhir dapat dihubungkan ke komputer host melalui switch Ethernet umum. Kit pemula juga mendukung pemrograman dan analisis jaringan melalui IPv4.

Koneksi

4. Penyiapan firmware

Ada dua cara untuk memulai. Kedua opsi tersebut memungkinkan Anda mem-flash firmware yang diperlukan untuk codelab ini.

  1. Project: (Direkomendasikan) Buat, bangun, dan flash aplikasi contoh. Opsi ini memungkinkan Anda menyesuaikan aplikasi dalam project.
  2. Demo: (Opsional) Flash demo bawaan langsung di papan radio untuk salah satu aplikasi contoh. Pengguna dianjurkan untuk mencoba penyiapan firmware Demos sebagai latihan opsional. Lihat bagian "Penyiapan firmware opsional - Demo" di akhir codelab ini untuk mengetahui detailnya.

Kita akan menggunakan metode berbasis project untuk codelab ini.

Membuat project menggunakan contoh

Kita akan membuat dua project. Project ot-rcp untuk BRD4166A dan project ot-cli-ftd untuk dua BRD4168A. Ikuti langkah-langkah berikut dan pilih aplikasi contoh yang sesuai untuk papan Anda.

  1. Buka menu File Studio, lalu pilih New > Silicon Labs Project Wizard. Dialog Target, SDK, dan Toolchain Selection akan terbuka. Jangan mengubah IDE Simplicity / toolchain GNU default yang didukung oleh OpenThread. Klik Berikutnya.
    • Target board: Menampilkan radio board yang dipilih (BRD4168A) beserta main board (BRD4001A)
    • Perangkat Target: Kolom ini menampilkan chip mikrokontroler (MCU) di perangkat. BRD4168A memiliki MCU EFR32MG13 onboard.
    • SDK: Di sini Anda dapat memilih versi SDK OT yang sedang Anda gunakan. Informasi rangkaian mencakup tag SDK dan build OpenThread Silicon Labs, misalnya Platform 4.0.1.0 dan OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: Toolchain yang akan digunakan untuk mengompilasi project OT. Kita menggunakan GNU ARM.

Wizard project baru

  1. Dialog Example Project Selection akan terbuka. Anda akan melihat daftar project Contoh. Gunakan filter kata kunci dan Jenis Teknologi Thread untuk menelusuri contoh tertentu. Pastikan untuk mencatat nomor versi Gecko SDK Suite. Anda akan memerlukan tag versi ini saat menyiapkan Raspberry Pi sebagai Router Pembatas. Pilih ot-cli-ftd, lalu klik BERIKUTNYA.

Langkah 2 wizard project baru

  1. Dialog Project Configuration akan terbuka. Di sini, Anda dapat mengganti nama project, mengubah lokasi file project default, dan menentukan apakah Anda akan menautkan atau menyalin file project. File project tertaut mengarah ke SDK dan setiap modifikasi yang Anda lakukan akan dilakukan di SDK dan digunakan untuk project mendatang. Menyalin sumber project, memungkinkan Anda mengedit salinan lokal project sehingga file SDK tetap utuh. ‘Link sdk and copy project sources' adalah pilihan default dan yang direkomendasikan. Klik SELESAI.

Langkah 3 wizard project baru

  1. Simplicity IDE Perspective akan terbuka dengan Project Configurator yang terbuka di tab OVERVIEW.

Ringkasan project

Project dikonfigurasi dari tab Software Components dengan menginstal dan meng-uninstal komponen, serta mengonfigurasi komponen yang diinstal. Komponen yang diinstal diperiksa. Klik Installed Components untuk melihat daftar komponen yang difilter yang diinstal oleh contoh aplikasi. Setiap perubahan yang Anda buat akan disimpan otomatis, dan file project akan dibuat otomatis. Progres ditampilkan di sudut kanan bawah perspektif Simplicity IDE.

Komponen Software

Untuk demo ini, kita akan menggunakan konfigurasi default aplikasi contoh. Ulangi langkah-langkah di atas untuk membuat project ot-rcp untuk papan lainnya.

Membangun dan Mem-flash project

Buat dan flash project ot-rcp dan ot-cli-ftd.

  1. Setelah project dikonfigurasi, klik Build control (ikon palu) di toolbar atas. Atau, Anda dapat mengklik kanan project dan mengklik build project.

Tombol Buat project

  1. Progres ditampilkan di Console dan status progres di kanan bawah. Semua error atau peringatan yang terkait dengan project Anda juga akan muncul di jendela output ini.

Jendela output build project

  1. Image biner dibuat setelah build project berhasil. Anda dapat mem-flash image biner dari tampilan Project Explorer. Temukan file .bin, .hex, atau .s37 di subdirektori compiler. Klik kanan file, lalu pilih Flash to Device. Jika Anda memiliki lebih dari satu perangkat yang terhubung, pilih perangkat yang akan diprogram, lalu klik OK. Flash Programmer akan terbuka dengan jalur file yang telah diisi. Klik PROGRAM.

Flash

5. Ringkasan penyiapan firmware

Pada tahap ini, Anda seharusnya telah membuat, mengompilasi, dan mem-flash firmware yang sesuai di papan radio. Setelah ot-rcp di-flash ke BRD4166A, putuskan koneksinya dari sistem host dan hubungkan board ini ke Raspberry Pi.

Setelah menyelesaikan bagian ini, penyiapan hardware jaringan Thread Anda akan terlihat seperti ini.

Penyiapan EFR32MG

6. Menyiapkan Konsol serial untuk perangkat ot-cli-ftd

Untuk meluncurkan antarmuka Konsol, di perspektif Simplicity IDE, klik kanan perangkat J-Link Anda di Devices View / Debug Adapters Window. Pilih Launch Console. Untuk mendapatkan perintah di Konsol, pilih tab Serial 1 dan tekan Enter. Periksa status node FTD.

Tampilan Konsol FTD Studio

Anda akan melihat bahwa kita belum memiliki konsol untuk ot-rcp. Pada langkah berikutnya, kita akan mengonfigurasi Raspberry Pi sebagai router perbatasan OT dan menyiapkan konsol untuk ot-rcp.

7. Menyiapkan Raspberry Pi sebagai Border Router

Silicon Labs merekomendasikan deployment penampung Docker perusahaan dengan OTBR. Menjalankan OTBR dalam container memungkinkan pembuatan artefak yang mudah di-deploy serta pembuatan prototipe dan pengujian pengembangan yang cepat.

Image OTBR Silicon Labs dihosting di DockerHub siliconlabsinc, dengan tag. Setiap tag sesuai dengan versi GSDK:

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags

Container Docker harus digunakan dengan RCP yang dibangun menggunakan Simplicity Studio 5 untuk rilis tertentu. Pastikan untuk mencocokkan versi tag penampung dengan versi GSDK yang Anda gunakan untuk pengujian. Misalnya, jika versi GDSK Anda adalah Gecko SDK Suite v4.0.1 (140) saat Anda memilih ot-rcp dari jendela Example Project Selection, gunakan gambar siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Versi GSDK

Penyiapan Raspberry Pi

  1. Di kartu SD Anda, pastikan Anda mem-flash image OS Raspbian Stretch Lite atau Raspbian Stretch with Desktop.
  2. Anda dapat menggunakan SSH di Raspberry Pi atau memilih untuk bekerja langsung dengan Desktop Raspbian. Buka terminal.
  3. Pastikan untuk mengupdate repositori lokal dan pengelola paket Anda (apt-get update dan apt-get upgrade sebelum menginstal Docker).

Menginstal image Docker

  1. Instal Docker dengan perintah berikut di RPi Anda.
    curl -sSL https://get.docker.com | sh
    
  2. Setelah selesai, Anda dapat mengubah setelan pengguna Docker agar tidak memerlukan sudo sebelum setiap perintah. Perlu mulai ulang.
    sudo usermod -aG docker $USER
    
  3. Keluarkan perintah berikut untuk menginstal container. Perhatikan bahwa Anda hanya dapat menjalankan satu container Border Router dalam satu waktu dengan RCP. Selain itu, pastikan untuk mencocokkan versi GSDK Simplicity Studio Anda dengan image Docker yang benar. Misalnya, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Mengonfigurasi dan menjalankan Docker

  1. Anda perlu mengonfigurasi port TTY yang ingin digunakan untuk OTBR agar menghubungkan RCP saat startup. Cari port TTY perangkat RCP Anda. Cara termudah untuk melakukannya adalah dengan mencari entri /tty/dev... setelah RCP terhubung. Nilainya umumnya adalah /dev/ttyUSB0 atau /dev/ttyACM0.
  2. Jalankan penginstalan Docker Anda dengan perintah berikut. Pastikan untuk mengganti nama image Docker Anda dengan versi GSDK yang cocok. Misalnya, gsdk-4.0.1:
    docker run -d --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 siliconlabsinc/openthread-border-router:gsdk-4.0.1 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -d memastikan bahwa container berjalan dalam mode terpisah.
    • Anda dapat melihat log yang sedang berjalan untuk container kapan saja menggunakan perintah docker logs.
    • --name akan tetap ada hingga penampung docker ditutup (atau dihapus) dengan benar.
    • Port 8080 menunjukkan port server web yang menghosting halaman web pengelolaan Router Batas.
    • ?uart-baudrate=460800 diperlukan dalam opsi URL radio untuk mengatasi masalah fragmentasi / penggabungan ulang melalui UART, dengan operasi yang mahal seperti DTLS dengan paket IPv6 yang panjang.

Berinteraksi dengan node RCP

Setelah docker berjalan, Anda dapat berkomunikasi dengan node RCP melalui shell interaktif menggunakan perintah ini. Periksa status node RCP.

$ docker exec -ti otbr sh -c "sudo ot-ctl"
> state 
disabled
Done

Anda bisa mendapatkan daftar ID penampung yang sedang berjalan

$ docker ps -aq

Anda dapat memeriksa jendela yang menjalankan container Docker OTBR untuk menjalankan output log Border Router atau mengikuti log container sebagai berikut:

$ docker logs [container-id] -f

Secara opsional, Anda dapat menghentikan, menghapus, atau mengakhiri image jika container Docker dimuat dengan benar.

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

Opsional: Untuk keluar dari shell, gunakan CNTL + C.

Pada tahap ini, Anda akan memiliki 3 konsol.

  1. Dua konsol ot-cli-ftd di Simplicity Studio yang disiapkan sebagai perangkat Thread Lengkap.
  2. Satu shell interaktif ot-ctl di Raspberry Pi yang disiapkan sebagai router perbatasan OT.

Sekarang kita siap membentuk jaringan Thread.

8. Membuat jaringan Thread

Menyiapkan RCP

Untuk membuat jaringan, kita mulai dengan shell ot-ctl di OTBR yang digunakan untuk berkomunikasi dengan node RCP. Masukkan perintah berikut dalam urutan seperti yang ditunjukkan di bawah:

Indeks

Perintah

Deskripsi perintah

Respons yang Diharapkan

1

dataset init new

Buat konfigurasi jaringan baru.

Selesai

2

dataset commit active

Lakukan penerapan set data baru ke Set Data Operasional Aktif.

Selesai

3

ifconfig up

Aktifkan antarmuka Thread.

Selesai

4

thread start

Aktifkan dan lampirkan operasi protokol Thread.

Selesai

Tunggu 10 detik hingga antarmuka thread aktif.

5

state

Periksa status perangkat. Perangkat ini harus menjadi pemimpin.
Kemungkinan status lainnya: offline, dinonaktifkan, terlepas,
turunan, router, atau pemimpin

Leader
Selesai

6

dataset

Lihat konfigurasi jaringan.
Nilai Anda akan berbeda dengan codelab ini.
Catat channel, kunci jaringan,
nama jaringan, dan PAN ID.

Active Timestamp: 1
Channel: 20
Channel Mask: 0x07fff800
Ext PAN ID: 39ba71f7fc367160
Mesh Local Prefix: fd5c:c6b:3a17:40b9::/64
Network Key: 81ae2c2c17368d585dee71eaa8cf1e90
Network Name: OpenThread-008c
PAN ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Security Policy: 0, onrcb
Done

Kita akan menggunakan nomor channel dan kunci jaringan di ot-cli-ftd untuk menggabungkan dua FTD ke jaringan thread ini.

Menyiapkan dan menambahkan FTD ke jaringan Thread kami (metode di luar band)

Dengan metode out-of-band, kita mengetahui semua informasi keamanan dan menambahkan node secara manual. Di konsol Simplicity, tambahkan kedua FTD ke jaringan kita menggunakan perintah berikut dalam urutan yang ditunjukkan di bawah.

Indeks

Perintah

Deskripsi perintah

Respons yang Diharapkan

1

dataset channel 20

Tetapkan saluran yang digunakan oleh OTBR.

Selesai

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Hanya Kunci Jaringan yang diperlukan agar perangkat dapat terhubung ke jaringan Thread.

Selesai

3

dataset commit active

Lakukan penerapan set data baru ke Set Data Operasional Aktif.

Selesai

4

ifconfig up

Aktifkan antarmuka Thread.

Selesai

5

thread start

Aktifkan dan lampirkan operasi protokol Thread.

Selesai

Tunggu 20 detik saat perangkat bergabung dan mengonfigurasi dirinya sendiri.

6

state

Melihat konfigurasi jaringan.

child
Done

Komunikasi antara perangkat Thread

Kita akan menggunakan perintah ping untuk memeriksa apakah perangkat dapat berkomunikasi satu sama lain. Untuk menggunakan perintah ping, kita memerlukan alamat IPv6 perangkat. Ini dapat diperoleh menggunakan perintah ipaddr.

> ipaddr
fd5c:c6b:3a17:40b9:0:ff:fe00:fc00		# Leader Anycast Locator (ALOC)
fd5c:c6b:3a17:40b9:0:ff:fe00:1800		# Routing Locator (RLOC)
fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03		# Mesh-Local EID (ML-EID)
fe80:0:0:0:c449:ca4a:101f:5d16			# Link-Local Address (LLA)

Dari kedua FTD, ping OTBR menggunakan alamat RLOC OTBR.

> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800
Done
> 
> 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms
16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms

Respons menunjukkan bahwa payload diterima dan komunikasi berhasil. Ulangi proses untuk melakukan ping ke FTD dari OTBR.

9. Selamat

Anda telah membuat jaringan Thread.

Sekarang Anda tahu:

  • Cara membuat project OpenThread menggunakan Silicon Labs Simplicity Studio IDE.
  • Cara membuat dan mem-flash biner OpenThread CLI ke papan radio Silicon Labs.
  • Cara menyiapkan Raspberry Pi 3B+ atau yang lebih baru sebagai Router Pembatas OpenThread (OTBR) menggunakan Docker.
  • Cara membuat jaringan Thread di OTBR.
  • Penyiapan perangkat di luar band ke jaringan Thread.
  • Cara memverifikasi komunikasi Thread antara node menggunakan perintah ping.

Bacaan lebih lanjut

Lihat openthread.io dan GitHub untuk berbagai referensi OpenThread, termasuk:

10. Penyiapan firmware opsional - Demo

Demo adalah image firmware bawaan yang siap didownload ke perangkat yang kompatibel. Cara tercepat untuk mengetahui apakah demo tersedia untuk komponen Anda di Simplicity Studio adalah dengan mengklik komponen Anda di tampilan Debug Adapters, lalu membuka tab EXAMPLE PROJECTS & DEMOS di Launcher Perspective. Nonaktifkan filter Project Contoh dan centang kotak pilihan Thread di bagian Jenis Teknologi.

Demo Studio

Image aplikasi demo yang telah dikompilasi sebelumnya dan disediakan dengan OpenThread SDK kompatibel dengan papan berikut:

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

Daftar ini dapat diperbarui dalam rilis SDK mendatang untuk menyertakan lebih banyak papan radio. Lihat catatan rilis Silicon Labs OpenThread SDK di bagian Dokumentasi untuk mengetahui daftar lengkap komponen yang didukung.

Flash demo berikut di papan masing-masing. Untuk mem-flash, pilih board Anda di bagian Debug Adapter di sebelah kiri, lalu klik RUN untuk aplikasi contoh yang sesuai. Jendela pop-up akan menampilkan progres flash.

  1. BRD4166A: ot-rcp — Perangkat ini akan berfungsi sebagai Radio Co Processor ke Router Pembatas OT. Kita akan menggunakan perangkat ini untuk membuat jaringan Thread dan mengaktifkan dua perangkat lainnya di jaringan Thread. Sebagai Router Pembatas, perangkat ini juga berfungsi sebagai gateway bagi perangkat di jaringan Thread untuk berkomunikasi melalui internet.
  2. Dua BRD4168A: ot-cli-ftd — Kedua perangkat ini akan bertindak sebagai Perangkat Thread Lengkap. Perangkat akan bergabung dengan jaringan Thread yang dibuat oleh OTBR.