Daftar Isi:

Cara Membuat Multiple ESP Talk Via ESP-NOW Menggunakan ESP32 dan ESP8266: 8 Langkah
Cara Membuat Multiple ESP Talk Via ESP-NOW Menggunakan ESP32 dan ESP8266: 8 Langkah

Video: Cara Membuat Multiple ESP Talk Via ESP-NOW Menggunakan ESP32 dan ESP8266: 8 Langkah

Video: Cara Membuat Multiple ESP Talk Via ESP-NOW Menggunakan ESP32 dan ESP8266: 8 Langkah
Video: 12 Channels ESPNOW Wireless Transmitter Receiver using ESP32 | DIY 👌 2024, Juli
Anonim
Cara Membuat Multiple ESP Talk Via ESP-NOW Menggunakan ESP32 dan ESP8266
Cara Membuat Multiple ESP Talk Via ESP-NOW Menggunakan ESP32 dan ESP8266

Pada proyek saya yang sedang berlangsung, saya memerlukan beberapa ESP untuk berbicara satu sama lain tanpa router. Untuk melakukan ini, saya akan menggunakan ESP-NOW untuk membuat komunikasi nirkabel satu sama lain tanpa router di ESP.

Perlengkapan

Hal-hal yang saya Gunakan:

Modul DEV ESP32

NODEMCU 1.0 (Modul ESP12E)

Langkah 1: Dapatkan Alamat Papan Mac

Dapatkan Alamat Papan Mac
Dapatkan Alamat Papan Mac
Dapatkan Alamat Papan Mac
Dapatkan Alamat Papan Mac

Melalui ESP-sekarang, perangkat ESP berbicara satu sama lain dengan mengirimkan data ke alamat unik mereka saat terhubung ke jaringan titik akses internal yang dibuat saat mengintilasi esp sekarang.. Jadi, tentukan alamat MAC setiap perangkat. Terlampir adalah Pengaturan Papan ESP32 dan ESP8266 saya

UNTUK ESP32

#include "WiFi.h" //Untuk mengakses kemampuan WIFI ESP32

void setup(){ Serial.begin(115200); Serial.print("Alamat MAC Papan ESP32: "); Serial.println(WiFi.macAddress()); //mencetak Alamat MAC-nya } void loop(){}

UNTUK ESP8266

#include //Library yang digunakan untuk mengakses kemampuan WIFI ESP8266

void setup(){ Serial.begin(115200); Serial.println(); Serial.print("Alamat MAC Papan ESP8266: "); Serial.println(WiFi.macAddress()); //mencetak Alamat MAC-nya } void loop(){}

ALAMAT MAC saya adalah:

  • ESP32 - 30:AE:A4:F5:03:A4
  • ESP8266: A4:CF:12:C7:9C:77

Langkah 2: Cara Membuat ESP-NOW Bekerja

Berikut ini ikhtisar tentang cara membuatnya bekerja:

  1. Sertakan perpustakaan esp sekarang dan wifi
  2. Simpan alamat mac penerima ESP
  3. Tentukan struktur data dari pesan yang dikirim/diterima
  4. Pada pengaturan, atur wifi ke mode stasiun
  5. Inisialisasi esp_now
  6. buat dan daftarkan fungsi panggilan balik yang dipanggil setelah mengirim dan menerima data
  7. Untuk Esp8266, tentukan perannya
  8. daftarkan rekan atau penerima esp
  9. Kirim data

Langkah 3: FUNGSI ESP-SEKARANG (ESP32)

esp_now_init(batal)

Kembali:

  • ESP_OK: berhasil
  • ESP_ERR_ESPNOW_INTERNAL: Kesalahan internal

Keterangan:

Inisialisasi fungsi ESPNOW

esp_now_register_send_cb(cb)

Pengembalian:

  • ESP_OK: berhasil
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak diinisialisasi
  • ESP_ERR_ESPNOW_INTERNAL: kesalahan internal

Parameter:

  • cb: nama fungsi panggilan balik setelah mengirim data ESPNOW dengan parameter ini:

    • batalkan cb (const uint8_t * mac_addr, esp_now_send_status_t status)

      • mac_addr: alamat mac penerima
      • status:

        • 1 = sukses
        • 0 = gagal

Keterangan:

Panggil fungsi OnDataSent setelah mengirim data ESPNOW

esp_now_add_peerconst esp_now_peer_info_t *peer)

Pengembalian:

  • ESP_OK: berhasil
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak diinisialisasi
  • ESP_ERR_ESPNOW_ARG: argumen tidak valid
  • ESP_ERR_ESPNOW_FULL: daftar rekan penuh
  • ESP_ERR_ESPNOW_NO_MEM: kehabisan memori
  • ESP_ERR_ESPNOW_EXIST: rekan telah ada

Parameter:

  • peer:informasi rekan dengan data sebagai berikut:

    • uint8_t

      peer_addr[ESP_NOW_ETH_ALEN]; Alamat MAC rekan ESPNOW yang juga merupakan alamat MAC stasiun atau softap

    • uint8_t lmk[ESP_NOW_KEY_LEN]

      ESPNOW peer local master key yang digunakan untuk mengenkripsi data

    • saluran uint8_t

      Saluran Wi-Fi yang digunakan peer untuk mengirim/menerima data ESPNOW. Jika nilainya 0, gunakan saluran saat ini di mana stasiun atau softap aktif. Jika tidak, itu harus disetel sebagai saluran tempat stasiun atau softap aktif

    • wifi_interface_t ifidx

      Antarmuka Wi-Fi yang digunakan rekan untuk mengirim/menerima data ESPNOW

    • enkripsi bool

      Data ESPNOW yang dikirim/diterima oleh rekan ini dienkripsi atau tidak

    • batal *pribadi

      Data pribadi rekan ESPNOW

Keterangan:

Tambahkan daftar peer to peer

esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)

Pengembalian:

  • ESP_OK: berhasil
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak diinisialisasi
  • ESP_ERR_ESPNOW_ARG: argumen tidak valid
  • ESP_ERR_ESPNOW_INTERNAL: kesalahan internal
  • ESP_ERR_ESPNOW_NO_MEM: kehabisan memori
  • ESP_ERR_ESPNOW_NOT_FOUND: rekan tidak ditemukan
  • ESP_ERR_ESPNOW_IF: antarmuka WiFi saat ini tidak cocok dengan peer

Parameter:

  • peer_addr: alamat MAC rekan
  • data: data yang akan dikirim
  • len: panjang data

Keterangan:

Kirim data ESPNOW. Untuk beberapa kasus, ini terjadi:

  • Jika peer_addr bukan NULL, kirim data ke peer yang alamat MAC-nya cocok dengan peer_addr
  • Jika peer_addr adalah NULL, kirim data ke semua peer yang ditambahkan ke daftar peer
  • Panjang maksimum data harus kurang dari ESP_NOW_MAX_DATA_LEN
  • Buffer yang ditunjukkan oleh argumen data tidak harus valid setelah esp_now_send kembali

esp_now_register_recv_cb(cb)

Pengembalian:

  • ESP_OK: berhasil
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak diinisialisasi
  • ESP_ERR_ESPNOW_INTERNAL: kesalahan internal

Parameter:

  • cb: fungsi panggilan balik untuk menerima data ESPNOW

    • void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_addr:

        alamat mac penerima

      • *data:

        menerima data

      • data_len

        panjang byte data

Keterangan:

Panggil fungsi cb setelah menerima data ESPNOW

Langkah 4: FUNGSI ESP-SEKARANG (ESP8266)

DESKRIPSI FUNGSI ESP32 ESP8266

int esp_now_init(batal)

Pengembalian:

  • 1 = sukses
  • 0=gagal

Keterangan

Inisialisasi fungsi ESPNOW

int esp_now_set_self_role(peran u8)

Parameter:

  • ESP_NOW_ROLE_IDLE: transmisi data tidak diperbolehkan.
  • ESP_NOW_ROLE_CONTROLLER: prioritas diberikan ke antarmuka Sation
  • ESP_NOW_ROLE_SLAVE: prioritas diberikan ke antarmuka SoftAP
  • ESP_NOW_ROLE_COMBO: prioritas diberikan ke SoftAPinterface

Keterangan

Setel Peran perangkat

int esp_now_register_send_cb(cb)

Pengembalian:

  • 1 = sukses
  • 0 = gagal

Parameter:

  • cb: nama fungsi panggilan balik setelah mengirim data ESPNOW dengan parameter ini:

    • batalkan cb (const uint8_t * mac_addr, esp_now_send_status_t status)

      • mac_addr: alamat mac penerima
      • status:

        • 1 = sukses
        • 0 = gagal

Keterangan

Panggil fungsi OnDataSent setelah mengirim data ESPNOW

int esp_now_add_peer(u8 *mac_addr, peran u8, saluran u8, u8 *key, u8 key_len)

Pengembalian:

  • 1 = sukses
  • 0 = gagal

Parameter:

  • mac_addr

    alamat mac rekan

  • peran
  • saluran

    Jika nilainya 0, gunakan saluran saat ini di mana stasiun atau softap aktif. Jika tidak, itu harus disetel sebagai saluran tempat stasiun atau softap aktif

  • *kunci

    kunci untuk enkripsi

  • kunci_len

    panjang kunci

Keterangan:

Tambahkan daftar peer to peer

int esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)

Pengembalian:

  • 1 = Sukses
  • 0 = Gagal

Parameter:

  • peer_addr: alamat MAC rekan
  • data: data yang akan dikirim
  • len: panjang data

Keterangan:

Kirim data ESPNOW. Untuk beberapa kasus, ini terjadi:

  • Jika peer_addr bukan NULL, kirim data ke peer yang alamat MAC-nya cocok dengan peer_addr
  • Jika peer_addr adalah NULL, kirim data ke semua peer yang ditambahkan ke daftar peer
  • Panjang maksimum data harus kurang dari ESP_NOW_MAX_DATA_LEN
  • Buffer yang ditunjukkan oleh argumen data tidak harus valid setelah esp_now_send kembali

int esp_now_register_recv_cb(cb)

Pengembalian:

  • 1 = Sukses
  • 0 = Gagal

Parameter:

  • cb: fungsi panggilan balik untuk menerima data ESPNOW

    • void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_addr:

        alamat mac penerima

      • *data:

        menerima data

      • data_len

        panjang byte data

Keterangan:

Panggil fungsi cb setelah menerima data ESPNOW

Langkah 5: Komunikasi Satu Arah (ESP32 Sebagai Pengirim)

ESP32 mengirimkan data ke ESP8266. dengan kode ini. Ubah broadcastAddress ke alamat mac penerima yang sesuai. Milik saya adalah A4:CF:12:C7:9C:77

//Tambahkan perpustakaan yang diperlukan

#include //Untuk mengakses fungsi esp now #include //Untuk Menambahkan Kemampuan Wifi pada ESP32 //menyimpan MAC Address dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //Alamat MAC penerima saya /*mendefinisikan tipe data dari beberapa variabel terstruktur dan menamai semuanya sebagai struct_message*/ typedef struct struct_message { char a[32]; int b; mengapung c; string d; bol e; } struct_message; // Buat struct_message bernama myData struct_message myData; // fungsi dipanggil saat data dikirim untuk mencetak statusnya void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nStatus Pengiriman Paket Terakhir:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Pengiriman Berhasil": "Pengiriman Gagal"); } void setup() { //Mengatur baud rate untuk komunikasi serial dengan ESP Serial.begin(115200); // Setel perangkat sebagai Wi-Fi Station WiFi.mode(WIFI_STA);//Memulai wifi // Init ESP-NOW dan mengembalikan statusnya if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP -SEKARANG"); kembali; } //memanggil fungsi OnDataSent setelah mengirim data ESPNOW esp_now_register_send_cb(OnDataSent); // Daftarkan rekan esp_now_peer_info_t peerInfo; //menginisialisasi dan menetapkan informasi rekan sebagai pointer ke alamat memcpy(peerInfo.peer_addr, broadcastAddress, 6); //salin nilai broadcastAddress dengan 6 byte ke peerInfo.peer_addr peerInfo.channel = 0; // saluran tempat esp berbicara. 0 berarti tidak ditentukan dan data akan dikirim pada saluran saat ini. 1-14 adalah saluran valid yang sama dengan perangkat lokal peerInfo.encrypt = false; //tidak dienkripsi //Tambahkan perangkat ke daftar perangkat yang dipasangkan if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Gagal menambahkan rekan"); kembali; } } void loop() { // Tetapkan nilai untuk mengirim strcpy(myData.a, "INI ADALAH CHAR"); //simpan "INI ADALAH CHAR" ke variabel a dari "data" saya yang didefinisikan sebelumnya myData.b = random(1, 20); //menyimpan nilai acak myData.c = 1.2; //menyimpan float myData.d = "Halo"; //menyimpan string myData.e = false; //menyimpan bool //Mengirim data kurang dari atau sama dengan 250 byte melalui ESP-NOW dan mengembalikan statusnya esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (hasil == ESP_OK) { Serial.println("Terkirim dengan sukses"); } else { Serial.println("Error mengirim data"); } penundaan(2000); }

ESP8266 menerima data dari ESP32 menggunakan kode ini.

//Tambahkan perpustakaan yang diperlukan

#include //Untuk Menambahkan Kemampuan Wifi pada ESP32 #include //Untuk mengakses fungsi esp now /*mendefinisikan tipe data dari beberapa variabel terstruktur dan menamainya kembali sebagai struct_message*/ typedef struct struct_message { char a[32]; int b; mengapung c; string d; bol e; } struct_message; // Buat variabel struct_message bernama myData struct_message myData; // fungsi dipanggil saat data diterima dan mencetaknya void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte yang diterima: "); Serial.println(len); Serial.print("Char: "); Serial.println(Datasaya.a); Serial.print("Int: "); Serial.println(Datasaya.b); Serial.print("Mengambang: "); Serial.println(Datasaya.c); Serial.print("String: "); Serial.println(Datasaya.d); Serial.print("Bool: "); Serial.println(Datasaya.e); Serial.println(); } void setup() { //Mengatur baud rate untuk komunikasi serial dengan ESP Serial.begin(115200); // Atur perangkat sebagai Wi-Fi Station WiFi.mode(WIFI_STA); //Memulai wifi // Init ESP-NOW dan mengembalikan statusnya if (esp_now_init() != 0) { Serial.println("Error initializing ESP-NOW"); kembali; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); //Mendefinisikan peran esp ini esp_now_register_recv_cb(OnDataRecv); //memanggil fungsi OnDataRecv setelah menerima data ESPNOW } void loop() {}

Langkah 6: Komunikasi Satu Arah (ESP8266 Sebagai Pengirim)

ESP8266 mengirimkan data ke ESP32. dengan kode ini. Ubah broadcastAddress ke alamat mac penerima yang sesuai. Alamat esp32 saya adalah 30:AE:A4:F5:03:A4. Untuk fungsi lain untuk esp8266, buka di sini

//Tambahkan perpustakaan yang diperlukan

#include //Untuk Menambahkan Kemampuan Wifi pada ESP32 #include //Untuk mengakses esp now berfungsi //menyimpan MAC Address dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*mendefinisikan tipe data dari beberapa variabel terstruktur dan menamai semuanya sebagai struct_message*/ typedef struct struct_message { char a[32]; int b; mengapung c; string d; bol e; } struct_message; // Buat variabel terstruktur bernama myData struct_message myData; // fungsi dipanggil saat data dikirim dan mencetak statusnya void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nStatus Pengiriman Paket Terakhir:\t"); Serial.println(sendStatus == 1 ? "Pengiriman Berhasil": "Pengiriman Gagal"); } void setup() { //Mengatur baud rate untuk komunikasi serial dengan ESP Serial.begin(115200); // Mengatur perangkat sebagai Wi-Fi Station WiFi.mode(WIFI_STA);//Memulai wifi // Init ESP-NOW dan mengembalikan statusnya if (esp_now_init()) { Serial.println("Error initializing ESP-NOW"); kembali; } esp_now_register_send_cb(OnDataSent); //memanggil fungsi OnDataSent setelah mengirim data ESPNOW //Menambahkan perangkat ke daftar perangkat yang dipasangkan if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)){ Serial.println("Gagal menambahkan rekan"); kembali; } } void loop() { // Tetapkan nilai untuk mengirim strcpy(myData.a, "INI ADALAH CHAR"); //simpan "INI ADALAH CHAR" ke variabel a dari "data" saya yang didefinisikan sebelumnya myData.b = random(1, 20); //menyimpan nilai acak myData.c = 1.2; //menyimpan float myData.d = "SP8266"; //menyimpan string myData.e = false; //menyimpan bool //Mengirim data kurang dari atau sama dengan 250 byte melalui ESP-NOW dan mengembalikan statusnya int result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (esp_now_init() != 0) { Serial.println("Terkirim dengan sukses"); } else { Serial.println("Error mengirim data"); } penundaan(2000); }

ESP32 menerima data dari ESP8266. dengan kode ini. Untuk fungsi lain lihat di sini

//Tambahkan perpustakaan yang diperlukan

#include //Untuk mengakses fungsi esp now #include //Untuk Menambahkan Kemampuan Wifi pada ESP32 /*mendefinisikan tipe data dari beberapa variabel terstruktur dan menamainya kembali sebagai struct_message*/ typedef struct struct_message { char a[32]; int b; mengapung c; string d; bol e; } struct_message; // Buat variabel struct_message bernama myData struct_message myData; // fungsi dipanggil saat data diterima dan mencetaknya void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte yang diterima: "); Serial.println(len); Serial.print("Char: "); Serial.println(Datasaya.a); Serial.print("Int: "); Serial.println(Datasaya.b); Serial.print("Mengambang: "); Serial.println(Datasaya.c); Serial.print("String: "); Serial.println(Datasaya.d); Serial.print("Bool: "); Serial.println(datasaya.e); Serial.println(); } void setup() { //Mengatur baud rate untuk komunikasi serial dengan ESP Serial.begin(115200); // Atur perangkat sebagai Wi-Fi Station WiFi.mode(WIFI_STA); //Memulai wifi // Init ESP-NOW dan mengembalikan statusnya if (esp_now_init() != 0) { Serial.println("Error initializing ESP-NOW"); kembali; } esp_now_register_recv_cb(OnDataRecv); //memanggil fungsi OnDataRecv setelah menerima data ESPNOW } void loop() {}

Langkah 7: KOMUNIKASI DUA ARAH

KOMUNIKASI DUA ARAH
KOMUNIKASI DUA ARAH
KOMUNIKASI DUA ARAH
KOMUNIKASI DUA ARAH

ESP32 mengirimkan data saat startup ke ESP8266. ESP8266 mencetak pesan yang diterima dan kemudian membalas yang dicetak oleh ESP32 pada monitor serialnya.

KODE ESP32

//Tambahkan perpustakaan yang diperlukan

#include //Untuk mengakses fungsi esp now #include //Untuk Menambahkan Kemampuan Wifi pada ESP32 //menyimpan MAC Address dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //Alamat MAC penerima saya /*mendefinisikan tipe data dari beberapa variabel terstruktur dan menamai semuanya sebagai struct_message*/ typedef struct struct_message { char a[32]; int b; mengapung c; string d; bol e; } struct_message; // Buat struct_message bernama myData struct_message myData; // fungsi dipanggil saat data dikirim untuk mencetak statusnya void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nStatus Pengiriman Paket Terakhir:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Pengiriman Berhasil": "Pengiriman Gagal"); if(status!=ESP_NOW_SEND_SUCCESS){send_data();} } void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte yang diterima: "); Serial.println(len); Serial.print("Char: "); Serial.println(Datasaya.a); Serial.print("Int: "); Serial.println(Datasaya.b); Serial.print("Mengambang: "); Serial.println(Datasaya.c); Serial.print("String: "); Serial.println(Datasaya.d); Serial.print("Bool: "); Serial.println(datasaya.e); Serial.println(); } void setup() { //Mengatur baud rate untuk komunikasi serial dengan ESP Serial.begin(115200); // Setel perangkat sebagai Wi-Fi Station WiFi.mode(WIFI_STA);//Memulai wifi // Init ESP-NOW dan mengembalikan statusnya if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP -SEKARANG"); kembali; } //memanggil fungsi OnDataSent setelah mengirimkan data ESPNOW esp_now_register_send_cb(OnDataSent); // Daftarkan rekan esp_now_peer_info_t peerInfo; //menginisialisasi dan menetapkan informasi rekan sebagai pointer ke alamat memcpy(peerInfo.peer_addr, broadcastAddress, 6); //salin nilai broadcastAddress dengan 6 byte ke peerInfo.peer_addr peerInfo.channel = 0; // saluran tempat esp berbicara. 0 berarti tidak ditentukan dan data akan dikirim pada saluran saat ini.1-14 adalah saluran valid yang sama dengan perangkat lokal peerInfo.encrypt = false; //tidak dienkripsi //Tambahkan perangkat ke daftar perangkat yang dipasangkan if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Gagal menambahkan rekan"); kembali; } esp_now_register_recv_cb(OnDataRecv); //memanggil fungsi OnDataRecv setelah menerima data ESPNOW send_data(); } void loop() {} void send_data(){ Serial.println("Mengirim"); // Tetapkan nilai untuk mengirim strcpy(myData.a, "INI ADALAH CHAR"); //simpan "INI ADALAH CHAR" ke variabel a dari "data" saya yang didefinisikan sebelumnya myData.b = random(1, 20); //menyimpan nilai acak myData.c = 1.2; //menyimpan float myData.d = "ESP32"; //menyimpan string myData.e = false; //menyimpan bool //Mengirim data kurang dari atau sama dengan 250 byte melalui ESP-NOW dan mengembalikan statusnya esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (hasil == ESP_OK) { Serial.println("Terkirim dengan sukses");} else { Serial.println("Error mengirim data"); } }

KODE ESP8266

//Tambahkan perpustakaan yang diperlukan

#include //Untuk Menambahkan Kemampuan Wifi pada ESP32 #include //Untuk mengakses esp now berfungsi //menyimpan MAC Address dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*mendefinisikan tipe data dari beberapa variabel terstruktur dan menamai semuanya sebagai struct_message*/ typedef struct struct_message { char a[32]; int b; mengapung c; string d; bol e; } struct_message; // Buat variabel struct_message bernama myData struct_message myData; // fungsi dipanggil saat data diterima dan mencetaknya void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte yang diterima: "); Serial.println(len); Serial.print("Char: "); Serial.println(Datasaya.a); Serial.print("Int: "); Serial.println(Datasaya.b); Serial.print("Mengambang: "); Serial.println(Datasaya.c); Serial.print("String: "); Serial.println(Datasaya.d); Serial.print("Bool: "); Serial.println(datasaya.e); Serial.println(); kirim_data(); } void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nStatus Pengiriman Paket Terakhir:\t"); Serial.println(sendStatus == 1 ? "Pengiriman Berhasil": "Pengiriman Gagal"); if(sendStatus !=1){ send_data(); } } void send_data(){ // Tetapkan nilai untuk mengirim strcpy(myData.a, "INI ADALAH CHAR"); //simpan "INI ADALAH CHAR" ke variabel a dari "data" saya yang didefinisikan sebelumnya myData.b = random(1, 20); //menyimpan nilai acak myData.c = 1.2; //menyimpan float myData.d = "ESP8266"; //menyimpan string myData.e = false; //menyimpan bool esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); } void setup() { //Mengatur baud rate untuk komunikasi serial dengan ESP Serial.begin(115200); // Atur perangkat sebagai Wi-Fi Station WiFi.mode(WIFI_STA); //Memulai wifi // Init ESP-NOW dan mengembalikan statusnya if (esp_now_init() != 0) { Serial.println("Error initializing ESP-NOW"); kembali; } if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)){ Serial.println("Gagal menambahkan rekan"); kembali; } esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_register_send_cb(OnDataSent); esp_now_set_self_role(ESP_NOW_ROLE_COMBO); //Mendefinisikan peran esp ini esp_now_register_recv_cb(OnDataRecv); //memanggil fungsi OnDataRecv setelah menerima data ESPNOW } void loop() {}

Langkah 8: REFERENSI

ESPNOW_32_Contoh

ESPNOW_8266 Contoh

WIFI.h

ESP8266WiFi.h

esp_now.h untuk ESP8266

esp_now.h untuk ESP32

esp_now dokumen resmi (Penjelasan Fungsi yang Lebih Baik)

Panduan Resmi ESP-NOW

Direkomendasikan: