ESP-NOW adalah protokol komunikasi alternatif untuk ESP8266 dan ESP32. Konsep dasar



ESP-NOW adalah protokol WiFi yang disederhanakan untuk mentransfer paket pendek antara pasangan perangkat berpasangan, dikembangkan dan dirilis oleh Espressif pada 2016.07 untuk mikrokontroler ESP8266 dan ESP32. Pada saat yang sama, prosedur tambahan yang terkait dengan dukungan protokol WiFi tidak digunakan, yang mempercepat proses pertukaran paket.

ESP-SEKARANG dapat digunakan di Internet of Things untuk mengontrol sumber cahaya cerdas, relay, soket, perangkat remote control lainnya, menerima informasi dari sensor dan aplikasi lainnya.

ESP-NOW mendukung fitur-fitur berikut


  • Komunikasi terenkripsi dan tidak terenkripsi antara perangkat pasangan.
  • Komunikasi terenkripsi dan tidak terenkripsi campuran antara perangkat pasangan.
  • Transfer hingga 250 byte informasi berguna.
  • Menyiapkan fungsi panggilan balik untuk memberi tahu lapisan aplikasi, khususnya, tentang keberhasilan atau kegagalan transmisi.


ESP-NOW juga memiliki fitur dan batasan berikut.


  • Kecepatan transmisi - tidak lebih dari 1 Mbps pada frekuensi 2,4 GHz, mis. ESP-NOW beroperasi pada frekuensi dan saluran yang sama dengan router WiFi Anda.
  • Protokol WiFi tidak digunakan
  • Mirip dengan protokol berdaya rendah yang digunakan pada mouse nirkabel 2,4 GHz.
  • Hanya pemasangan awal yang diperlukan.
  • Setelah berpasangan, koneksi tidak putus.
  • Siaran tidak didukung - hanya beberapa distribusi untuk pasangan perangkat berpasangan.
  • Maksimal 20 pasangan, termasuk yang terenkripsi, didukung pada satu perangkat, termasuk pasangan terenkripsi.
  • Maksimal 10 pasangan terenkripsi didukung dalam mode Stasiun.
  • Maksimal 6 dalam mode SoftAP atau SoftAP + Station.
  • Enkripsi multicast tidak didukung.

Keamanan


ESP-SEKARANG mengadopsi teknologi bingkai Vendor Aksi IEEE802.11 dengan fungsi IE yang dikembangkan oleh teknologi enkripsi Espressif dan CCMP, menyediakan solusi komunikasi yang aman dan bebas koneksi. Perangkat Wi-Fi mendukung kunci induk primer (PMK) dan beberapa kunci induk lokal (LMK)

  • PMK digunakan untuk mengenkripsi LMK menggunakan algoritma AES-128.
  • Perangkat pasangan LMK digunakan untuk mengenkripsi informasi pengguna menggunakan CCMP. Jumlah maksimum LMK yang berbeda adalah 6. Jika tidak ada LMK yang ditetapkan untuk perangkat yang dipasangkan, data pengguna tidak akan dienkripsi.

Tingkat dasar


Pada tingkat yang lebih rendah dari protokol ESP_NOW, daftar tertaut dipertahankan berisi informasi tentang perangkat lokal dan perangkat pasangan, termasuk alamat MAC dan kunci. ESP-NOW juga menyimpan data yang sering digunakan untuk lapisan aplikasi untuk menghindari overhead memproses ulang daftar tertaut. Informasi tentang perangkat digunakan untuk mengirim dan menerima data dan termasuk

Informasi tentang perangkat lokal:

  • PMK : 16 byte - kunci master utama yang digunakan untuk mengenkripsi kunci pada perangkat yang terpasang (KOK di API) ESP_NOW mendukung PMK secara default, jadi tidak diperlukan konfigurasi. Jika perlu, Anda dapat memverifikasi bahwa nilai PMK cocok dengan perangkat lokal.
  • Mode : 1 byte - mode perangkat lokal yang mendefinisikan antarmuka WiFi pemancar (SoftAP atau STA) ESP-NOW. Mode perangkat pasangan tidak mempengaruhi fungsi apa pun, tetapi hanya menyimpan informasi mode untuk lapisan aplikasi. Dalam mode STA WiFi, hanya Station yang berlaku dan SoftAP WiFi hanya SoftAP.
    Mode operasi perangkat lokal ESP_NOW
    ModekondisiWiFi
    IDLE
    CONTROLLERSTA
    SLAVESoftAP

    COMBO&SoftAP


Informasi perangkat yang dipasangkan (termasuk informasi yang sering digunakan dan informasi pengguna lainnya):

  • LMK : 16 byte - kunci master lokal yang digunakan untuk mengenkripsi kunci informasi yang berguna selama komunikasi dalam pasangan ini.
  • MAC-: 6 β€” , . , Station, MAC- Station.
  • : 1 β€” (SoftAP STA) ESP-NOW.
  • : 1 β€” , , . 0..255. , . . , 0 , ; 1 ~ 14 ; , .

Espressif tidak merekomendasikan penggunaan operasi yang panjang dalam fungsi panggilan balik saat mengirim / mengirim paket, yang mungkin terkait dengan implementasi algoritma menggunakan mekanisme interupsi. Asumsi ini juga didukung oleh masalah yang terkait dengan alokasi memori dinamis dalam fungsi callback, yang diselesaikan dengan penggunaan variabel statis yang disukai, serta ambiguitas menggunakan mekanisme pengecualian MicroPython .

Implementasi asinkron dari proses awal / akhir, pemasangan, penerimaan / pengiriman paket Espressif tidak dijelaskan, yang juga tidak memfasilitasi penerapan ideologi MicroPython asyncio .

Format Paket ESP-NOW


  • Header MAC : 24 byte.
  • Kategori : 1 byte yang menunjukkan kategori pembuat paket. Nilainya diatur (127).
  • ID Organisasi : 3 byte, berisi pengidentifikasi unik, yang merupakan tiga byte pertama dari alamat MAC yang digunakan oleh Espressif. Tetapkan nilai (0x18fe34)
  • Nilai acak : 4 byte, digunakan untuk melindungi data.
  • Data Pembuat Paket : 7-255Bytes

Data pembuat paket berisi bidang-bidang berikut:

  • ID : 1 byte, Set ke (221).
  • Panjang : 1 byte, panjang total ID organisasi, jenis, versi, dan data pengguna.
  • ID Organisasi : 3 byte, berisi pengidentifikasi unik, yang merupakan tiga byte pertama dari alamat MAC yang digunakan oleh Espressif. Tetapkan nilai (0x18fe34)
  • Jenis : 1 byte, protokol ESP-NOW. Tetapkan nilai (4)
  • Versi : 1 byte, versi ESP-NOW saat ini. Terpasang (1)
  • Konten : 0-250 byte data pengguna.
  • FCS : 4 byte, checksum

Karena ESP-NOW tidak menggunakan WiFi, header MAC sedikit berbeda dari header paket standar. Bit FromDS dan ToDS dari bidang FrameControl adalah 0. Alamat tujuan ditentukan dalam bidang alamat pertama. Bidang alamat kedua menunjukkan alamat sumber. Bidang alamat ketiga diatur sebagai alamat broadcast (0xff: 0xff: 0xff: 0xff: 0xff: 0xff).

Algoritma aplikasi dasar


Mulai dan akhiri


Sebelum menggunakan ESP-SEKARANG, Anda disarankan untuk mengatur antarmuka Wi-Fi dalam mode yang diinginkan. Biasanya, antarmuka Station diatur ke CONTROLLER , antarmuka SoftAP untuk SLAVE dan COMBO . Disarankan juga untuk menghentikan Wi-Fi setelah menggunakan ESP-SEKARANG.

Untuk memulai ESP-NOW, panggil esp_now_init () dan esp_now_deinit () untuk menyelesaikan. Ketika esp_now_deinit () dipanggil , semua informasi tentang perangkat berpasangan dihapus.

Mengikat Fungsi Panggilan Balik


Fungsi pemrosesan panggilan saat mengirim paket esp_now_register_send_cb () dapat digunakan untuk menginformasikan tingkat aplikasi pihak pengirim dalam pasangan tentang keberhasilan atau kegagalan transmisi, misalnya, jika informasi pada sub lapisan MAC berhasil ditransmisikan.

Saat menggunakan esp_now_register_send_cb () , pertimbangkan hal berikut:

Dalam pasangan yang ditautkan:

  • Jika lapisan aplikasi tidak menerima paket, tetapi fungsi panggilan balik mengembalikan "sukses", alasannya mungkin:
    - serangan dari perangkat palsu
    - kesalahan instalasi kunci terenkripsi
    - kehilangan paket di tingkat aplikasi Espressif
  • Jika lapisan aplikasi menerima paket, tetapi fungsi panggilan balik mengembalikan kesalahan, penyebabnya mungkin:
    - Saluran sibuk dan ACK tidak diterima.

Dengan banyak komunikasi dengan semua pasangan perangkat lokal:

  • Jika panggilan balik mengembalikan "sukses", itu berarti paket telah berhasil dikirim.
  • Jika fungsi panggilan balik menghasilkan kesalahan, itu berarti bahwa paket tersebut tidak berhasil dikirim.

Fungsi pemrosesan panggilan setelah menerima paket esp_now_register_receive_cb () mengembalikan informasi termasuk alamat MAC dari perangkat pengirim secara berpasangan dan informasi yang berguna. Ini juga dapat digunakan untuk menginformasikan lapisan aplikasi perangkat pengirim yang dipasangkan dengan penerima bahwa paket tersebut berhasil diterima.

Menambahkan sepasang perangkat berpasangan


Sebelum mengirim data, Anda harus menambahkan perangkat ke daftar pasangan perangkat berpasangan dengan memanggil esp_now_add_peer () . Sebelum mengirim data ke grup pasangan mapan, Anda harus menambahkan perangkat dengan alamat MAC multicast. Rentang saluran perangkat pasangan adalah dari 0 hingga 14. Jika saluran diatur ke 0, data akan dikirim pada saluran saat ini. Jika tidak, saluran tersebut harus ditetapkan sebagai saluran tempat perangkat lokal berada.

Keamanan


Jika kunci perlu dienkripsi, Anda dapat memanggil esp_now_set_pmk () untuk mengkonfigurasinya untuk mengatur PMK. Jika PMK tidak diinstal, PMK akan digunakan secara default dan pilih kunci yang sama untuk semua perangkat. Juga atur LMK untuk pasangan yang dipilih.

Mengirim Data dengan Paket ESP-NOW


Gunakan esp_now_send () untuk mengirim data ESP-NOW . Pada saat yang sama, fungsi yang ditetapkan sebelumnya dalam esp_now_register_send_cb () akan mengembalikan ESP_NOW_SEND_SUCCESS saat mengirim fungsi panggilan balik jika data berhasil diterima di tingkat MAC. Jika tidak, ESP_NOW_SEND_FAIL akan kembali . Beberapa alasan dapat menyebabkan ESP-NOW tidak dapat mengirim data. Khususnya,

  • perangkat target tidak ada;
  • saluran perangkat tidak cocok;
  • data hilang selama transmisi.

Tidak dijamin bahwa lapisan aplikasi tentu akan menerima data. Jika perlu, Anda dapat mengirim konfirmasi ketika Anda menerima data ESP-NOW. Jika batas waktu konfirmasi terjadi, transmisi data ESP-NOW harus diulang. Nomor urut juga dapat ditugaskan untuk data ESP-SEKARANG untuk menghapus data duplikat.

Saat mengirim data ESP-NOW melalui esp_now_send (), harap dicatat bahwa tidak lebih dari 250 byte informasi dapat dikirim sekaligus.

PERHATIAN! Interval yang terlalu singkat antara mengirim dua paket ESP-SEKARANG dapat menyebabkan kesalahan dalam pelaksanaan fungsi panggilan balik, oleh karena itu disarankan untuk mengirim paket data ESP-SEKARANG berikutnya setelah fungsi panggilan balik berhasil menyelesaikan pemrosesan pengiriman sebelumnya. Fungsi panggilan balik dikirim dari tugas Wi-Fi prioritas tinggi. Oleh karena itu, tidak disarankan untuk melakukan operasi yang panjang dalam fungsi panggilan balik. Sebagai gantinya, Anda dapat menempatkan data yang diperlukan dalam antrian statis dan memprosesnya dari proses dengan prioritas lebih rendah.

Jika fungsi kirim mengembalikan alamat MAC, maka itu akan dikirim ke perangkat dengan alamat MAC ini. Jika fungsi kirim mengembalikan NULL, maka paket akan dikirim ke semua perangkat yang terhubung dengan pengiriman, yang dapat menyebabkan kegagalan transmisi atau keterlambatan karena kemacetan jaringan.

ESP-NOW Menerima Data


Fungsi panggilan balik juga dimulai dari tugas Wi-Fi. Oleh karena itu, tidak disarankan untuk melakukan operasi yang panjang dalam fungsi panggilan balik. Sebagai gantinya, Anda dapat menempatkan data yang diperlukan dalam antrian statis dan memprosesnya dengan proses prioritas yang lebih rendah.

Kesimpulannya, hal tersebut di atas


Pengalaman saya dalam membangun Espressif IDE dan MicroPython dengan ESP-NOW, menjelaskan kesalahan yang saya temui selama perakitan dan akan memperbaikinya setelah saya mencapai hasil yang stabil. Lalu saya akan membuat deskripsi perpustakaan ESP-NOW di MicroPython dengan kesalahan yang terdeteksi, dan cara untuk mengatasinya. Sayangnya, karena fakta bahwa kode sumber ESP-SEKARANG ditutup dan didistribusikan hanya dalam bentuk biner, pemahaman tentang algoritma protokol ESP-SEKARANG adalah empiris dan ada sejumlah masalah yang telah diidentifikasi, yang tidak selalu ada pilihan untuk mengatasinya secara logis, tetapi secara umum ESP -NOW telah berhasil diterapkan di komunitas pengguna-C dan Python berdasarkan pada lebih dari 300 aplikasi yang disajikan pada GitHub.

Deskripsi Perpustakaan ESP-NOW C oleh Espressif

MicroPython ESP-NOW Deskripsi dan Sumber Terbuka

All Articles