Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Hanki hallituksen Mac -osoite
- Vaihe 2: Kuinka saada ESP-NOW toimimaan
- Vaihe 3: ESP-NOW-TOIMINNOT (ESP32)
- Vaihe 4: ESP-NYT-TOIMINNOT (ESP8266)
- Vaihe 5: Yksisuuntainen viestintä (ESP32 lähettäjänä)
- Vaihe 6: Yksisuuntainen viestintä (ESP8266 lähettäjänä)
- Vaihe 7: KAKSI TIETOA
- Vaihe 8: VIITTEET
Video: Useiden ESP-keskustelujen tekeminen ESP-NOW: n avulla ESP32: n ja ESP8266: n avulla: 8 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
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
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:
- Sisällytä esp nyt ja wifi -kirjastot
- Tallenna vastaanottajan ESP: n mac -osoite
- Määritä lähetetyn/vastaanotetun viestin tietorakenne
- Aseta asetuksissa wifi asematilaan
- Alusta esp_now
- soittaa ja rekisteröidä takaisinsoittotoiminto, joka kutsutaan tietojen lähettämisen ja vastaanottamisen jälkeen
- Määritä Esp8266: lle sen rooli
- rekisteröi vertaishenkilö tai vastaanottaja, esim
- 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
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:
Poista useiden kuvien tausta Photoshop 2020 -ohjelmalla: 5 vaihetta
Poista useiden kuvien tausta Photoshop 2020 -ohjelmalla: Kuvan taustan poistaminen on erittäin helppoa nyt! Näin voit poistaa Adobe Photoshop 2020: n avulla useiden (erä) kuvien taustan yksinkertaisella komentosarjalla
Useiden analogisten arvojen lukeminen yhdellä analogisella nastalla: 6 vaihetta (kuvien kanssa)
Useiden analogisten arvojen lukeminen yhdellä analogisella nastalla: Tässä opetusohjelmassa näytän sinulle, kuinka voit lukea useita analogisia arvoja käyttämällä vain yhtä analogiatulonappia
Useiden LEDien ohjaaminen Pythonilla ja Raspberry Pi: n GPIO -nastoilla: 4 vaihetta (kuvilla)
Useiden LED -valojen ohjaaminen Pythonilla ja Raspberry Pi: n GPIO -nastoilla: Tämä käyttöohje osoittaa, kuinka voit ohjata RaspberryPi -laitteesi useita GPIO -nastoja neljän LED -valon käyttämiseksi. Se myös esittelee sinulle parametrit ja ehdolliset lausekkeet Pythonissa. Aiempi ohjeemme Raspberry Pi: n GPIO -nastojen käytöstä
UbiDots-ESP32: n yhdistäminen ja useiden anturitietojen julkaiseminen: 6 vaihetta
UbiDots-ESP32: n yhdistäminen ja useiden anturitietojen julkaiseminen: ESP32 ja ESP 8266 ovat hyvin tuttuja SoC IoT-alalla. Nämä ovat eräänlainen siunaus IoT -projekteille. ESP 32 on laite, jossa on integroitu WiFi ja BLE. Anna vain SSID, salasana ja IP -määritykset ja integroi asiat
Bluetooth -sovittimen tekeminen Pt.2 (yhteensopivan kaiuttimen tekeminen): 16 vaihetta
Bluetooth -sovittimen tekeminen Pt.2 (yhteensopivan kaiuttimen tekeminen): Tässä ohjeessa näytän sinulle, kuinka voin käyttää Bluetooth -sovitinta tehdäkseni vanhan kaiuttimen Bluetooth -yhteensopivaksi.*Jos et ole lukenut ensimmäistä ohjeeni " Bluetooth -sovitin " Ehdotan, että teet niin ennen kuin jatkat. C