Sisällysluettelo:

Useiden ESP-keskustelujen tekeminen ESP-NOW: n avulla ESP32: n ja ESP8266: n avulla: 8 vaihetta
Useiden ESP-keskustelujen tekeminen ESP-NOW: n avulla ESP32: n ja ESP8266: n avulla: 8 vaihetta

Video: Useiden ESP-keskustelujen tekeminen ESP-NOW: n avulla ESP32: n ja ESP8266: n avulla: 8 vaihetta

Video: Useiden ESP-keskustelujen tekeminen ESP-NOW: n avulla ESP32: n ja ESP8266: n avulla: 8 vaihetta
Video: D'où vient 'FRANC-MAÇON' ? S2E1 #frenchfreemason Franc-Maçonnerie 2024, Kesäkuu
Anonim
Kuinka tehdä useita ESP-keskusteluja ESP-NOW: n avulla käyttämällä ESP32- ja ESP8266-laitteita
Kuinka tehdä useita ESP-keskusteluja ESP-NOW: n avulla käyttämällä ESP32- ja ESP8266-laitteita

Käynnissä olevassa projektissani tarvitsen useita ESP -puheluita keskustelemaan keskenään ilman reititintä. Tätä varten käytän ESP-NOW: ta langattoman kommunikoinnin muodostamiseen keskenään ilman ESP: n reititintä.

Tarvikkeet

Asioita joita käytin:

ESP32 DEV -moduuli

NODEMCU 1.0 (ESP12E -moduuli)

Vaihe 1: Hanki hallituksen Mac -osoite

Hanki hallituksen Mac -osoite
Hanki hallituksen Mac -osoite
Hanki hallituksen Mac -osoite
Hanki hallituksen Mac -osoite

ESP-nyt-palvelun kautta ESP-laitteet puhuvat toisilleen lähettämällä tietoja yksilölliseen osoitteeseensa, kun ne on kytketty sisäiseen yhteyspisteverkkoon, joka on tehty esp-laitteen asennuksen yhteydessä.. Määritä siis kunkin laitteen MAC -osoite, johon on liitetty ESP32- ja ESP8266 -kortin asetukset

ESP32: lle

#include "WiFi.h" // ESP32 WIFI -ominaisuuksien käyttäminen

void setup () {Serial.begin (115200); Serial.print ("ESP32 -kortin MAC -osoite:"); Serial.println (WiFi.macAddress ()); // tulostaa MAC -osoitteen} void loop () {}

ESP8266: lle

#include // Kirjasto, jota käytetään ESP8266 WIFI -ominaisuuksien käyttämiseen

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

MAC -OSOITTEENI ovat:

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

Vaihe 2: Kuinka saada ESP-NOW toimimaan

Tässä on yleiskatsaus sen toimivuudesta:

  1. Sisällytä esp nyt ja wifi -kirjastot
  2. Tallenna vastaanottajan ESP: n mac -osoite
  3. Määritä lähetetyn/vastaanotetun viestin tietorakenne
  4. Aseta asetuksissa wifi asematilaan
  5. Alusta esp_now
  6. soittaa ja rekisteröidä takaisinsoittotoiminto, joka kutsutaan tietojen lähettämisen ja vastaanottamisen jälkeen
  7. Määritä Esp8266: lle sen rooli
  8. rekisteröi vertaishenkilö tai vastaanottaja, esim
  9. Lähetä tietoja

Vaihe 3: ESP-NOW-TOIMINNOT (ESP32)

esp_now_init (mitätön)

Palata:

  • ESP_OK: onnistuu
  • ESP_ERR_ESPNOW_INTERNAL: Sisäinen virhe

Kuvaus:

Alusta ESPNOW -toiminto

esp_now_register_send_cb (cb)

Palautukset:

  • ESP_OK: onnistuu
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ei ole alustettu
  • ESP_ERR_ESPNOW_INTERNAL: sisäinen virhe

Parametrit:

  • cb: takaisinsoittotoiminnon nimi ESPNOW -datan lähettämisen jälkeen seuraavilla parametreilla:

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

      • mac_addr: vastaanottimen mac -osoite
      • Tila:

        • 1 = menestys
        • 0 = epäonnistuu

Kuvaus:

Soita toimintoon OnDataSent ESPNOW -datan lähettämisen jälkeen

esp_now_add_peerconst esp_now_peer_info_t *vertais)

Palautukset:

  • ESP_OK: onnistuu
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ei ole alustettu
  • ESP_ERR_ESPNOW_ARG: virheellinen argumentti
  • ESP_ERR_ESPNOW_FULL: vertaislista on täynnä
  • ESP_ERR_ESPNOW_NO_MEM: muisti loppu
  • ESP_ERR_ESPNOW_EXIST: vertaista on ollut olemassa

Parametrit:

  • vertais: vertaistiedot seuraavilla tiedoilla:

    • uint8_t

      vertaisosoite [ESP_NOW_ETH_ALEN]; ESPNOW -vertais -MAC -osoite, joka on myös aseman tai softapin MAC -osoite

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW -vertaispaikallinen pääavain, jota käytetään tietojen salaamiseen

    • uint8_t kanava

      Wi-Fi-kanava, jota vertaisverkko käyttää ESPNOW-datan lähettämiseen/vastaanottamiseen. Jos arvo on 0, käytä nykyistä kanavaa, jonka asema tai softap on päällä. Muussa tapauksessa se on asetettava kanavaksi, jolla asema tai softap on päällä

    • wifi_interface_t ifidx

      Wi-Fi-käyttöliittymä, jota vertaisliitin käyttää ESPNOW-datan lähettämiseen/vastaanottamiseen

    • bool salaa

      Tämän vertaisen lähettämät/vastaanottamat ESPNOW -tiedot on salattu tai ei

    • mitätön *priv

      ESPNOW vertaisi yksityisiä tietoja

Kuvaus:

Lisää vertaisryhmä vertaisluetteloon

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

Palautukset:

  • ESP_OK: onnistuu
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ei ole alustettu
  • ESP_ERR_ESPNOW_ARG: virheellinen argumentti
  • ESP_ERR_ESPNOW_INTERNAL: sisäinen virhe
  • ESP_ERR_ESPNOW_NO_MEM: muisti loppu
  • ESP_ERR_ESPNOW_NOT_FOUND: vertaista ei löydy
  • ESP_ERR_ESPNOW_IF: nykyinen WiFi -käyttöliittymä ei vastaa vertaisliitäntää

Parametrit:

  • peer_addr: vertais -MAC -osoite
  • data: lähetettävät tiedot
  • len: tietojen pituus

Kuvaus:

Lähetä ESPNOW -tietoja. Joissakin tapauksissa näin tapahtuu:

  • Jos peer_addr ei ole NULL, lähetä tiedot vertaishenkilölle, jonka MAC -osoite vastaa peer_addr
  • Jos peer_addr on NULL, lähetä tiedot kaikille vertaisluetteloon lisätyille vertaisryhmille
  • Tiedon enimmäispituuden on oltava alle ESP_NOW_MAX_DATA_LEN
  • Data -argumentin osoittaman puskurin ei tarvitse olla kelvollinen esp_now_send -palautuksen jälkeen

esp_now_register_recv_cb (cb)

Palautukset:

  • ESP_OK: onnistuu
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ei ole alustettu
  • ESP_ERR_ESPNOW_INTERNAL: sisäinen virhe

Parametrit:

  • cb: takaisinsoittotoiminto ESPNOW -datan vastaanottamiseksi

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

      • mac_addr:

        vastaanottimen mac -osoite

      • *tiedot:

        vastaanottaa tietoja

      • data_len

        datatavun pituus

Kuvaus:

Soita toimintoon cb ESPNOW -datan vastaanottamisen jälkeen

Vaihe 4: ESP-NYT-TOIMINNOT (ESP8266)

TOIMINNOT KUVAUS ESP32 ESP8266

int esp_now_init (mitätön)

Palautukset:

  • 1 = menestys
  • 0 = epäonnistuu

Kuvaus

Alusta ESPNOW -toiminto

int esp_now_set_self_role (u8 -rooli)

Parametrit:

  • ESP_NOW_ROLE_IDLE: tiedonsiirto ei ole sallittua.
  • ESP_NOW_ROLE_CONTROLLER: etusijalla on Sation -käyttöliittymä
  • ESP_NOW_ROLE_SLAVE: SoftAP -käyttöliittymä on etusijalla
  • ESP_NOW_ROLE_COMBO: SoftAPinterface on etusijalla

Kuvaus

Asettaa laitteen roolin

int esp_now_register_send_cb (cb)

Palautukset:

  • 1 = menestys
  • 0 = epäonnistuu

Parametrit:

  • cb: takaisinsoittotoiminnon nimi ESPNOW -datan lähettämisen jälkeen seuraavilla parametreilla:

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

      • mac_addr: vastaanottimen mac -osoite
      • Tila:

        • 1 = menestys
        • 0 = epäonnistuu

Kuvaus

Soita toimintoon OnDataSent ESPNOW -datan lähettämisen jälkeen

int esp_now_add_peer (u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)

Palautukset:

  • 1 = menestys
  • 0 = epäonnistuu

Parametrit:

  • mac_addr

    vertaisverkon mac -osoite

  • rooli
  • kanava

    Jos arvo on 0, käytä nykyistä kanavaa, jonka asema tai softap on päällä. Muussa tapauksessa se on asetettava kanavaksi, jolla asema tai softap on päällä

  • *avain

    salausavain

  • key_len

    avaimen pituus

Kuvaus:

Lisää vertaisryhmä vertaisluetteloon

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

Palautukset:

  • 1 = Menestys
  • 0 = epäonnistunut

Parametrit:

  • peer_addr: vertais -MAC -osoite
  • data: lähetettävät tiedot
  • len: tietojen pituus

Kuvaus:

Lähetä ESPNOW -tietoja. Joissakin tapauksissa näin tapahtuu:

  • Jos peer_addr ei ole NULL, lähetä tiedot vertaishenkilölle, jonka MAC -osoite vastaa peer_addr
  • Jos peer_addr on NULL, lähetä tiedot kaikille vertaisluetteloon lisätyille vertaisryhmille
  • Tiedon enimmäispituuden on oltava alle ESP_NOW_MAX_DATA_LEN
  • Data -argumentin osoittaman puskurin ei tarvitse olla kelvollinen esp_now_send -palautuksen jälkeen

int esp_now_register_recv_cb (cb)

Palautukset:

  • 1 = Menestys
  • 0 = epäonnistunut

Parametrit:

  • cb: takaisinsoittotoiminto ESPNOW -datan vastaanottamiseksi

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

      • mac_addr:

        vastaanottimen mac -osoite

      • *tiedot:

        vastaanottaa tietoja

      • data_len

        datatavun pituus

Kuvaus:

Soita toimintoon cb ESPNOW -datan vastaanottamisen jälkeen

Vaihe 5: Yksisuuntainen viestintä (ESP32 lähettäjänä)

ESP32 lähettää tiedot ESP8266 -laitteeseen. tällä koodilla. Vaihda broadcastAddress vastaavan vastaanottimen mac -osoitteeksi. Minun oli A4: CF: 12: C7: 9C: 77

// Lisää tarvittavat kirjastot

#include // Esp now -toimintojen käyttäminen #include // Wifi -ominaisuuksien lisääminen ESP32 -järjestelmään // tallenna MAC -osoite taulukkoon nimeltä broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Vastaanottimeni MAC -osoite/*määrittele useiden muuttujien tietotyypit, jotka on jäsennelty ja nimetty uudelleen nimellä struktuuri_viesti*/typedef struktuuri_viesti {char a [32]; int b; kellua c; Jono d; bool e; } structure_message; // Luo strukt_viesti nimeltä myData strukt_viesti myData; // funktio, jota kutsutaan, kun tiedot lähetetään tulostamaan sen tila void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nViimeisen paketin lähetyksen tila: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Toimitus onnistui": "Toimitus epäonnistui"); } void setup () {// Aseta siirtonopeus sarjaliikenteelle ESP Serial.beginin kanssa (115200); // Aseta laite Wi-Fi-asemaan WiFi.mode (WIFI_STA); // Käynnistää wifi // Init ESP-NOW ja palauttaa tilan, jos (esp_now_init ()! = ESP_OK) {Serial.println ("Virhe alustettaessa ESP -NYT"); palata; } // kutsu toiminto OnDataSent ESPNOW -datan lähettämisen jälkeen esp_now_register_send_cb (OnDataSent); // Rekisteröi peer esp_now_peer_info_t peerInfo; // alustetaan ja määritetään vertaistiedot osoittimeksi osoitekirjalle memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopioi broadcastAddress 6 tavua arvoon peerInfo.peer_addr peerInfo.channel = 0; // kanava, jolla esp puhuu. 0 tarkoittaa määrittelemätöntä ja tiedot lähetetään nykyiselle kanavalle. 1-14 ovat kelvollisia kanavia, jotka ovat samat paikallisen laitteen kanssa peerInfo.encrypt = false; // ei salattu // Lisää laite pariliitettyjen laitteiden luetteloon, jos (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Vertauksen lisääminen epäonnistui"); palata; }} void loop () {// Aseta arvot lähettämään strcpy (myData.a, "THIS IS A CHAR"); // tallenna "THIS IS A CHAR" muuttujalle a aiemmin määritellyistä "datastani". b = random (1, 20); // tallenna satunnainen arvo myData.c = 1.2; // tallenna kelluva myData.d = "Hei"; // tallenna merkkijono myData.e = false; // tallenna bool // Lähetä tietoja, jotka ovat pienempiä tai yhtä suuria kuin 250 tavua ESP-NOW: n kautta ja palauttaa tilan esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Lähetetty onnistuneesti"); } else {Serial.println ("Virhe tietojen lähettämisessä"); } viive (2000); }

ESP8266 vastaanottaa tietoja ESP32: sta käyttämällä tätä koodia.

// Lisää tarvittavat kirjastot

#include // Wifi -ominaisuuksien lisääminen ESP32 -järjestelmään #include // Esp now -toimintojen käyttäminen /*määrittele useiden muuttujien tietotyypit, jotka on strukturoitu ja nimetty uudelleen nimellä strukt_viestit* /typedef struktuuri_viesti {char a [32]; int b; kellua c; Jono d; bool e; } structure_message; // Luo muuttuja struktu_viesti nimeltä myData structure_message myData; // funktio kutsutaan, kun tiedot vastaanotetaan ja tulostaa ne mitätöityinä OnDataRecv (uint8_t * mac, uint8_t * inputData, uint8_t len) {memcpy (& omatiedot, saapuvat tiedot, sizeof (myData)); Serial.print ("Vastaanotetut tavut:"); 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 ("Jono:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sarja.println (); } void setup () {// Aseta siirtonopeus sarjaliikenteelle ESP Serial.beginin kanssa (115200); // Aseta laite Wi-Fi Stationiksi WiFi.mode (WIFI_STA); // Käynnistää wifi // Init ESP-NOW ja palauttaa tilan, jos (esp_now_init ()! = 0) {Serial.println ("Virhe ESP-NOW-alustuksessa"); palata; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Määrittää tämän esp: n roolin esp_now_register_recv_cb (OnDataRecv); // kutsua funktiota OnDataRecv ESPNOW -datan vastaanottamisen jälkeen} void loop () {}

Vaihe 6: Yksisuuntainen viestintä (ESP8266 lähettäjänä)

ESP8266 lähettää tiedot ESP32 -laitteeseen. tällä koodilla. Vaihda broadcastAddress vastaavan vastaanottimen mac -osoitteeksi. Esp32 -osoitteeni on 30: AE: A4: F5: 03: A4. Muut esp8266 -toiminnot löydät täältä

// Lisää tarvittavat kirjastot

#include // Wifi -ominaisuuksien lisääminen ESP32: een #include // Esp now -toimintojen käyttäminen // tallenna MAC -osoite taulukkoon nimeltä broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*määrittele useiden muuttujien tietotyypit, jotka on jäsennelty ja nimetty uudelleen strukturointiviestiksi*/ typedef struktuuri_viesti {char a [32]; int b; kellua c; Jono d; bool e; } structure_message; // Luo strukturoitu muuttuja nimeltä myData structure_message myData; // funktio, jota kutsutaan, kun tiedot lähetetään, ja tulostaa niiden tila void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nViimeisen paketin lähetyksen tila: / t"); Serial.println (sendStatus == 1? "Toimitus onnistui": "Toimitus epäonnistui"); } void setup () {// Aseta siirtonopeus sarjaliikenteelle ESP Serial.beginin kanssa (115200); // Aseta laite Wi-Fi-asemaan WiFi.mode (WIFI_STA); // Käynnistää wifi // Init ESP-NOW ja palauttaa tilan, jos (esp_now_init ()) {Serial.println ("Virhe alustettaessa ESP-NOW"); palata; } esp_now_register_send_cb (OnDataSent); // kutsu toiminto OnDataSent ESPNOW -datan lähettämisen jälkeen // Lisää laite laitepariluetteloon, jos (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Vertaus epäonnistui"); palata; }} void loop () {// Aseta arvot lähettämään strcpy (myData.a, "THIS IS A CHAR"); // tallenna "THIS IS A CHAR" muuttujalle a aiemmin määritellyistä "datastani". b = random (1, 20); // tallenna satunnainen arvo myData.c = 1.2; // tallenna kelluva myData.d = "SP8266"; // tallenna merkkijono myData.e = false; // tallenna bool // Lähetä tietoja, jotka ovat pienempiä tai yhtä suuria kuin 250 tavua ESP-NOW: n kautta ja palauttaa sen tilan int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Lähetetty onnistuneesti"); } else {Serial.println ("Virhe tietojen lähettämisessä"); } viive (2000); }

ESP32 vastaanottaa tietoja ESP8266: sta. tällä koodilla. Katso muita toimintoja täältä

// Lisää tarvittavat kirjastot

#include // Esp now -toimintojen käyttäminen #include // Wifi -ominaisuuksien lisääminen ESP32 -laitteeseen /*määrittele useiden muuttujien tietotyypit, jotka on strukturoitu ja nimetty uudelleen nimellä strukt_viestit* /typedef struktuuri_viesti {char a [32]; int b; kellua c; Jono d; bool e; } structure_message; // Luo muuttuja struktu_viesti nimeltä myData structure_message myData; // funktio kutsutaan, kun tiedot vastaanotetaan ja tulostaa ne mitätöityinä OnDataRecv (const uint8_t * mac, const uint8_t * inputing data, int len) {memcpy (& myData, inputing data, sizeof (myData)); Serial.print ("Vastaanotetut tavut:"); 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 ("Jono:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sarja.println (); } void setup () {// Aseta siirtonopeus sarjaliikenteelle ESP Serial.beginin kanssa (115200); // Aseta laite Wi-Fi Stationiksi WiFi.mode (WIFI_STA); // Käynnistää wifi // Init ESP-NOW ja palauttaa tilan, jos (esp_now_init ()! = 0) {Serial.println ("Virhe ESP-NOW-alustuksessa"); palata; } esp_now_register_recv_cb (OnDataRecv); // kutsua funktiota OnDataRecv ESPNOW -tietojen vastaanottamisen jälkeen} void loop () {}

Vaihe 7: KAKSI TIETOA

KAKSI TIETOJA
KAKSI TIETOJA
KAKSI TIETOJA
KAKSI TIETOJA

ESP32 lähettää käynnistyksen yhteydessä tiedot ESP8266: een. ESP8266 tulostaa vastaanotetun viestin ja vastaa sitten ESP32 sarjamonitoriin.

ESP32 -KOODI

// Lisää tarvittavat kirjastot

#include // Esp now -toimintojen käyttäminen #include // Wifi -ominaisuuksien lisääminen ESP32 -järjestelmään // tallenna MAC -osoite taulukkoon nimeltä broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Vastaanottimeni MAC -osoite/*määrittele useiden muuttujien tietotyypit, jotka on jäsennelty ja nimetty uudelleen nimellä struktuuri_viesti*/typedef struktuuri_viesti {char a [32]; int b; kellua c; Jono d; bool e; } structure_message; // Luo strukt_viesti nimeltä myData strukt_viesti myData; // funktio, jota kutsutaan, kun tiedot lähetetään tulostamaan sen tila void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nViimeisen paketin lähetyksen tila: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Toimitus onnistui": "Toimitus epäonnistui"); if (tila! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * inputData, int len) {memcpy (& myData, inputing data, sizeof (myData)); Serial.print ("Vastaanotetut tavut:"); 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 ("Jono:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sarja.println (); } void setup () {// Aseta siirtonopeus sarjaliikenteelle ESP Serial.beginin kanssa (115200); // Aseta laite Wi-Fi-asemaan WiFi.mode (WIFI_STA); // Käynnistää wifi // Init ESP-NOW ja palauttaa tilan, jos (esp_now_init ()! = ESP_OK) {Serial.println ("Virhe alustettaessa ESP -NYT"); palata; } // kutsu toiminto OnDataSent ESPNOW -datan lähettämisen jälkeen esp_now_register_send_cb (OnDataSent); // Rekisteröi peer esp_now_peer_info_t peerInfo; // alustetaan ja määritetään vertaistiedot osoittimeksi osoitekirjalle memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopioi broadcastAddress 6 tavua arvoon peerInfo.peer_addr peerInfo.channel = 0; // kanava, jossa esp puhuu. 0 tarkoittaa määrittelemätöntä ja tiedot lähetetään nykyiselle kanavalle.1-14 ovat kelvollisia kanavia, jotka ovat samat paikallisen laitteen kanssa peerInfo.encrypt = false; // ei salattu // Lisää laite pariliitettyjen laitteiden luetteloon, jos (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Vertauksen lisääminen epäonnistui"); palata; } esp_now_register_recv_cb (OnDataRecv); // kutsua funktion OnDataRecv saatuaan ESPNOW -tiedot send_data (); } void loop () {} void send_data () {Serial.println ("Lähetetään"); // Aseta arvot lähetettäväksi strcpy (myData.a, "THIS IS A CHAR"); // tallenna "THIS IS A CHAR" muuttujalle a aiemmin määritellyistä "datastani". b = random (1, 20); // tallenna satunnainen arvo myData.c = 1.2; // tallenna kelluva myData.d = "ESP32"; // tallenna merkkijono myData.e = false; // tallenna bool // Lähetä tietoja, jotka ovat pienempiä tai yhtä suuria kuin 250 tavua ESP-NOW: n kautta ja palauttaa tilan esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Lähetetty onnistuneesti");} else {Serial.println ("Virhe lähetettäessä tietoja"); }}

ESP8266 KOODI

// Lisää tarvittavat kirjastot

#include // Wifi -ominaisuuksien lisääminen ESP32: een #include // Esp now -toimintojen käyttäminen // tallenna MAC -osoite taulukkoon nimeltä broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*määrittele useiden muuttujien tietotyypit, jotka on jäsennelty ja nimetty uudelleen strukturointiviestiksi*/ typedef struktuuri_viesti {char a [32]; int b; kellua c; Jono d; bool e; } structure_message; // Luo muuttuja struktu_viesti nimeltä myData structure_message myData; // funktio kutsutaan, kun tiedot vastaanotetaan ja tulostaa ne mitätöityinä OnDataRecv (uint8_t * mac, uint8_t * inputData, uint8_t len) {memcpy (& omatiedot, saapuvat tiedot, sizeof (myData)); Serial.print ("Vastaanotetut tavut:"); 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 ("Jono:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sarja.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nViimeisen paketin lähetyksen tila: / t"); Serial.println (sendStatus == 1? "Toimitus onnistui": "Toimitus epäonnistui"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Aseta arvot lähetettäväksi strcpy (myData.a, "THIS IS A CHAR"); // tallenna "THIS IS A CHAR" muuttujalle a aiemmin määritellyistä "datastani". b = random (1, 20); // tallenna satunnainen arvo myData.c = 1.2; // tallenna kelluva myData.d = "ESP8266"; // tallenna merkkijono myData.e = false; // tallenna bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Aseta siirtonopeus sarjaliikenteelle ESP Serial.beginin kanssa (115200); // Aseta laite Wi-Fi Stationiksi WiFi.mode (WIFI_STA); // Käynnistää wifi // Init ESP-NOW ja palauttaa tilan, jos (esp_now_init ()! = 0) {Serial.println ("Virhe ESP-NOW-alustuksessa"); palata; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Vertaa ei voitu lisätä"); palata; } 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äärittää tämän esp: n roolin esp_now_register_recv_cb (OnDataRecv); // kutsua funktiota OnDataRecv ESPNOW -tietojen vastaanottamisen jälkeen} void loop () {}

Vaihe 8: VIITTEET

ESPNOW_32_Example

ESPNOW_8266 Esimerkki

WIFI. H

ESP8266WiFi.h

esp_now.h ESP8266: lle

esp_now.h ESP32: lle

esp_now virallinen asiakirja (Parempi selitys toiminnoista)

ESP-NOW virallinen opas

Suositeltava: