Mulai Mengembangkan Connected Home over IP (CHIP)

1. Pengantar

Matter adalah standar baru dalam Connectivity Standards Alliance (sebelumnya Zigbee Alliance). Standar penyatu industri ini merupakan janji untuk memastikan konektivitas yang andal dan aman—sebuah persetujuan bahwa perangkat akan bekerja bersama-sama dengan lancar, hari ini dan esok

Tujuan standar ini adalah untuk menyederhanakan pengembangan bagi produsen dan meningkatkan kompatibilitas bagi konsumen. Perangkat ini aktif dikembangkan di GitHub, di project Connected Home over IP, yang dibuat berdasarkan keyakinan bersama bahwa perangkat smart home harus aman, andal, dan lancar untuk digunakan. Dengan mengembangkan berdasarkan Internet Protocol (IP), project ini bertujuan untuk memungkinkan komunikasi di seluruh perangkat smart home, aplikasi seluler, dan layanan cloud, serta menentukan sekumpulan teknologi jaringan berbasis IP tertentu untuk sertifikasi perangkat.

Kecuali dinyatakan lain, konten Codelab ini dilisensikan berdasarkan

Apache 2.0 License. Lihat lisensi open source Project CHIP untuk info lebih lanjut.

Codelab ini akan memandu Anda menyiapkan perangkat Wi-Fi menggunakan board pengembangan ESP32, menambahkan fungsi aktif/nonaktif ke perangkat tersebut, dan mengontrolnya dengan antarmuka command line.

Yang akan Anda pelajari

  • Cara menghubungkan dan mengontrol perangkat yang mengaktifkan CHIP.
  • Cara menambahkan lebih banyak fungsi ke aplikasi perangkat contoh.

Yang dibutuhkan

  • Pengetahuan dasar tentang Linux
  • Board pengembangan ESP32
  • Mesin Linux yang sudah menginstal "git"

2. Memulai

Terminal port serial

Anda seharusnya telah memahami cara menghubungkan ke port serial melalui terminal. Codelab ini menggunakan screen dan menyediakan ringkasan penggunaan, tetapi software terminal lainnya dapat digunakan.

Mesin Linux

Codelab ini dirancang untuk menggunakan mesin Linux 64-bit berbasis x86 untuk menjalankan alat chip, dan untuk mem-flash semua board pengembangan. Semua langkah telah diuji di Ubuntu 20.04.2.0 LTS.

Board pengembangan ESP32

Codelab ini menggunakan salah satu board pengembangan ESP32 berikut:

  • ESP32-DevkitC
  • ESP32-WROVER-KIT V4.1
  • Kit Pengembangan IoT Inti Dasar Seri M5Stack ESP32

Anda harus menghubungkan kit pengembangan ke mesin Linux menggunakan kabel USB untuk mem-flash firmware dan mengakses log perangkat.

3. Melakukan cloning repositori

Untuk memeriksa versi kode sumber yang kompatibel dengan dokumen ini, gunakan langkah-langkah berikut untuk meng-clone repositori:

$ git clone git@github.com:project-chip/connectedhomeip.git
$ cd connectedhomeip
$ git checkout 1de2b73bb4123af5f184eac54d1b1d76985b4f62
$ git submodule update --init

Kemudian, ikuti langkah-langkah di bagian "Prasyarat" dan "Persiapan Build" di Dokumentasi Build di GitHub untuk platform Anda. Setelah selesai, lanjutkan membaca di sini.

Menerapkan patch untuk Codelab

Dengan patch ini, kita akan menghapus callback untuk menangani perintah aktif/nonaktif dari CHIP. Nanti kita akan membahasnya dan menambahkannya kembali di setiap langkah.

$ git fetch origin ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96
$ git cherry-pick ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96

4. Membuat Contoh Klien CHIP

Untuk berbicara dengan perangkat CHIP dari mesin host, Anda harus membuat chip-tool untuk host.

Ikuti petunjuk di GitHub untuk mem-build chip-tool.

Jika Anda memiliki chip-tool, Anda akan menggunakannya untuk melakukan beragam operasi seperti mengaktifkan dan menonaktifkan endpoint perangkat.

Baca dokumentasi chip-tool dan kode sumber di GitHub untuk informasi selengkapnya tentang berbagai operasi chip-tool.

5. Membuat Contoh All Clusters

Setelah menyiapkan host dan membuat chip-tool, Anda dapat membuat dan menjalankan Contoh All Clusters untuk ESP32.

Pertama-tama, ubah ke direktori Contoh All Clusters.

$ cd examples/all-clusters-app/esp32

Kemudian, ikuti petunjuk di GitHub sampai Anda diperintahkan untuk menjalankan perintah ini:

$ idf make menuconfig

Saat menjalankan perintah ini, Anda akan melihat editor konfigurasi untuk contohnya.

Mengonfigurasi Tipe Board

Buka DemoDevice Type dan pilih board yang akan Anda buat.

35343b20891ccdfd.png

Menonaktifkan Mode Rendezvous

Menonaktifkan Mode Rendezvous memungkinkan perangkat berkomunikasi dengan chip-tool melalui saluran yang tidak aman. Di menu konfigurasi, buka DemoMode Rendezvous, lalu setel mode ke Bypass:

9db9116fda290c03.png

Mengonfigurasi SSID dan Sandi Wi-Fi

Di menu konfigurasi, buka Component configCHIP Device LayerWiFi Station Options, lalu setel kedua opsi ini untuk jaringan Wi-Fi Anda:

  • SSID Wi-Fi Default
  • Sandi Wi-Fi Default

60b3fe446c502711.png

Melakukan Build dan Flashing

Dengan setelan konfigurasi ini, buat dan flash aplikasi contoh.

Ganti "USB0" di bawah dengan tty yang terpasang pada board pengembangan Anda. Jika Anda memiliki lebih dari satu kabel serial yang dicolokkan ke mesin host, kabel tersebut mungkin memiliki tty yang berbeda (misalnya /dev/ttyUSB1 atau /dev/ttyUSB2). Teruskan penggantian ini di mana pun Anda melihat USB0 di dokumen ini.

$ idf make
$ idf make erase_flash ESPPORT=/dev/ttyUSB0
$ idf make flash ESPPORT=/dev/ttyUSB0

Langkah-langkah di atas juga tersedia di README Contoh All Clusters CHIP.

6. Mengaktifkan perintah OnOff

Buka DeviceCallbacks.cpp yang berada di examples/all-clusters-app/esp32/main di editor mana pun. Setelah terbuka di editor, buka fungsi "DeviceCallbacks::PostAttributeChangeCallback()".

Saat mengirim perintah aktif-nonaktif dari chip-tool, perangkat seharusnya menerima peristiwa ZCL_ON_OFF_CLUSTER_ID. Untuk menangani peristiwa ini, kita menambahkannya ke callback peristiwa yang menangani clusterID yang berbeda.

void DeviceCallbacks::PostAttributeChangeCallback(...)
{
    ...

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        break;

    default:
        ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId);
        break;
    }
    ...
}

Setiap cluster mendukung banyak atribut. Kita ingin mendukung fungsi aktif dan nonaktif yang sederhana. Jadi, periksa attributeId dari ZCL_ON_OFF_ATTRIBUTE_ID pada kode. Seharusnya kode tersebut kosong.

void DeviceCallbacks::PostAttributeChangeCallback(...)
{
    ...

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        if (attributeId == ZCL_ON_OFF_ATTRIBUTE_ID) {

        } else {
          ESP_LOGI(TAG, "Unhandled attribute ID: %d", attributeId);
        }
        break;

    default:
        ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId);
        break;
    }

    ...
}

Tambahkan panggilan fungsi untuk mengontrol status LED pada kit pengembangan jika clusterId dan attributeId sudah benar.

void DeviceCallbacks::PostAttributeChangeCallback(...)
{
    ...

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        if (attributeId == ZCL_ON_OFF_ATTRIBUTE_ID) {
          statusLED1.Set(*value);
        } else {
          ESP_LOGI(TAG, "Unhandled attribute ID: %d", attributeId);
        }
        break;

    default:
        ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId);
        break;
    }

    ...
}

Simpan file, lalu buat aplikasi dan flash kit pengembangan lagi, menggunakan proses yang sama seperti di Melakukan Build dan Flashing di langkah sebelumnya:

$ idf make
$ idf make erase_flash ESPPORT=/dev/ttyUSB0
$ idf make flash ESPPORT=/dev/ttyUSB0

7. Menjalankan Aplikasi Contoh

Hubungkan kabel USB dari board ESP32 ke mesin host Anda, lalu picu terminal serial. Salah satu program yang baik untuk digunakan adalah screen, dan Anda dapat melihat output serial dari ESP32 dengan menjalankan perintah ini:

$ screen /dev/ttyUSB0 115200

Setelah melakukan booting dan terhubung ke Wi-Fi, perangkat akan menampilkan alamat IP-nya di konsol serial. Anda akan memerlukan ini untuk berinteraksi dengan perangkat menggunakan chip-tool.

b8b3b97d230997e0.png

Dalam kasus di atas, alamat IP adalah 192.168.117.134, dan perangkat mendengarkan di port 11097.

Dengan menggunakan port dan alamat IP ini, buat koneksi ke perangkat, dan lewati langkah penyambungan:

$ cd examples/chip-tool
$ ./out/debug/chip-tool pairing bypass 192.168.117.134 11097

Sekarang Anda dapat mengaktifkan/menonaktifkan endpoint 1 dengan perintah berikut:

$ ./out/debug/chip-tool onoff toggle 1

Di ESP32 DevKitC, ini akan mengaktifkan sinyal di GPIO2:

2bc30b2e82b22153.png

Pada gambar di atas, LED merah 1,8V/20mA disambungkan ke GPIO2, dengan Resistor 75 Ohm dalam serial.

Di ESP32-WROVER-KIT, perintah di atas akan mengaktifkan/menonaktifkan LED hijau virtual di kiri atas layar:

8f9ab6a82f525248.png

Di board M5Stack, perintah di atas akan mengaktifkan/menonaktifkan LED hijau virtual di kiri atas layar:

8067715c8175fee9.png

8 Selamat

Anda telah berhasil mengontrol kit pengembangan menggunakan CHIP. Keren!

Dalam codelab ini, Anda telah mempelajari cara:

  • Mengaktifkan fungsi OnOff di kit pengembangan.
  • Mengontrol kit pengembangan dengan alat pengontrol CHIP.

Selengkapnya

Berikut adalah beberapa ide yang dapat Anda lakukan untuk penerapan lebih dalam:

  • Edit file ZAP untuk memperluas kemampuan fungsi.
  • Tambahkan fungsi ZCL_IDENTIFY_GROUPS_ID ke file DeviceCallbacks.cpp
  • Spesifikasi tersebut menentukan Library Cluster ZigBee.
  • Lihat GitHub untuk info terbaru tentang Project CHIP dan buildwithmatter.com untuk info terbaru tentang Matter.