Sisukord:

Kuidas teha mitu ESP-kõnet ESP-NOW kaudu, kasutades ESP32 ja ESP8266: 8 sammu
Kuidas teha mitu ESP-kõnet ESP-NOW kaudu, kasutades ESP32 ja ESP8266: 8 sammu

Video: Kuidas teha mitu ESP-kõnet ESP-NOW kaudu, kasutades ESP32 ja ESP8266: 8 sammu

Video: Kuidas teha mitu ESP-kõnet ESP-NOW kaudu, kasutades ESP32 ja ESP8266: 8 sammu
Video: 🚀 AMAZON 2.0 – VEEBIPOOD nullist 6 tunniga [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, Juuli
Anonim
Kuidas teha mitu ESP-kõnet ESP-NOW kaudu, kasutades ESP32 ja ESP8266
Kuidas teha mitu ESP-kõnet ESP-NOW kaudu, kasutades ESP32 ja ESP8266

Oma käimasoleva projekti puhul on mul vaja mitu ESP -d, et rääkida üksteisega ilma ruuterita. Selleks kasutan ESP-NOW-d, et juhtmeta suhelda ilma ESP-ruuterita.

Tarvikud

Asjad, mida kasutasin:

ESP32 DEV moodul

NODEMCU 1.0 (ESP12E moodul)

Samm: hankige juhatuse Maci aadress

Hankige juhatuse Maci aadress
Hankige juhatuse Maci aadress
Hankige juhatuse Maci aadress
Hankige juhatuse Maci aadress

ESP-now kaudu räägivad ESP-seadmed üksteisega, saates andmed oma unikaalsele aadressile, olles samal ajal ühendatud esp-seadme intiiliseerimise ajal loodud sisemise juurdepääsupunktivõrguga.. Seega määrake iga seadme MAC -aadress. Lisatud on minu ESP32 ja ESP8266 juhatuse seaded

ESP32 jaoks

#include "WiFi.h" // ESP32 WIFI võimalustele juurdepääsuks

void setup () {Serial.begin (115200); Serial.print ("ESP32 juhatuse MAC -aadress:"); Serial.println (WiFi.macAddress ()); // prindib oma MAC -aadressi} void loop () {}

ESP8266 jaoks

#include // Raamatukogu, mida kasutatakse juurdepääsuks ESP8266 WIFI võimalustele

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // prindib oma MAC -aadressi} void loop () {}

Minu MAC -AADRESS on:

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

Samm: kuidas panna ESP-NOW tööle

Siin on ülevaade selle toimimisest:

  1. Kaasa esp kohe ja WiFi -teegid
  2. Salvestage vastuvõtja ESP mac -aadress
  3. Määrake saadetud/vastuvõetud sõnumi andmestruktuur
  4. Seadistamisel seadke wifi jaamarežiimi
  5. Initsialiseeri esp_now
  6. helistage ja registreerige pärast andmete saatmist ja vastuvõtmist tagasi helistamise funktsioon
  7. Esp8266 puhul määrake selle roll
  8. registreerige eakaaslane või saaja esp
  9. Andmete saatmine

3. toiming: ESP-NOW FUNKTSIOONID (ESP32)

esp_now_init (tühine)

Tagasi:

  • ESP_OK: õnnestub
  • ESP_ERR_ESPNOW_INTERNAL: Sisemine viga

Kirjeldus:

ESPNOW funktsiooni initsialiseerimine

esp_now_register_send_cb (cb)

Tagastab:

  • ESP_OK: õnnestub
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW pole lähtestatud
  • ESP_ERR_ESPNOW_INTERNAL: sisemine viga

Parameetrid:

  • cb: tagasihelistamisfunktsiooni nimi pärast ESPNOW andmete saatmist järgmiste parameetritega:

    • tühine cb (const uint8_t *mac_addr, esp_now_send_status_t olek)

      • mac_addr: vastuvõtja mac -aadress
      • staatus:

        • 1 = edu
        • 0 = ebaõnnestumine

Kirjeldus:

Pärast ESPNOW andmete saatmist helistage funktsioonile OnDataSent

esp_now_add_peerconst esp_now_peer_info_t *eakaaslane)

Tagastab:

  • ESP_OK: õnnestub
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW pole lähtestatud
  • ESP_ERR_ESPNOW_ARG: vale argument
  • ESP_ERR_ESPNOW_FULL: kaaslaste nimekiri on täis
  • ESP_ERR_ESPNOW_NO_MEM: mälu on otsas
  • ESP_ERR_ESPNOW_EXIST: kaaslane on olemas

Parameetrid:

  • peer: vastastikune teave järgmiste andmetega:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW võrgu MAC -aadress, mis on ühtlasi jaama või softi MAC -aadress

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW võrdõiguslik kohalik peavõti, mida kasutatakse andmete krüptimiseks

    • kanal uint8_t

      WiFi-kanal, mida kolleeg kasutab ESPNOW-andmete saatmiseks/vastuvõtmiseks. Kui väärtus on 0, kasutage praegust kanalit, mis jaam või diivan on sisse lülitatud. Vastasel juhul tuleb see seadistada kanaliks, millel jaam või diivan on sisse lülitatud

    • wifi_interface_t ifidx

      WiFi-liides, mida kolleeg kasutab ESPNOW andmete saatmiseks/vastuvõtmiseks

    • bool krüptida

      ESPNOW andmed, mida see kolleeg saadab/võtab vastu, on krüptitud või mitte

    • tühine *privaat

      ESPNOW sarnased privaatsed andmed

Kirjeldus:

Lisage kaaslaste nimekirja eakaaslane

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

Tagastab:

  • ESP_OK: õnnestub
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW pole lähtestatud
  • ESP_ERR_ESPNOW_ARG: vale argument
  • ESP_ERR_ESPNOW_INTERNAL: sisemine viga
  • ESP_ERR_ESPNOW_NO_MEM: mälu on otsas
  • ESP_ERR_ESPNOW_NOT_FOUND: sarnast ei leitud
  • ESP_ERR_ESPNOW_IF: praegune WiFi -liides ei vasta kaaslaste omale

Parameetrid:

  • peer_addr: peer MAC -aadress
  • andmed: andmed, mida saata
  • len: andmete pikkus

Kirjeldus:

ESPNOW andmete saatmine. Mõnel juhul juhtub see:

  • Kui peer_addr ei ole NULL, saatke andmed samaealisele, kelle MAC -aadress vastab peer_addr
  • Kui peer_addr on NULL, saatke andmed kõigile eakaaslaste loendisse lisatud eakaaslastele
  • Andmete maksimaalne pikkus peab olema väiksem kui ESP_NOW_MAX_DATA_LEN
  • Puhver, millele viitab andmete argument, ei pea pärast esp_now_send tagastamist kehtima

esp_now_register_recv_cb (cb)

Tagastab:

  • ESP_OK: õnnestub
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW pole lähtestatud
  • ESP_ERR_ESPNOW_INTERNAL: sisemine viga

Parameetrid:

  • cb: tagasihelistamisfunktsioon ESPNOW andmete vastuvõtmiseks

    • tühine cb (const uint8_t *mac_addr, const uint8_t *andmed, int data_len)

      • mac_addr:

        vastuvõtja mac aadress

      • *andmed:

        andmeid vastu võtta

      • data_len

        andmebaidi pikkus

Kirjeldus:

Pärast ESPNOW andmete saamist helistage funktsioonile cb

4. samm: ESP-NOW FUNKTSIOONID (ESP8266)

FUNKTSIOONIDE KIRJELDUS ESP32 ESP8266

int esp_now_init (tühine)

Tagastab:

  • 1 = edu
  • 0 = ebaõnnestumine

Kirjeldus

ESPNOW funktsiooni initsialiseerimine

int esp_now_set_self_role (roll u8)

Parameetrid:

  • ESP_NOW_ROLE_IDLE: andmete edastamine pole lubatud.
  • ESP_NOW_ROLE_CONTROLLER: prioriteet on Sationi liides
  • ESP_NOW_ROLE_SLAVE: eelistatakse SoftAP -liidest
  • ESP_NOW_ROLE_COMBO: prioriteet on SoftAPinterface

Kirjeldus

Määrab seadme rolli

int esp_now_register_send_cb (cb)

Tagastab:

  • 1 = edu
  • 0 = ebaõnnestumine

Parameetrid:

  • cb: tagasihelistamisfunktsiooni nimi pärast ESPNOW andmete saatmist järgmiste parameetritega:

    • tühine cb (const uint8_t *mac_addr, esp_now_send_status_t olek)

      • mac_addr: vastuvõtja mac -aadress
      • staatus:

        • 1 = edu
        • 0 = ebaõnnestumine

Kirjeldus

Pärast ESPNOW andmete saatmist helistage funktsioonile OnDataSent

int esp_now_add_peer (u8 *mac_addr, u8 roll, u8 kanal, u8 *võti, u8 key_len)

Tagastab:

  • 1 = edu
  • 0 = ebaõnnestumine

Parameetrid:

  • mac_addr

    eakaaslase mac -aadress

  • rolli
  • kanal

    Kui väärtus on 0, kasutage praegust kanalit, mis jaam või diivan on sisse lülitatud. Vastasel juhul tuleb see seadistada kanaliks, millel jaam või diivan on sisse lülitatud

  • *võti

    võti krüptimiseks

  • key_len

    võtme pikkus

Kirjeldus:

Lisage kaaslaste nimekirja eakaaslane

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

Tagastab:

  • 1 = edu
  • 0 = ebaõnnestus

Parameetrid:

  • peer_addr: peer MAC -aadress
  • andmed: andmed, mida saata
  • len: andmete pikkus

Kirjeldus:

ESPNOW andmete saatmine. Mõnel juhul juhtub see:

  • Kui peer_addr ei ole NULL, saatke andmed samaealisele, kelle MAC -aadress vastab peer_addr
  • Kui peer_addr on NULL, saatke andmed kõigile eakaaslaste loendisse lisatud eakaaslastele
  • Andmete maksimaalne pikkus peab olema väiksem kui ESP_NOW_MAX_DATA_LEN
  • Puhver, millele viitab andmete argument, ei pea pärast esp_now_send tagastamist kehtima

int esp_now_register_recv_cb (cb)

Tagastab:

  • 1 = edu
  • 0 = ebaõnnestus

Parameetrid:

  • cb: tagasihelistamisfunktsioon ESPNOW andmete vastuvõtmiseks

    • tühine cb (const uint8_t *mac_addr, const uint8_t *andmed, int data_len)

      • mac_addr:

        vastuvõtja mac aadress

      • *andmed:

        andmeid vastu võtta

      • data_len

        andmebaidi pikkus

Kirjeldus:

Pärast ESPNOW andmete saamist helistage funktsioonile cb

Samm: ühesuunaline suhtlus (saatjana ESP32)

ESP32 saadab andmed seadmesse ESP8266. selle koodiga. Muutke broadcastAddress oma vastava vastuvõtja mac -aadressiks. Minu oma oli A4: CF: 12: C7: 9C: 77

// Lisage vajalikud teegid

#include // Esp kohe funktsioonidele juurdepääsemiseks #include // Wifi -võimaluste lisamiseks ESP32 -le // salvestage MAC -aadress massiivi nimega broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // minu vastuvõtja MAC -aadress/*määratlevad mitmete muutujate andmetüübid, mis on struktureeritud ja ümbernimetatud kui struktureeritud_sõnum*/typedef struktuuri_sõnum {char a [32]; int b; ujuk c; String d; bool e; } structure_message; // Loo struktuuri_teade nimega myData struktuuri_teade myData; // funktsioon, mis kutsutakse välja andmete saatmisel selle oleku tühjendamiseks tühine OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nViimase paketi saatmise olek: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Edastamise õnnestumine": "Edastus ebaõnnestus"); } void setup () {// Seadke edastuskiirus jadaühenduseks ESP Serial.begin (115200); // Määra seade WiFi-jaamaks WiFi.mode (WIFI_STA); // Käivitab wifi // Init ESP-NOW ja tagastab oma oleku, kui (esp_now_init ()! = ESP_OK) {Serial.println ("Viga ESP-i lähtestamisel -NÜÜD "); tagasipöördumine; } // helistage funktsioonile OnDataSent pärast ESPNOW andmete saatmist esp_now_register_send_cb (OnDataSent); // registreeri peer esp_now_peer_info_t peerInfo; // initsialiseerida ja määrata vastastikune teave kursoriks aadressile memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopeerige broadcastAddressi väärtus 6 baidiga peerInfo.peer_addr peerInfo.channel = 0; // kanal, millel esp räägib. 0 tähendab määratlemata ja andmed saadetakse praegusel kanalil. 1-14 on kehtivad kanalid, mis on sama kohaliku seadmega peerInfo.encrypt = false; // pole krüpteeritud // Lisa seade seotud seadmete loendisse if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Eakaaslase lisamine ebaõnnestus"); tagasipöördumine; }} void loop () {// Määra väärtused saatmiseks strcpy (myData.a, "THIS IS A CHAR"); // salvesta "THIS IS A CHAR" muutujale a minu varem määratletud "andmed" myData.b = juhuslik (1, 20); // salvesta juhuslik väärtus myData.c = 1.2; // salvesta ujuk myData.d = "Tere"; // salvestada string myData.e = false; // salvesta bool // Saada andmed ESP-NOW kaudu 250 baiti või vähem ja tagastab selle oleku esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Edukalt saadetud"); } else {Serial.println ("Viga andmete saatmisel"); } viivitus (2000); }

ESP8266 võtab selle koodi abil ESP32 -lt andmeid vastu.

// Lisage vajalikud teegid

#include // Wifi -võimaluste lisamiseks ESP32 -le #include // Esp now funktsioonidele juurdepääsemiseks /*määratlege mitmete muutujate andmetüübid, mis on struktureeritud ja ümbernimetatud kui struktuursed sõnumid* /typedef struktuursõnumid {char a [32]; int b; ujuk c; String d; bool e; } structure_message; // Loo muutuja struktuuri_teade nimega myData struktuuri_teade myData; // funktsioon kutsutakse välja andmete vastuvõtmisel ja prindib need tühjaks OnDataRecv (uint8_t * mac, uint8_t * sissetulevad andmed, uint8_t len) {memcpy (& myData, sissetulevad andmed, sizeof (myData)); Serial.print ("Vastuvõetud baidid:"); 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 ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Seadke edastuskiirus jadaühenduseks ESP Serial.begin (115200); // Määra seade Wi-Fi jaamaks WiFi.mode (WIFI_STA); // Käivitab wifi // Init ESP-NOW ja tagastab oma oleku, kui (esp_now_init ()! = 0) {Serial.println ("Viga ESP-NOW initsialiseerimisel"); tagasipöördumine; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Määrab selle esp rolli esp_now_register_recv_cb (OnDataRecv); // helistage funktsioonile OnDataRecv pärast ESPNOW andmete saamist} void loop () {}

6. samm: ühesuunaline suhtlus (saatjana ESP8266)

ESP8266 saadab andmed ESP32 -le. selle koodiga. Muutke broadcastAddress oma vastava vastuvõtja mac -aadressiks. Minu esp32 aadress on 30: AE: A4: F5: 03: A4. Muud esp8266 funktsioonid leiate siit

// Lisage vajalikud teegid

#include // Wifi -võimaluste lisamine ESP32 -le #include // Esp -funktsioonidele juurdepääsemiseks // salvestage MAC -aadress massiivi nimega broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*määratlege mitmete muutujate andmetüübid, mis on struktureeritud ja ümbernimetatud kui struktuuri_sõnum*/ typedef struktuuri_tekst {char a [32]; int b; ujuk c; String d; bool e; } structure_message; // Loo struktureeritud muutuja nimega myData structure_message myData; // funktsiooni kutsutakse andmete saatmisel ja prindib nende oleku tühjaks OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nViimase paketi saatmise olek: / t"); Serial.println (sendStatus == 1? "Edastamise õnnestumine": "Tarne ebaõnnestus"); } void setup () {// Seadke edastuskiirus jadaühenduseks ESP Serial.begin (115200); // Määra seade WiFi-jaamaks WiFi.mode (WIFI_STA); // Käivitab wifi // Init ESP-NOW ja tagastab oma oleku, kui (esp_now_init ()) {Serial.println ("Viga ESP-NOW initsialiseerimisel"); tagasipöördumine; } esp_now_register_send_cb (OnDataSent); // helistage funktsioonile OnDataSent pärast ESPNOW andmete saatmist // Lisage seade seotud seadmete loendisse, kui (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Eakaaslase lisamine ebaõnnestus"); tagasipöördumine; }} void loop () {// Määra väärtused saatmiseks strcpy (myData.a, "THIS IS A CHAR"); // salvesta "THIS IS CHAR" muutujale a minu varem määratletud "andmed" myData.b = juhuslik (1, 20); // salvesta juhuslik väärtus myData.c = 1.2; // salvesta ujuk myData.d = "SP8266"; // salvestada string myData.e = false; // salvesta bool // Saada andmed ESP-NOW kaudu 250 baiti või vähem ja tagastab selle oleku int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Edukalt saadetud"); } else {Serial.println ("Viga andmete saatmisel"); } viivitus (2000); }

ESP32 võtab andmeid vastu ESP8266 -lt. selle koodiga. Muude funktsioonide kohta vaata siit

// Lisage vajalikud teegid

#include // Esp nüüd funktsioonidele juurdepääsemiseks #include // Wifi -võimaluste lisamiseks ESP32 -le /*määratlege mitmete muutujate andmetüübid, mis on struktureeritud ja ümbernimetatud kui struktureeritud_sõnum* /typedef struktuuri_sõnum {char a [32]; int b; ujuk c; String d; bool e; } structure_message; // Loo muutuja struktuuri_teade nimega myData struktuuri_teade myData; // funktsioon kutsutakse välja andmete vastuvõtmisel ja prindib need tühjaks OnDataRecv (const uint8_t * mac, const uint8_t * sissetulevad andmed, int len) {memcpy (& myData, sissetulevad andmed, sizeof (myData)); Serial.print ("Vastuvõetud baidid:"); 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 ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Seadke edastuskiirus jadaühenduseks ESP Serial.begin (115200); // Määra seade WiFi-jaamaks WiFi.mode (WIFI_STA); // Käivitab wifi // Init ESP-NOW ja tagastab oma oleku, kui (esp_now_init ()! = 0) {Serial.println ("Viga ESP-NOW initsialiseerimisel"); tagasipöördumine; } esp_now_register_recv_cb (OnDataRecv); // helistage funktsioonile OnDataRecv pärast ESPNOW andmete saamist} void loop () {}

7. samm: kahesuunaline side

KAHESUUNALINE KOMMUNIKATSIOON
KAHESUUNALINE KOMMUNIKATSIOON
KAHESUUNALINE KOMMUNIKATSIOON
KAHESUUNALINE KOMMUNIKATSIOON

ESP32 saadab käivitamisel andmed ESP8266 -le. ESP8266 prindib vastuvõetud sõnumi ja seejärel vastab sellele, millele ESP32 prindib oma seeriamonitorile.

ESP32 KOOD

// Lisage vajalikud teegid

#include // Esp kohe funktsioonidele juurdepääsemiseks #include // Wifi -võimaluste lisamiseks ESP32 -le // salvestage MAC -aadress massiivi nimega broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // minu vastuvõtja MAC -aadress/*määratlevad mitmete muutujate andmetüübid, mis on struktureeritud ja ümbernimetatud kui struktureeritud_sõnum*/typedef struktuuri_sõnum {char a [32]; int b; ujuk c; String d; bool e; } structure_message; // Loo struktuuri_teade nimega myData struktuuri_teade myData; // funktsioon, mis kutsutakse välja andmete saatmisel selle oleku tühjendamiseks tühine OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nViimase paketi saatmise olek: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Kohaletoimetamise õnnestumine": "Tarne ebaõnnestus"); if (olek! = ESP_NOW_SEND_SUCCESS) {send_data ();}} tühine OnDataRecv (const uint8_t * mac, const uint8_t * sissetulevad andmed, int len) {memcpy (& myData, sissetulevad andmed, sizeof (myData)); Serial.print ("Vastuvõetud baidid:"); 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 ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Seadke edastuskiirus jadaühenduseks ESP Serial.begin (115200); // Seadistage WiFi-jaamaks WiFi.mode (WIFI_STA); // Käivitab wifi // Init ESP-NOW ja tagastab oma oleku, kui (esp_now_init ()! = ESP_OK) {Serial.println ("Viga ESP initsialiseerimisel -NÜÜD "); tagasipöördumine; } // helistage funktsioonile OnDataSent pärast ESPNOW andmete saatmist esp_now_register_send_cb (OnDataSent); // registreeri peer esp_now_peer_info_t peerInfo; // initsialiseerida ja määrata vastastikune teave kursoriks aadressile memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopeerige broadcastAddressi väärtus 6 baidiga peerInfo.peer_addr peerInfo.channel = 0; // kanal, millel esp räägib. 0 tähendab määratlemata ja andmed saadetakse praegusel kanalil.1-14 on kehtivad kanalid, mis on sama kohaliku seadmega peerInfo.encrypt = false; // pole krüpteeritud // Lisa seade seotud seadmete loendisse if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Eakaaslase lisamine ebaõnnestus"); tagasipöördumine; } esp_now_register_recv_cb (OnDataRecv); // helistage funktsioonile OnDataRecv pärast ESPNOW andmete saamist send_data (); } void loop () {} void send_data () {Serial.println ("Saadan"); // Määra väärtused saatmiseks strcpy (myData.a, "THIS IS A CHAR"); // salvesta "THIS IS CHAR" muutujale a minu varem määratletud "andmed" myData.b = juhuslik (1, 20); // salvesta juhuslik väärtus myData.c = 1.2; // salvesta ujuk myData.d = "ESP32"; // salvestada string myData.e = false; // salvesta bool // Saada andmed ESP-NOW kaudu 250 baiti või vähem ja tagastab selle oleku esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Saadetud edukalt");} else {Serial.println ("Viga andmete saatmisel"); }}

ESP8266 KOOD

// Lisage vajalikud teegid

#include // Wifi -võimaluste lisamine ESP32 -le #include // Esp -funktsioonidele juurdepääsemiseks // salvestage MAC -aadress massiivi nimega broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*määratlege mitmete muutujate andmetüübid, mis on struktureeritud ja ümbernimetatud kui struktuuri_sõnum*/ typedef struktuuri_tekst {char a [32]; int b; ujuk c; String d; bool e; } structure_message; // Loo muutuja struktuuri_teade nimega myData struktuuri_teade myData; // funktsioon kutsutakse välja andmete vastuvõtmisel ja prindib need tühjaks OnDataRecv (uint8_t * mac, uint8_t * sissetulevad andmed, uint8_t len) {memcpy (& myData, sissetulevad andmed, sizeof (myData)); Serial.print ("Vastuvõetud baidid:"); 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 ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nViimase paketi saatmise olek: / t"); Serial.println (sendStatus == 1? "Edastamise õnnestumine": "Tarne ebaõnnestus"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Määra väärtused saatmiseks strcpy (myData.a, "THIS IS A CHAR"); // salvesta "THIS IS CHAR" muutujale a minu varem määratletud "andmed" myData.b = juhuslik (1, 20); // salvesta juhuslik väärtus myData.c = 1.2; // salvesta ujuk myData.d = "ESP8266"; // salvestada string myData.e = false; // salvesta bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Seadke edastuskiirus jadaühenduseks ESP Serial.begin (115200); // Määra seade WiFi-jaamaks WiFi.mode (WIFI_STA); // Käivitab wifi // Init ESP-NOW ja tagastab oma oleku, kui (esp_now_init ()! = 0) {Serial.println ("Viga ESP-NOW initsialiseerimisel"); tagasipöördumine; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Eakaaslase lisamine ebaõnnestus"); tagasipöördumine; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Määrab selle esp rolli esp_now_register_recv_cb (OnDataRecv); // helistage funktsioonile OnDataRecv pärast ESPNOW andmete saamist} void loop () {}

8. samm: viited

ESPNOW_32_Näide

ESPNOW_8266 Näide

WIFI.h

ESP8266WiFi.h

esp_now.h ESP8266 jaoks

esp_now.h ESP32 jaoks

esp_now ametlik dokument (funktsioonide parem selgitus)

ESP-NOW ametlik juhend

Soovitan: