Përmbajtje:

Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266: 8 hapa
Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266: 8 hapa

Video: Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266: 8 hapa

Video: Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266: 8 hapa
Video: Управление 32 серводвигателями с PCA9685 и ESP32 - V4 2024, Korrik
Anonim
Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266
Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266

Në projektin tim të vazhdueshëm, më duhet shumë ESP për të folur me njëri -tjetrin pa një ruter. Për ta bërë këtë, unë do të përdor ESP-TANI për të bërë komunikim pa tel me njëri-tjetrin pa një ruter në ESP.

Furnizimet

Gjërat që kam përdorur:

ESP32 DEV Moduli

NODEMCU 1.0 (Moduli ESP12E)

Hapi 1: Merrni Adresën e Bordit Mac

Merrni Adresën e Bordit Mac
Merrni Adresën e Bordit Mac
Merrni Adresën Mac të Bordit
Merrni Adresën Mac të Bordit

Përmes ESP-tani, pajisjet ESP flasin me njëra-tjetrën duke dërguar të dhëna në adresën e tyre unike ndërsa janë të lidhur me një rrjet të brendshëm të pikave të hyrjes të bëra me intilizimin e esp tani. Me Kështu, përcaktoni adresën MAC të secilës pajisje. Bashkangjitur janë cilësimet e bordit tim ESP32 dhe ESP8266

P ER ESP32

#përfshi "WiFi.h" // Për të hyrë në aftësitë ESP32 WIFI

void setup () {Serial.begin (115200); Serial.print ("Adresa MAC e Bordit ESP32:"); Serial.println (WiFi.macAdresa ()); // printon adresën MAC të saj} void loop () {}

P FORR ESP8266

#include // Biblioteka e përdorur për të hyrë në aftësitë ESP8266 WIFI

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Bordi MAC Adresa:"); Serial.println (WiFi.macAdresa ()); // printon adresën MAC të saj} void loop () {}

Adresa ime MAC janë:

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

Hapi 2: Si ta bëni punën ESP-TANI

Këtu keni një përmbledhje se si ta bëni atë të funksionojë:

  1. Përfshi esp tani dhe bibliotekat wifi
  2. Ruani adresën mac të marrësit ESP
  3. Përcaktoni strukturën e të dhënave të mesazhit të dërguar/marrë
  4. Në konfigurim, vendosni wifi në modalitetin e stacionit
  5. Filloni esp_now
  6. bëni dhe regjistroni funksionin e thirrjes së thirrur pas dërgimit dhe marrjes së të dhënave
  7. Për Esp8266, përcaktoni rolin e tij
  8. regjistroni esp -në e bashkëmoshatarit ose marrësit
  9. Dërgoni të dhëna

Hapi 3: FUNKSIONET ESP-TANI (ESP32)

esp_now_init (e pavlefshme)

Kthimi:

  • ESP_OK: sukses
  • ESP_ERR_ESPNOW_INTERNAL: Gabim i brendshëm

Përshkrim:

Filloni funksionin ESPNOW

esp_now_register_send_cb (cb)

Kthen:

  • ESP_OK: sukses
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nuk është inicializuar
  • ESP_ERR_ESPNOW_INTERNAL: gabim i brendshëm

Parametrat:

  • cb: emri i funksionit të thirrjes pas dërgimit të të dhënave ESPNOW me këto parametra:

    • i pavlefshëm cb (const uint8_t *mac_addr, esp_now_send_status_t status)

      • mac_addr: adresa mac e marrësit
      • statusi:

        • 1 = sukses
        • 0 = dështoj

Përshkrim:

Thirrni funksionin OnDataSent pas dërgimit të të dhënave ESPNOW

esp_now_add_peerconst esp_now_peer_info_t *koleg)

Kthen:

  • ESP_OK: sukses
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nuk është inicializuar
  • ESP_ERR_ESPNOW_ARG: argument i pavlefshëm
  • ESP_ERR_ESPNOW_FULL: lista e kolegëve është e plotë
  • ESP_ERR_ESPNOW_NO_MEM: jashtë kujtesës
  • ESP_ERR_ESPNOW_EXIST: kolegët kanë ekzistuar

Parametrat:

  • koleg: informacion i kolegëve me të dhënat e mëposhtme:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW adresa MAC e kolegëve që është gjithashtu adresa MAC e stacionit ose softapit

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW çelësi kryesor lokal kryesor që përdoret për të kriptuar të dhënat

    • kanali uint8_t

      Kanali Wi-Fi që përdor kolegu për të dërguar/marrë të dhëna ESPNOW. Nëse vlera është 0, përdorni kanalin aktual në të cilin stacion ose softap është i ndezur. Përndryshe, duhet të vendoset si kanali në të cilin është vendosur stacioni ose softapi

    • wifi_interface_t ifidx

      Ndërfaqja Wi-Fi që përdor kolegu për të dërguar/marrë të dhëna ESPNOW

    • kriptim bool

      Të dhënat ESPNOW që ky koleg dërgon/merr është të koduara ose jo

    • i pavlefshëm *priv

      ESPNOW të dhënat private të kolegëve

Përshkrim:

Shtoni një koleg në listën e kolegëve

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

Kthen:

  • ESP_OK: sukses
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nuk është inicializuar
  • ESP_ERR_ESPNOW_ARG: argument i pavlefshëm
  • ESP_ERR_ESPNOW_INTERNAL: gabim i brendshëm
  • ESP_ERR_ESPNOW_NO_MEM: jashtë kujtesës
  • ESP_ERR_ESPNOW_NOT_FOUND: kolegu nuk u gjet
  • ESP_ERR_ESPNOW_IF: ndërfaqja aktuale WiFi nuk përputhet me atë të kolegëve

Parametrat:

  • peer_addr: adresa MAC e kolegëve
  • të dhëna: të dhëna për t'u dërguar
  • len: gjatësia e të dhënave

Përshkrim:

Dërgo të dhënat ESPNOW. Për disa raste, kjo ndodh:

  • Nëse peer_addr nuk është NULL, dërgoni të dhëna te kolegu, adresa MAC e të cilit përputhet me peer_addr
  • Nëse peer_addr është NULL, dërgoni të dhëna të gjithë kolegëve që janë shtuar në listën e kolegëve
  • Gjatësia maksimale e të dhënave duhet të jetë më pak se ESP_NOW_MAX_DATA_LEN
  • Tamponi i treguar nga argumenti i të dhënave nuk ka nevojë të jetë i vlefshëm pas kthimit të esp_now_send

esp_now_register_recv_cb (cb)

Kthen:

  • ESP_OK: sukses
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nuk është inicializuar
  • ESP_ERR_ESPNOW_INTERNAL: gabim i brendshëm

Parametrat:

  • cb: funksioni i thirrjes për marrjen e të dhënave ESPNOW

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

      • mac_addr:

        adresa mac e marrësit

      • *të dhëna:

        marrin të dhënat

      • data_len

        gjatësia e bajtit të të dhënave

Përshkrim:

Thirrni funksionin cb pasi të keni marrë të dhënat ESPNOW

Hapi 4: FUNKSIONET ESP-TANI (ESP8266)

FUNKSIONET PESRSHKRIM ESP32 ESP8266

int esp_now_init (e pavlefshme)

Kthen:

  • 1 = sukses
  • 0 = dështoj

Përshkrim

Filloni funksionin ESPNOW

int esp_now_set_self_role (roli u8)

Parametrat:

  • ESP_NOW_ROLE_IDLE: transmetimi i të dhënave nuk lejohet.
  • ESP_NOW_ROLE_CONTROLLER: përparësi i jepet ndërfaqes Sation
  • ESP_NOW_ROLE_SLAVE: përparësi i jepet ndërfaqes SoftAP
  • ESP_NOW_ROLE_COMBO: përparësi i jepet SoftAPinterface

Përshkrim

Vendos rolin e pajisjes

int esp_now_register_send_cb (cb)

Kthen:

  • 1 = sukses
  • 0 = dështoj

Parametrat:

  • cb: emri i funksionit të thirrjes pas dërgimit të të dhënave ESPNOW me këto parametra:

    • i pavlefshëm cb (const uint8_t *mac_addr, esp_now_send_status_t status)

      • mac_addr: mac adresa e marrësit
      • statusi:

        • 1 = sukses
        • 0 = dështoj

Përshkrim

Thirrni funksionin OnDataSent pas dërgimit të të dhënave ESPNOW

int esp_now_add_peer (u8 *mac_addr, roli u8, kanali u8, çelësi u8 *, u8 key_len)

Kthen:

  • 1 = sukses
  • 0 = dështoj

Parametrat:

  • mac_addr

    mac adresa e kolegut

  • rolin
  • kanal

    Nëse vlera është 0, përdorni kanalin aktual në të cilin stacion ose softap është i ndezur. Përndryshe, duhet të vendoset si kanali në të cilin është vendosur stacioni ose softapi

  • *Celës

    çelës për kriptim

  • key_len

    gjatësia e çelësit

Përshkrim:

Shtoni një koleg në listën e kolegëve

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

Kthen:

  • 1 = Sukses
  • 0 = Dështim

Parametrat:

  • peer_addr: adresa MAC e kolegëve
  • të dhëna: të dhëna për t'u dërguar
  • len: gjatësia e të dhënave

Përshkrim:

Dërgo të dhënat ESPNOW. Për disa raste, kjo ndodh:

  • Nëse peer_addr nuk është NULL, dërgoni të dhëna te kolegu, adresa MAC e të cilit përputhet me peer_addr
  • Nëse peer_addr është NULL, dërgoni të dhëna të gjithë kolegëve që janë shtuar në listën e kolegëve
  • Gjatësia maksimale e të dhënave duhet të jetë më pak se ESP_NOW_MAX_DATA_LEN
  • Tamponi i treguar nga argumenti i të dhënave nuk ka nevojë të jetë i vlefshëm pas kthimit të esp_now_send

int esp_now_register_recv_cb (cb)

Kthen:

  • 1 = Sukses
  • 0 = Dështim

Parametrat:

  • cb: funksioni i thirrjes për marrjen e të dhënave ESPNOW

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

      • mac_addr:

        adresa mac e marrësit

      • *të dhëna:

        marrin të dhënat

      • data_len

        gjatësia e bajtit të të dhënave

Përshkrim:

Thirrni funksionin cb pasi të keni marrë të dhënat ESPNOW

Hapi 5: Komunikimi me një drejtim (ESP32 si dërgues)

ESP32 dërgon të dhëna në një ESP8266. me këtë kod. Ndryshoni Adresën e transmetimit në adresën tuaj të marrësit korrespondues të marrësit. I imi ishte A4: CF: 12: C7: 9C: 77

// Shtoni bibliotekat e nevojshme

#include // Për të hyrë në esp tani funksionet #include // Për të shtuar aftësitë Wifi në ESP32 // ruani adresën MAC në një grup me emrin transmetimiAdresa; uint8_t transmeton Adresa = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC adresa e marrësit tim/*përcakton llojet e të dhënave të variablave të shumtë të strukturuar dhe riemërtuar të gjithë si struct_message*/typedef struct struct_message {char a [32]; int b; noton c; Vargu d; bool e; } struct_message; // Krijoni një mesazh strukturor të quajtur myData struct_message myData; // funksioni i thirrur kur të dhënat dërgohen për të printuar statusin e tij të pavlefshëm OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nStatus i fundit i dërgimit të paketës: / t"); Serial.println (statusi == ESP_NOW_SEND_SUCCESS? "Suksesi i dorëzimit": "Dorëzimi dështoi"); } void setup () {// Vendosni normën e baudit për komunikimin serik me ESP Serial.begin (115200); // Vendosni pajisjen si një stacion Wi-Fi WiFi.mode (WIFI_STA); // Nis wifi // Init ESP-NOW dhe kthen statusin e tij nëse (esp_now_init ()! = ESP_OK) {Serial.println ("Gabim në fillimin e ESP -TANI "); kthim; } // telefononi funksionin OnDataSent pas dërgimit të të dhënave ESPNOW esp_now_register_send_cb (OnDataSent); // Regjistrohu peer esp_now_peer_info_t peerInfo; // inicializoni dhe caktoni informacionin e kolegëve si një tregues në një adresues memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopjoni vlerën e transmetimitAddress me 6 bajt në peerInfo.peer_addr peerInfo.channel = 0; // kanali në të cilin flet esp. 0 do të thotë e pacaktuar dhe të dhënat do të dërgohen në kanalin aktual. 1-14 janë kanale të vlefshme që është e njëjtë me pajisjen lokale peerInfo.encrypt = false; // jo e koduar // Shtoni pajisjen në listën e pajisjeve të çiftuara nëse (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Dështoi në shtimin e kolegut"); kthim; }} void loop () {// Vendosni vlerat për të dërguar strcpy (myData.a, "THIS IS A CHAR"); // ruaj "K IST IS SHT NJ CHAR" për të ndryshuar një nga "të dhënat" e mia të përcaktuara më herët myData.b = rastësore (1, 20); // ruani një vlerë të rastësishme myData.c = 1.2; // ruani një float myData.d = "Përshëndetje"; // ruani një varg myData.e = false; // ruani një bool // Dërgoni të dhëna më pak ose të barabarta me 250 bajtë përmes ESP-TANI dhe kthen statusin e tij esp_err_t result = esp_now_send (transmetues Adresa, (uint8_t *) & myData, madhësia (myData)); nëse (rezultati == ESP_OK) {Serial.println ("Dërguar me sukses"); } else {Serial.println ("Gabim në dërgimin e të dhënave"); } vonesa (2000); }

ESP8266 merr të dhëna nga ESP32 duke përdorur këtë kod.

// Shtoni bibliotekat e nevojshme

#include // Për të shtuar aftësitë Wifi në ESP32 #include // Për të hyrë në funksionet e esp tani /*përcaktoni llojet e të dhënave të variablave të shumtë të strukturuar dhe riemërtuar të gjithë si strukturore_mosazh* /typedef strukturore_message {char a [32]; int b; noton c; Vargu d; bool e; } struct_message; // Krijoni një ndryshim strukturor_ mesazh të quajtur myData struct_message myData; // funksioni i thirrur kur të dhënat merren dhe i printon ato të pavlefshme OnDataRecv (uint8_t * mac, uint8_t * hyrjeData, uint8_t len) {memcpy (& myData, Data hyrëse, madhësia (myData)); Serial.print ("Bajtet e marra:"); 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 ("Vargu:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Vendosni normën e baudit për komunikimin serik me ESP Serial.begin (115200); // Vendoseni pajisjen si një stacion Wi-Fi WiFi.mode (WIFI_STA); // Nis wifi // Init ESP-NOW dhe kthen statusin e tij nëse (esp_now_init ()! = 0) {Serial.println ("Gabim në fillimin e ESP-TANI"); kthim; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Përcakton rolin e këtij esp_now_register_recv_cb (OnDataRecv); // telefononi funksionin OnDataRecv pas marrjes së të dhënave ESPNOW} lak void () {}

Hapi 6: Komunikimi me një drejtim (ESP8266 Si Dërgues)

ESP8266 dërgon të dhëna në një ESP32. me këtë kod. Ndryshoni Adresën e transmetimit në adresën tuaj të marrësit korrespondues të marrësit. Adresa ime esp32 është 30: AE: A4: F5: 03: A4. Për funksionet e tjera për esp8266 shkoni këtu

// Shtoni bibliotekat e nevojshme

#include // Për të shtuar aftësitë Wifi në ESP32 #include // Për të hyrë në funksionet e esp tani // ruani adresën MAC në një grup të quajtur transmetimiAdresa; uint8_t transmeton Adresa = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*përkufizoni llojet e të dhënave të variablave të shumtë të strukturuar dhe të riemërtuar të gjithë si struct_message*/ typedef struct struct_message {char a [32]; int b; noton c; Vargu d; bool e; } struct_message; // Krijoni një ndryshore të strukturuar të quajtur myData struct_message myData; // funksioni i thirrur kur të dhënat dërgohen dhe printoni statusin e tij të pavlefshëm OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nStatusi i fundit i dërgimit të paketës: / t"); Serial.println (sendStatus == 1? "Suksesi i dorëzimit": "Dështimi i dorëzimit"); } void setup () {// Vendosni normën e baudit për komunikimin serik me ESP Serial.begin (115200); // Vendosni pajisjen si një stacion Wi-Fi WiFi.mode (WIFI_STA); // Nis wifi // Init ESP-NOW dhe kthen statusin e tij nëse (esp_now_init ()) {Serial.println ("Gabim në fillimin ESP-TANI"); kthim; } esp_now_register_send_cb (OnDataSent); // telefononi funksionin OnDataSent pas dërgimit të të dhënave ESPNOW // Shtoni pajisjen në listën e pajisjeve të çiftuara nëse (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Dështoi në shtimin e kolegut"); kthim; }} void loop () {// Vendosni vlerat për të dërguar strcpy (myData.a, "THIS IS A CHAR"); // ruaj "K IST IS SHT NJ CHAR" për të ndryshuar një nga "të dhënat" e mia të përcaktuara më herët myData.b = rastësore (1, 20); // ruani një vlerë të rastësishme myData.c = 1.2; // ruani një float myData.d = "SP8266"; // ruani një varg myData.e = false; // ruani një bool // Dërgoni të dhëna më pak se ose të barabarta me 250 bajtë përmes ESP-NOW dhe kthen statusin e tij int rezultati = esp_now_send (transmetimi Adresa, (uint8_t *) & myData, madhësia (myData)); if (esp_now_init ()! = 0) {Serial.println ("Dërguar me sukses"); } else {Serial.println ("Gabim në dërgimin e të dhënave"); } vonesa (2000); }

ESP32 merr të dhëna nga një ESP8266. me këtë kod. Për funksionet e tjera referojuni këtu

// Shtoni bibliotekat e nevojshme

#include // Për të hyrë në esp tani funksionet #include // Për të shtuar aftësitë Wifi në ESP32 /*përcaktoni llojet e të dhënave të variablave të shumtë të strukturuar dhe riemërtuar të gjithë si strukturor_mosazh* /typedef strukturore_message {char a [32]; int b; noton c; Vargu d; bool e; } struct_message; // Krijoni një ndryshim strukturor_ mesazh të quajtur myData struct_message myData; // funksioni i thirrur kur të dhënat merren dhe i printon ato të pavlefshme OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bajtet e marra:"); 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 ("Vargu:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Vendosni normën e baudit për komunikimin serik me ESP Serial.begin (115200); // Vendoseni pajisjen si një stacion Wi-Fi WiFi.mode (WIFI_STA); // Nis wifi // Init ESP-NOW dhe kthen statusin e tij nëse (esp_now_init ()! = 0) {Serial.println ("Gabim në fillimin e ESP-TANI"); kthim; } esp_now_register_recv_cb (OnDataRecv); // telefononi funksionin OnDataRecv pas marrjes së të dhënave ESPNOW} lak void () {}

Hapi 7: KOMUNIKIMI ME DY RRUG

KOMUNIKIMI ME DY RRUG
KOMUNIKIMI ME DY RRUG
KOMUNIKIMI ME DY RRUG
KOMUNIKIMI ME DY RRUG

ESP32 dërgon të dhëna për fillimin në ESP8266. ESP8266 printon mesazhin e marrë dhe më pas përgjigjet nga të cilat ESP32 printon në monitorin e tij serik.

KOD ESP32

// Shtoni bibliotekat e nevojshme

#include // Për të hyrë në esp tani funksionet #include // Për të shtuar aftësitë Wifi në ESP32 // ruani MAC Adresa në një grup me emrin transmetimiAdresa; uint8_t transmeton Adresa = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC adresa e marrësit tim/*përcakton llojet e të dhënave të variablave të shumtë të strukturuar dhe riemërtuar të gjithë si struct_message*/typedef struct struct_message {char a [32]; int b; noton c; Vargu d; bool e; } struct_message; // Krijoni një mesazh strukturor të quajtur myData struct_message myData; // funksioni i thirrur kur të dhënat dërgohen për të printuar statusin e tij të pavlefshëm OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nStatus i fundit i dërgimit të paketës: / t"); Serial.println (statusi == ESP_NOW_SEND_SUCCESS? "Suksesi i dorëzimit": "Dorëzimi dështoi"); nëse (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * hyrjeData, int len) {memcpy (& myData, të dhëna hyrëse, madhësia (myData)); Serial.print ("Bajtet e marra:"); 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 ("Vargu:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Vendosni normën e baudit për komunikimin serik me ESP Serial.begin (115200); // Vendosni pajisjen si një stacion Wi-Fi WiFi.mode (WIFI_STA); // Nis wifi // Init ESP-NOW dhe kthen statusin e tij nëse (esp_now_init ()! = ESP_OK) {Serial.println ("Gabim në fillimin e ESP -TANI "); kthim; } // telefononi funksionin OnDataSent pas dërgimit të të dhënave ESPNOW esp_now_register_send_cb (OnDataSent); // Regjistrohu peer esp_now_peer_info_t peerInfo; // inicializoni dhe caktoni informacionin e kolegëve si një tregues në një adresues memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopjoni vlerën e transmetimitAddress me 6 bajt në peerInfo.peer_addr peerInfo.channel = 0; // kanali në të cilin flet esp. 0 do të thotë e pacaktuar dhe të dhënat do të dërgohen në kanalin aktual.1-14 janë kanale të vlefshme që është e njëjtë me pajisjen lokale peerInfo.encrypt = false; // jo e koduar // Shtoni pajisjen në listën e pajisjeve të çiftuara nëse (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Dështoi në shtimin e kolegut"); kthim; } esp_now_register_recv_cb (OnDataRecv); // telefononi funksionin OnDataRecv pasi keni marrë të dhënat ESPNOW send_data (); } void loop () {} void send_data () {Serial.println ("Dërgimi"); // Vendosni vlerat për të dërguar strcpy (myData.a, "THIS IS A CHAR"); // ruaj "K IST IS SHT NJ CHAR" për të ndryshuar një nga "të dhënat" e mia të përcaktuara më herët myData.b = rastësore (1, 20); // ruani një vlerë të rastësishme myData.c = 1.2; // ruaj një float myData.d = "ESP32"; // ruani një varg myData.e = false; // ruani një bool // Dërgoni të dhëna më pak ose të barabarta me 250 bajtë përmes ESP-TANI dhe kthen statusin e tij esp_err_t result = esp_now_send (transmetues Adresa, (uint8_t *) & myData, madhësia (myData)); if (rezultati == ESP_OK) {Serial.println ("Dërguar me sukses");} tjetër {Serial.println ("Gabim në dërgimin e të dhënave"); }}

ESP8266 KOD

// Shtoni bibliotekat e nevojshme

#include // Për të shtuar aftësitë Wifi në ESP32 #include // Për të hyrë në funksionet e esp tani // ruani adresën MAC në një grup të quajtur transmetimiAdresa; uint8_t transmeton Adresa = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*përkufizoni llojet e të dhënave të variablave të shumtë të strukturuar dhe të riemërtuar të gjithë si struct_message*/ typedef struct struct_message {char a [32]; int b; noton c; Vargu d; bool e; } struct_message; // Krijoni një ndryshim strukturor_ mesazh të quajtur myData struct_message myData; // funksioni i thirrur kur të dhënat merren dhe i printon ato të pavlefshme OnDataRecv (uint8_t * mac, uint8_t * hyrjeData, uint8_t len) {memcpy (& myData, Data hyrëse, madhësia (myData)); Serial.print ("Bajtet e marra:"); 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 ("Vargu:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); të dhëna send_ (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nStatusi i fundit i dërgimit të paketës: / t"); Serial.println (sendStatus == 1? "Suksesi i dorëzimit": "Dështimi i dorëzimit"); nëse (sendStatus! = 1) {send_data (); }} void send_data () {// Vendosni vlerat për të dërguar strcpy (myData.a, "THIS IS A CHAR"); // ruaj "K IST IS SHT NJ CHAR" për të ndryshuar një nga "të dhënat" e mia të përcaktuara më herët myData.b = rastësore (1, 20); // ruani një vlerë të rastësishme myData.c = 1.2; // ruaj një float myData.d = "ESP8266"; // ruani një varg myData.e = false; // ruani një bool esp_now_send (transmetues Adresa, (uint8_t *) & myData, madhësia (myData)); } void setup () {// Vendosni normën e baudit për komunikimin serik me ESP Serial.begin (115200); // Vendoseni pajisjen si një stacion Wi-Fi WiFi.mode (WIFI_STA); // Nis wifi // Init ESP-NOW dhe kthen statusin e tij nëse (esp_now_init ()! = 0) {Serial.println ("Gabim në fillimin e ESP-TANI"); kthim; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Dështoi në shtimin e kolegut"); kthim; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Përcakton rolin e këtij esp_now_register_recv_cb (OnDataRecv); // telefononi funksionin OnDataRecv pas marrjes së të dhënave ESPNOW} lak void () {}

Hapi 8: REFERIMET

ESPNOW_32_Shembull

ESPNOW_8266 Shembull

WIFI.h

ESP8266WiFi.h

esp_now.h për ESP8266

esp_now.h për ESP32

esp_now dokument zyrtar (Shpjegim më i mirë i funksioneve)

Udhëzuesi Zyrtar ESP-TANI

Recommended: