Përmbajtje:
- Furnizimet
- Hapi 1: Merrni Adresën e Bordit Mac
- Hapi 2: Si ta bëni punën ESP-TANI
- Hapi 3: FUNKSIONET ESP-TANI (ESP32)
- Hapi 4: FUNKSIONET ESP-TANI (ESP8266)
- Hapi 5: Komunikimi me një drejtim (ESP32 si dërgues)
- Hapi 6: Komunikimi me një drejtim (ESP8266 Si Dërgues)
- Hapi 7: KOMUNIKIMI ME DY RRUG
- Hapi 8: REFERIMET
Video: Si të bëni bisedë të shumëfishtë ESP përmes ESP-TANI duke përdorur ESP32 dhe ESP8266: 8 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:14
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
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ë:
- Përfshi esp tani dhe bibliotekat wifi
- Ruani adresën mac të marrësit ESP
- Përcaktoni strukturën e të dhënave të mesazhit të dërguar/marrë
- Në konfigurim, vendosni wifi në modalitetin e stacionit
- Filloni esp_now
- bëni dhe regjistroni funksionin e thirrjes së thirrur pas dërgimit dhe marrjes së të dhënave
- Për Esp8266, përcaktoni rolin e tij
- regjistroni esp -në e bashkëmoshatarit ose marrësit
- 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
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:
Kontrolli i udhëhequr përmes aplikacionit Blynk duke përdorur Nodemcu përmes internetit: 5 hapa
Kontrolli i udhëhequr përmes aplikacionit Blynk duke përdorur Nodemcu në internet: Përshëndetje të gjithëve Sot do t'ju tregojmë se si mund të kontrolloni një LED duke përdorur një smartphone përmes internetit
DIY -- Si të bëni një robot merimangë i cili mund të kontrollohet duke përdorur smartphone duke përdorur Arduino Uno: 6 hapa
DIY || Si të bëni një robot merimangë i cili mund të kontrollohet duke përdorur smartphone duke përdorur Arduino Uno: Ndërsa bëni një robot merimangë, mund të mësoni shumë gjëra për robotikën. Ashtu si bërja e robotëve është edhe argëtuese, edhe sfiduese. Në këtë video ne do t'ju tregojmë se si të bëni një robot Spider, të cilin mund ta përdorim duke përdorur smartphone -in tonë (Androi
Monitorimi i përshpejtimit duke përdorur Raspberry Pi dhe AIS328DQTR duke përdorur Python: 6 hapa
Monitorimi i përshpejtimit duke përdorur Raspberry Pi dhe AIS328DQTR Duke përdorur Python: Përshpejtimi është i kufizuar, mendoj sipas disa ligjeve të Fizikës.- Terry Riley Një cheetah përdor përshpejtim të mahnitshëm dhe ndryshime të shpejta në shpejtësi kur ndiqni. Krijesa më e shpejtë në breg, herë pas here, përdor ritmin e saj të lartë për të kapur prenë.
Si të bëni një dron duke përdorur Arduino UNO - Bëni një kuadopter duke përdorur mikrokontrollues: 8 hapa (me fotografi)
Si të bëni një dron duke përdorur Arduino UNO | Bëni një Quadcopter Duke përdorur Mikrokontrolluesin: HyrjeVizitoni Kanalin Tim në YoutubeNjë drone është një vegël (produkt) shumë e shtrenjtë për të blerë. Në këtë postim do të diskutoj, si ta bëj me çmim të ulët ?? Dhe si mund ta bëni tuajin si ky me çmim të lirë … Epo në Indi të gjitha materialet (motorët, ESC -të
Cikloni një LED RGB përmes spektrit të ngjyrave duke përdorur Raspberry Pi 2 dhe Scratch: 11 hapa
Ecni me një RGB LED përmes Spektrit të Ngjyrave Duke Përdorur Raspberry Pi 2 dhe Scratch: Update Notes Thur 25 Shkurt, 2016: Unë kam përmirësuar programin Scratch dhe kam ridizajnuar programin tim të udhëzueshëm. Përshëndetje djema, me këtë projekt kam dashur të përdor Scratch për të qarkulluar një LED RGB përmes spektrit të ngjyrave. Ka një mori projektesh që e bëjnë këtë me