Isi kandungan:

Cara Membuat Pelbagai Perbincangan ESP Melalui ESP-SEKARANG Menggunakan Langkah ESP32 dan ESP8266: 8
Cara Membuat Pelbagai Perbincangan ESP Melalui ESP-SEKARANG Menggunakan Langkah ESP32 dan ESP8266: 8

Video: Cara Membuat Pelbagai Perbincangan ESP Melalui ESP-SEKARANG Menggunakan Langkah ESP32 dan ESP8266: 8

Video: Cara Membuat Pelbagai Perbincangan ESP Melalui ESP-SEKARANG Menggunakan Langkah ESP32 dan ESP8266: 8
Video: Apa Itu Arduino Micro Controller (Subtittle) 2024, Julai
Anonim
Cara Membuat Banyak Perbincangan ESP Melalui ESP-SEKARANG Menggunakan ESP32 dan ESP8266
Cara Membuat Banyak Perbincangan ESP Melalui ESP-SEKARANG Menggunakan ESP32 dan ESP8266

Pada projek saya yang sedang berjalan, saya memerlukan banyak ESP untuk bercakap antara satu sama lain tanpa penghala. Untuk melakukan ini, saya akan menggunakan ESP-SEKARANG untuk membuat komunikasi tanpa wayar antara satu sama lain tanpa penghala pada ESP.

Bekalan

Perkara yang saya gunakan:

Modul DEV ESP32

NODEMCU 1.0 (Modul ESP12E)

Langkah 1: Dapatkan Alamat Mac Papan

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

Melalui ESP-sekarang, peranti ESP saling berbual dengan menghantar data ke alamat unik mereka sambil disambungkan ke rangkaian titik akses dalaman yang dibuat setelah menilai esp sekarang.. Oleh itu, tentukan alamat MAC setiap peranti. Yang dilampirkan ialah Tetapan Papan ESP32 dan ESP8266 saya

UNTUK ESP32

#masuk "WiFi.h" // Untuk mengakses keupayaan ESP32 WIFI

persediaan tidak sah () {Serial.begin (115200); Serial.print ("Alamat MAC Papan ESP32:"); Serial.println (WiFi.macAddress ()); // mencetak Alamat MACnya} gelung kosong () {}

UNTUK ESP8266

#include // Perpustakaan yang digunakan untuk mengakses keupayaan WIFI ESP8266

persediaan tidak sah () {Serial.begin (115200); Bersiri.println (); Serial.print ("Alamat MAC Papan ESP8266:"); Serial.println (WiFi.macAddress ()); // mencetak Alamat MACnya} gelung kosong () {}

ALAMAT MAC saya adalah:

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

Langkah 2: Cara Menjadikan ESP-SEKARANG Berfungsi

Berikut adalah gambaran keseluruhan mengenai cara membuatnya berfungsi:

  1. Sertakan perpustakaan esp sekarang dan wifi
  2. Simpan alamat mac penerima ESP
  3. Tentukan struktur data mesej yang dihantar / diterima
  4. Pada persediaan, tetapkan wifi ke mod stesen
  5. Permulaan esp_now
  6. membuat dan mendaftarkan fungsi panggilan balik yang dipanggil setelah menghantar dan menerima data
  7. Untuk Esp8266, tentukan peranannya
  8. daftarkan rakan sebaya atau penerima
  9. Hantar data

Langkah 3: FUNGSI ESP-SEKARANG (ESP32)

esp_now_init (tidak sah)

Kembali:

  • ESP_OK: berjaya
  • ESP_ERR_ESPNOW_INTERNAL: Ralat dalaman

Penerangan:

Memulakan fungsi ESPNOW

esp_now_register_send_cb (cb)

Pulangan:

  • ESP_OK: berjaya
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak dimulakan
  • ESP_ERR_ESPNOW_INTERNAL: ralat dalaman

Parameter:

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

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

      • mac_addr: alamat mac penerima
      • status:

        • 1 = kejayaan
        • 0 = gagal

Penerangan:

Panggil fungsi OnDataSent setelah menghantar data ESPNOW

esp_now_add_peerconst esp_now_peer_info_t * rakan sebaya)

Pulangan:

  • ESP_OK: berjaya
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak dimulakan
  • ESP_ERR_ESPNOW_ARG: argumen tidak sah
  • ESP_ERR_ESPNOW_FULL: senarai rakan sebaya penuh
  • ESP_ERR_ESPNOW_NO_MEM: kehabisan memori
  • ESP_ERR_ESPNOW_EXIST: rakan sebaya telah wujud

Parameter:

  • peer: maklumat rakan sebaya dengan data berikut:

    • uint8_t

      rakan sebaya [ESP_NOW_ETH_ALEN]; ESPNOW alamat MAC rakan sebaya yang juga merupakan alamat MAC stesen atau softap

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW kunci induk tempatan peer yang digunakan untuk menyulitkan data

    • saluran uint8_t

      Saluran Wi-Fi yang digunakan rakan sebaya untuk menghantar / menerima data ESPNOW. Sekiranya nilainya 0, gunakan saluran semasa stesen atau softap yang dihidupkan. Jika tidak, ia mesti ditetapkan sebagai saluran di mana stesen atau softap dihidupkan

    • wifi_interface_t ifidx

      Antara muka Wi-Fi yang digunakan rakan sebaya untuk menghantar / menerima data ESPNOW

    • penyulitan bool

      ESPNOW data yang dihantar / diterima oleh rakan sebaya ini disulitkan atau tidak

    • batal * priv

      ESPNOW data peribadi sebaya

Penerangan:

Tambahkan senarai rakan sebaya

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

Pulangan:

  • ESP_OK: berjaya
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak dimulakan
  • ESP_ERR_ESPNOW_ARG: argumen tidak sah
  • ESP_ERR_ESPNOW_INTERNAL: ralat dalaman
  • ESP_ERR_ESPNOW_NO_MEM: kehabisan memori
  • ESP_ERR_ESPNOW_NOT_FOUND: rakan sebaya tidak dijumpai
  • ESP_ERR_ESPNOW_IF: antara muka WiFi semasa tidak sesuai dengan rakan sebaya

Parameter:

  • peer_addr: alamat MAC rakan sebaya
  • data: data untuk dihantar
  • len: panjang data

Penerangan:

Hantar data ESPNOW. Untuk beberapa kes, ini berlaku:

  • Sekiranya peer_addr bukan NULL, hantarkan data kepada rakan yang alamat MACnya sepadan dengan peer_addr
  • Sekiranya peer_addr adalah NULL, hantarkan data ke semua rakan sebaya yang ditambahkan ke senarai rakan sebaya
  • Panjang maksimum data mestilah kurang dari ESP_NOW_MAX_DATA_LEN
  • Penyangga yang ditunjukkan oleh argumen data tidak perlu berlaku setelah esp_now_send kembali

esp_now_register_recv_cb (cb)

Pulangan:

  • ESP_OK: berjaya
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW tidak dimulakan
  • ESP_ERR_ESPNOW_INTERNAL: ralat dalaman

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:

        data menerima

      • data_len

        panjang bait data

Penerangan:

Panggil fungsi cb setelah menerima data ESPNOW

Langkah 4: FUNGSI ESP-SEKARANG (ESP8266)

KETERANGAN FUNGSI ESP32 ESP8266

int esp_now_init (tidak sah)

Pulangan:

  • 1 = kejayaan
  • 0 = gagal

Penerangan

Memulakan fungsi ESPNOW

int esp_now_set_self_role (peranan u8)

Parameter:

  • ESP_NOW_ROLE_IDLE: penghantaran data tidak dibenarkan.
  • ESP_NOW_ROLE_CONTROLLER: keutamaan diberikan kepada antara muka Sation
  • ESP_NOW_ROLE_SLAVE: keutamaan diberikan kepada antara muka SoftAP
  • ESP_NOW_ROLE_COMBO: keutamaan diberikan kepada SoftAPinterface

Penerangan

Menetapkan Peranan peranti

int esp_now_register_send_cb (cb)

Pulangan:

  • 1 = kejayaan
  • 0 = gagal

Parameter:

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

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

      • mac_addr: alamat mac penerima
      • status:

        • 1 = kejayaan
        • 0 = gagal

Penerangan

Panggil fungsi OnDataSent setelah menghantar data ESPNOW

int esp_now_add_peer (u8 * mac_addr, peranan u8, saluran u8, kekunci u8 *, kunci_8 u8)

Pulangan:

  • 1 = kejayaan
  • 0 = gagal

Parameter:

  • mac_addr

    alamat mac rakan sebaya

  • peranan
  • saluran

    Sekiranya nilainya 0, gunakan saluran semasa stesen atau softap yang dihidupkan. Jika tidak, ia mesti ditetapkan sebagai saluran di mana stesen atau softap dihidupkan

  • * kunci

    kunci untuk penyulitan

  • kunci_len

    panjang kunci

Penerangan:

Tambahkan senarai rakan sebaya ke rakan sebaya

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

Pulangan:

  • 1 = Kejayaan
  • 0 = Gagal

Parameter:

  • peer_addr: alamat MAC rakan sebaya
  • data: data untuk dihantar
  • len: panjang data

Penerangan:

Hantar data ESPNOW. Untuk beberapa kes, ini berlaku:

  • Sekiranya peer_addr bukan NULL, hantarkan data kepada rakan yang alamat MACnya sepadan dengan peer_addr
  • Sekiranya peer_addr adalah NULL, hantarkan data ke semua rakan sebaya yang ditambahkan ke senarai rakan sebaya
  • Panjang maksimum data mestilah kurang dari ESP_NOW_MAX_DATA_LEN
  • Penyangga yang ditunjukkan oleh argumen data tidak perlu berlaku setelah esp_now_send kembali

int esp_now_register_recv_cb (cb)

Pulangan:

  • 1 = Kejayaan
  • 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:

        data menerima

      • data_len

        panjang bait data

Penerangan:

Panggil fungsi cb setelah menerima data ESPNOW

Langkah 5: Komunikasi Sehala (ESP32 Sebagai Pengirim)

ESP32 menghantar data ke ESP8266. dengan kod ini. Tukar siaranAddress ke alamat mac penerima yang sesuai. Tambang adalah A4: CF: 12: C7: 9C: 77

// Tambahkan perpustakaan yang diperlukan

#include // Untuk mengakses fungsi esp sekarang #include // Untuk Menambah Kemampuan Wifi pada ESP32 // simpan Alamat MAC dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Alamat MAC penerima saya / * tentukan jenis data dari pelbagai pemboleh ubah yang disusun dan dinamakan semula semuanya sebagai struct_message * / typedef struct struct_message {char a [32]; int b; apungan c; Rentetan d; bool e; } mesej_struktur; // Buat struct_message yang dipanggil myData struct_message myData; // fungsi dipanggil semasa data dihantar untuk mencetak statusnya tidak sah OnDataSent (const uint8_t * mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nL Status Penghantaran Paket Terakhir: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Kejayaan penghantaran": "Penghantaran Gagal"); } batal persediaan () {// Tetapkan kadar baud untuk komunikasi bersiri dengan ESP Serial.begin (115200); // Tetapkan peranti sebagai Stesen Wi-Fi WiFi.mode (WIFI_STA); // Memulakan wifi // Masukkan ESP-SEKARANG dan mengembalikan statusnya jika (esp_now_init ()! = ESP_OK) {Serial.println ("Kesalahan memulakan ESP -SEKARANG "); kembali; } // panggil fungsi OnDataSent setelah mengirim data ESPNOW esp_now_register_send_cb (OnDataSent); // Daftar rakan sebaya esp_now_peer_info_t peerInfo; // memulakan dan menetapkan maklumat rakan sebaya sebagai penunjuk ke memcpy addres (peerInfo.peer_addr, broadcastAddress, 6); // salin nilai siaranAddress dengan 6 bait ke peerInfo.peer_addr peerInfo.channel = 0; // saluran di mana esp bercakap. 0 bermaksud tidak ditentukan dan data akan dihantar pada saluran semasa. 1-14 adalah saluran yang sah yang sama dengan peranti tempatan peerInfo.encrypt = false; // tidak dienkripsi // Tambahkan peranti ke senarai peranti berpasangan jika (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Gagal menambahkan rakan sebaya"); kembali; }} gelung void () {// Tetapkan nilai untuk menghantar strcpy (myData.a, "INI ADALAH CAJ"); // simpan "INI ADALAH CAJ" untuk mengubah satu "data" saya yang ditentukan sebelumnya myData.b = rawak (1, 20); // simpan nilai rawak myData.c = 1.2; // simpan apungan myData.d = "Hello"; // simpan rentetan myData.e = false; // save bool // Hantar data kurang daripada atau sama 250 bita melalui ESP-SEKARANG dan mengembalikan statusnya esp_err_t hasil = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (hasil == ESP_OK) {Serial.println ("Dihantar dengan kejayaan"); } lain {Serial.println ("Ralat menghantar data"); } kelewatan (2000); }

ESP8266 menerima data dari ESP32 menggunakan kod ini.

// Tambahkan perpustakaan yang diperlukan

#include // Untuk Menambahkan Kemampuan Wifi pada ESP32 #include // Untuk mengakses fungsi esp sekarang / * tentukan jenis data dari pelbagai pemboleh ubah yang disusun dan dinamakan semula semuanya sebagai struct_message * / typedef struct struct_message {char a [32]; int b; apungan c; Rentetan d; bool e; } mesej_struktur; // Buat pembolehubah struct_message yang dipanggil myData struct_message myData; // fungsi dipanggil semasa data diterima dan mencetaknya tidak berlaku OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Byte diterima:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("Rentetan:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Bersiri.println (); } batal persediaan () {// Tetapkan kadar baud untuk komunikasi bersiri dengan ESP Serial.begin (115200); // Tetapkan peranti sebagai Stesen Wi-Fi WiFi.mode (WIFI_STA); // Memulakan wifi // Masukkan ESP-SEKARANG dan mengembalikan statusnya jika (esp_now_init ()! = 0) {Serial.println ("Ralat memulakan ESP-SEKARANG"); kembali; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Mentakrifkan peranan esp ini esp_now_register_recv_cb (OnDataRecv); // panggil fungsi OnDataRecv setelah menerima data ESPNOW} gelung kosong () {}

Langkah 6: Komunikasi Sehala (ESP8266 Sebagai Pengirim)

ESP8266 menghantar data ke ESP32. dengan kod ini. Tukar siaranAddress ke alamat mac penerima yang sesuai. Alamat esp32 saya ialah 30: AE: A4: F5: 03: A4. Untuk fungsi lain untuk esp8266 pergi ke sini

// Tambahkan perpustakaan yang diperlukan

#include // Untuk Menambah Kemampuan Wifi pada ESP32 #include // Untuk mengakses fungsi esp sekarang // simpan Alamat MAC dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * tentukan jenis data dari beberapa pemboleh ubah yang disusun dan dinamakan semula semuanya sebagai struct_message * / typedef struct struct_message {char a [32]; int b; apungan c; Rentetan d; bool e; } mesej_struktur; // Buat pemboleh ubah berstruktur yang disebut myData struct_message myData; // fungsi dipanggil semasa data dihantar dan mencetak statusnya tidak sah OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {Serial.print ("\ r / n Status Penghantaran Paket Terakhir: / t"); Serial.println (sendStatus == 1? "Kejayaan Penghantaran": "Penghantaran Gagal"); } batal persediaan () {// Tetapkan kadar baud untuk komunikasi bersiri dengan ESP Serial.begin (115200); // Tetapkan peranti sebagai Stesen Wi-Fi WiFi.mode (WIFI_STA); // Memulakan wifi // Masukkan ESP-SEKARANG dan mengembalikan statusnya jika (esp_now_init ()) {Serial.println ("Kesalahan memulakan ESP-SEKARANG"); kembali; } esp_now_register_send_cb (OnDataSent); // panggil fungsi OnDataSent setelah mengirim data ESPNOW // Tambahkan peranti ke senarai peranti berpasangan jika (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Gagal menambahkan rakan sebaya"); kembali; }} gelung void () {// Tetapkan nilai untuk menghantar strcpy (myData.a, "INI ADALAH CAJ"); // simpan "INI ADALAH CAJ" untuk mengubah satu "data" saya yang ditentukan sebelumnya myData.b = rawak (1, 20); // simpan nilai rawak myData.c = 1.2; // simpan apungan myData.d = "SP8266"; // simpan rentetan myData.e = false; // save bool // Hantar data kurang dari atau sama 250 bita melalui ESP-SEKARANG dan mengembalikan statusnya hasil int = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Dihantar dengan kejayaan"); } lain {Serial.println ("Ralat menghantar data"); } kelewatan (2000); }

ESP32 menerima data dari ESP8266. dengan kod ini. Untuk fungsi lain adalah pengadil di sini

// Tambahkan perpustakaan yang diperlukan

#include // Untuk mengakses fungsi esp sekarang #include // Untuk Menambah Keupayaan Wifi pada ESP32 / * tentukan jenis data dari pelbagai pemboleh ubah yang disusun dan dinamakan semula semuanya sebagai struct_message * / typedef struct struct_message {char a [32]; int b; apungan c; Rentetan d; bool e; } struct_message; // Buat pembolehubah struct_message yang dipanggil myData struct_message myData; // fungsi dipanggil semasa data diterima dan mencetaknya tidak sah OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Byte diterima:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("Rentetan:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Bersiri.println (); } batal persediaan () {// Tetapkan kadar baud untuk komunikasi bersiri dengan ESP Serial.begin (115200); // Tetapkan peranti sebagai Stesen Wi-Fi WiFi.mode (WIFI_STA); // Memulakan wifi // Masukkan ESP-SEKARANG dan mengembalikan statusnya jika (esp_now_init ()! = 0) {Serial.println ("Ralat memulakan ESP-SEKARANG"); kembali; } esp_now_register_recv_cb (OnDataRecv); // panggil fungsi OnDataRecv setelah menerima data ESPNOW} gelung kosong () {}

Langkah 7: KOMUNIKASI DUA CARA

KOMUNIKASI DUA CARA
KOMUNIKASI DUA CARA
KOMUNIKASI DUA CARA
KOMUNIKASI DUA CARA

ESP32 menghantar data pada permulaan ke ESP8266. ESP8266 mencetak mesej yang diterima dan kemudian balasan yang dicetak oleh ESP32 pada monitor bersirinya.

KOD ESP32

// Tambahkan perpustakaan yang diperlukan

#include // Untuk mengakses fungsi esp sekarang #include // Untuk Menambah Kemampuan Wifi pada ESP32 // simpan Alamat MAC dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Alamat MAC penerima saya / * tentukan jenis data dari pelbagai pemboleh ubah yang disusun dan dinamakan semula semuanya sebagai struct_message * / typedef struct struct_message {char a [32]; int b; apungan c; Rentetan d; bool e; } mesej_struktur; // Buat struct_message yang dipanggil myData struct_message myData; // fungsi dipanggil semasa data dihantar untuk mencetak statusnya tidak sah OnDataSent (const uint8_t * mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / n Status Penghantaran Paket Terakhir: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Kejayaan Penghantaran": "Penghantaran Gagal"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} batal OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Byte diterima:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("Rentetan:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Bersiri.println (); } batal persediaan () {// Tetapkan kadar baud untuk komunikasi bersiri dengan ESP Serial.begin (115200); // Tetapkan peranti sebagai Stesen Wi-Fi WiFi.mode (WIFI_STA); // Memulakan wifi // Masukkan ESP-SEKARANG dan mengembalikan statusnya jika (esp_now_init ()! = ESP_OK) {Serial.println ("Kesalahan memulakan ESP -SEKARANG "); kembali; } // panggil fungsi OnDataSent setelah mengirim data ESPNOW esp_now_register_send_cb (OnDataSent); // Daftar rakan sebaya esp_now_peer_info_t peerInfo; // memulakan dan menetapkan maklumat rakan sebaya sebagai penunjuk ke memcpy addres (peerInfo.peer_addr, broadcastAddress, 6); // salin nilai siaranAddress dengan 6 bait ke peerInfo.peer_addr peerInfo.channel = 0; // saluran di mana esp bercakap. 0 bermaksud tidak ditentukan dan data akan dihantar pada saluran semasa.1-14 adalah saluran yang sah yang sama dengan peranti tempatan peerInfo.encrypt = false; // tidak dienkripsi // Tambahkan peranti ke senarai peranti berpasangan jika (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Gagal menambahkan rakan sebaya"); kembali; } esp_now_register_recv_cb (OnDataRecv); // panggil fungsi OnDataRecv setelah menerima ESPNOW data send_data (); } gelung void () {} void send_data () {Serial.println ("Menghantar"); // Tetapkan nilai untuk menghantar strcpy (myData.a, "INI ADALAH CAJ"); // simpan "INI ADALAH CAJ" untuk mengubah satu "data" saya yang ditentukan sebelumnya myData.b = rawak (1, 20); // simpan nilai rawak myData.c = 1.2; // simpan apungan myData.d = "ESP32"; // simpan rentetan myData.e = false; // save bool // Hantar data kurang daripada atau sama 250 bita melalui ESP-SEKARANG dan mengembalikan statusnya esp_err_t hasil = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (hasil == ESP_OK) {Serial.println ("Dihantar dengan kejayaan");} lain {Serial.println ("Ralat menghantar data"); }}

KOD ESP8266

// Tambahkan perpustakaan yang diperlukan

#include // Untuk Menambah Kemampuan Wifi pada ESP32 #include // Untuk mengakses fungsi esp sekarang // simpan Alamat MAC dalam array bernama broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * tentukan jenis data dari beberapa pemboleh ubah yang disusun dan dinamakan semula semuanya sebagai struct_message * / typedef struct struct_message {char a [32]; int b; apungan c; Rentetan d; bool e; } mesej_struktur; // Buat pembolehubah struct_message yang dipanggil myData struct_message myData; // fungsi dipanggil semasa data diterima dan mencetaknya tidak berlaku OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Byte diterima:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("Rentetan:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Bersiri.println (); hantar_data (); } batal OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {Serial.print ("\ r / n Status Penghantaran Paket Terakhir: / t"); Serial.println (sendStatus == 1? "Kejayaan Penghantaran": "Penghantaran Gagal"); jika (sendStatus! = 1) {send_data (); }} batal send_data () {// Tetapkan nilai untuk menghantar strcpy (myData.a, "INI ADALAH CAJ"); // simpan "INI ADALAH CAJ" untuk mengubah satu "data" saya yang ditentukan sebelumnya myData.b = rawak (1, 20); // simpan nilai rawak myData.c = 1.2; // simpan apungan myData.d = "ESP8266"; // simpan rentetan myData.e = false; // simpan bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } batal persediaan () {// Tetapkan kadar baud untuk komunikasi bersiri dengan ESP Serial.begin (115200); // Tetapkan peranti sebagai Stesen Wi-Fi WiFi.mode (WIFI_STA); // Memulakan wifi // Masukkan ESP-SEKARANG dan mengembalikan statusnya jika (esp_now_init ()! = 0) {Serial.println ("Ralat memulakan ESP-SEKARANG"); kembali; } jika (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Gagal menambahkan rakan sebaya"); 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); // Mentakrifkan peranan esp ini esp_now_register_recv_cb (OnDataRecv); // panggil fungsi OnDataRecv setelah menerima data ESPNOW} gelung kosong () {}

Langkah 8: RUJUKAN

ESPNOW_32_Contohnya

ESPNOW_8266 Contoh

WIFI.h

ESP8266WiFi.h

esp_now.h untuk ESP8266

esp_now.h untuk ESP32

dokumen rasmi esp_now (Penjelasan fungsi yang lebih baik)

Panduan Rasmi ESP-SEKARANG

Disyorkan: