Talaan ng mga Nilalaman:

Paano Gumawa ng Maramihang ESP Talk Sa Pamamagitan ng ESP-NGAYON Gamit ang ESP32 at ESP8266: 8 Mga Hakbang
Paano Gumawa ng Maramihang ESP Talk Sa Pamamagitan ng ESP-NGAYON Gamit ang ESP32 at ESP8266: 8 Mga Hakbang

Video: Paano Gumawa ng Maramihang ESP Talk Sa Pamamagitan ng ESP-NGAYON Gamit ang ESP32 at ESP8266: 8 Mga Hakbang

Video: Paano Gumawa ng Maramihang ESP Talk Sa Pamamagitan ng ESP-NGAYON Gamit ang ESP32 at ESP8266: 8 Mga Hakbang
Video: ESP8266 Project: How to control AC bulb or load using Relay with NodeMCU and D1 Mini over WiFi 2024, Nobyembre
Anonim
Paano Gumawa ng Maramihang ESP Talk Sa Pamamagitan ng ESP-NGAYON Gamit ang ESP32 at ESP8266
Paano Gumawa ng Maramihang ESP Talk Sa Pamamagitan ng ESP-NGAYON Gamit ang ESP32 at ESP8266

Sa aking patuloy na proyekto, kailangan ko ng maraming ESP upang makipag-usap sa bawat isa nang walang isang router. Upang magawa ito, gagamitin ko ang ESP-NGAYON upang makakonekta ang wireless sa bawat isa nang walang router sa ESP.

Mga gamit

Mga Bagay na Ginamit Ko:

Modyul ng ESP32 DEV

NODEMCU 1.0 (Module ng ESP12E)

Hakbang 1: Kunin ang Address ng Board Mac

Kunin ang Address ng Board Mac
Kunin ang Address ng Board Mac
Kunin ang Address ng Board Mac
Kunin ang Address ng Board Mac

Sa pamamagitan ng ESP-ngayon, ang mga aparatong ESP ay nakikipag-usap sa bawat isa sa pamamagitan ng pagpapadala ng data sa kanilang natatanging address habang nakakonekta sa isang panloob na network ng acces point na ginawa sa pag-intilaze ng esp ngayon.. Kaya, tukuyin ang MAC address ng bawat aparato. Nakalakip ang aking Mga Setting ng Linya ng ESP32 at ESP8266

PARA SA ESP32

# isama ang "WiFi.h" // Upang ma-access ang mga kakayahan sa ESP32 WIFI

void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // prints its MAC Address} void loop () {}

PARA SA ESP8266

#include // Library na ginamit upang ma-access ang mga kakayahan ng ESP8266 WIFI

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // prints its MAC Address} void loop () {}

Ang aking ADDRESS sa MAC ay:

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

Hakbang 2: Paano Gawing Gumagana ang ESP-NGAYON

Narito ang isang pangkalahatang ideya sa kung paano ito gawing gumagana:

  1. Isama ang esp ngayon at mga library ng wifi
  2. I-save ang mac address ng tatanggap na ESP
  3. Tukuyin ang istraktura ng data ng ipadala / natanggap na mensahe
  4. Sa pag-setup, itakda ang wifi sa mode ng istasyon
  5. Pasimulan ang esp_now
  6. gumawa at magparehistro ng call back function na tinawag pagkatapos ng pagpapadala at pagtanggap ng data
  7. Para sa Esp8266, tukuyin ang papel nito
  8. irehistro ang peer o tatanggap esp
  9. Magpadala ng data

Hakbang 3: Mga FUNCTION NG ESP-NGAYON (ESP32)

esp_now_init (walang bisa)

Bumalik:

  • ESP_OK: magtagumpay
  • ESP_ERR_ESPNOW_INTERNAL: Panloob na error

Paglalarawan:

Simulan ang pagpapaandar ng ESPNOW

esp_now_register_send_cb (cb)

Nagbabalik:

  • ESP_OK: magtagumpay
  • ESP_ERR_ESPNOW_NOT_INIT: Ang ESPNOW ay hindi naisauna
  • ESP_ERR_ESPNOW_INTERNAL: panloob na error

Mga Parameter:

  • cb: pangalan ng pagpapaandar ng callback pagkatapos magpadala ng data ng ESPNOW kasama ang mga parameter na ito:

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

      • mac_addr: mac address ng tatanggap
      • katayuan:

        • 1 = tagumpay
        • 0 = mabibigo

Paglalarawan:

Tumawag sa pagpapaandar na OnDataSent pagkatapos magpadala ng data ng ESPNOW

esp_now_add_peerconst esp_now_peer_info_t * peer)

Nagbabalik:

  • ESP_OK: magtagumpay
  • ESP_ERR_ESPNOW_NOT_INIT: Ang ESPNOW ay hindi naisauna
  • ESP_ERR_ESPNOW_ARG: di-wastong argumento
  • ESP_ERR_ESPNOW_Full: puno ng listahan ng mga kapantay
  • ESP_ERR_ESPNOW_NO_MEM: wala sa memorya
  • ESP_ERR_ESPNOW_EXIST: ang peer ay mayroon na

Mga Parameter:

  • peer: impormasyon ng peer na may sumusunod na data:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; Ang ESPNOW peer MAC address na iyon din ang MAC address ng istasyon o softap

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW peer local master key na ginagamit upang i-encrypt ang data

    • uint8_t channel

      Ang Wi-Fi channel na ginagamit ng peer upang magpadala / makatanggap ng data ng ESPNOW. Kung ang halaga ay 0, gamitin ang kasalukuyang channel kung aling mga istasyon o softap ang nasa. Kung hindi man, dapat itong itakda bilang ang channel kung saan naka-on ang istasyon o softap

    • wifi_interface_t ifidx

      Ang interface ng Wi-Fi na ginagamit ng peer upang magpadala / makatanggap ng data ng ESPNOW

    • naka-encrypt ang bool

      Ang data ng ESPNOW na ipinapadala / natatanggap ng kapantay na ito ay naka-encrypt o hindi

    • walang bisa * priv

      Ang pribadong data ng ESPNOW peer

Paglalarawan:

Magdagdag ng isang peer to peer list

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

Nagbabalik:

  • ESP_OK: magtagumpay
  • ESP_ERR_ESPNOW_NOT_INIT: Ang ESPNOW ay hindi naisauna
  • ESP_ERR_ESPNOW_ARG: di-wastong argumento
  • ESP_ERR_ESPNOW_INTERNAL: panloob na error
  • ESP_ERR_ESPNOW_NO_MEM: wala sa memorya
  • ESP_ERR_ESPNOW_NOT_FOUND: hindi nahanap ang kapantay
  • ESP_ERR_ESPNOW_IF: kasalukuyang WiFi interface ay hindi tumutugma sa peer

Mga Parameter:

  • peer_addr: peer MAC address
  • data: data na ipadala
  • len: haba ng data

Paglalarawan:

Magpadala ng data ng ESPNOW. Para sa ilang mga kaso, nangyayari ito:

  • Kung ang peer_addr ay hindi NULL, magpadala ng data sa peer na ang MAC address ay tumutugma sa peer_addr
  • Kung ang peer_addr ay Null, magpadala ng data sa lahat ng mga kapantay na naidagdag sa listahan ng mga kapantay
  • Ang maximum na haba ng data ay dapat mas mababa sa ESP_NOW_MAX_DATA_LEN
  • Ang buffer na itinuro ng argument ng data ay hindi kailangang wasto pagkatapos ng pagbalik ng esp_now_send

esp_now_register_recv_cb (cb)

Nagbabalik:

  • ESP_OK: magtagumpay
  • ESP_ERR_ESPNOW_NOT_INIT: Ang ESPNOW ay hindi naisauna
  • ESP_ERR_ESPNOW_INTERNAL: panloob na error

Mga Parameter:

  • cb: pagpapaandar ng callback para sa pagtanggap ng data ng ESPNOW

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

      • mac_addr:

        mac address ng tatanggap

      • * data:

        natanggap ang data

      • data_len

        haba ng byte ng data

Paglalarawan:

Tawagan ang function na CB pagkatapos matanggap ang data ng ESPNOW

Hakbang 4: Mga FUNCTION NG ESP-NGAYON (ESP8266)

FUNCTIONS DESCRIPTION ESP32 ESP8266

int esp_now_init (walang bisa)

Nagbabalik:

  • 1 = tagumpay
  • 0 = mabibigo

Paglalarawan

Simulan ang pagpapaandar ng ESPNOW

int esp_now_set_self_role (u8 role)

Mga Parameter:

  • ESP_NOW_ROLE_IDLE: hindi pinapayagan ang paghahatid ng data.
  • ESP_NOW_ROLE_CONTROLLER: ang priyoridad ay ibinibigay sa Sation interface
  • ESP_NOW_ROLE_SLAVE: ang priyoridad ay ibinibigay sa interface ng SoftAP
  • ESP_NOW_ROLE_COMBO: ang priyoridad ay ibinibigay sa SoftAPinterface

Paglalarawan

Itinatakda ang Tungkulin ng aparato

int esp_now_register_send_cb (cb)

Nagbabalik:

  • 1 = tagumpay
  • 0 = mabibigo

Mga Parameter:

  • cb: pangalan ng pagpapaandar ng callback pagkatapos magpadala ng data ng ESPNOW kasama ang mga parameter na ito:

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

      • mac_addr: mac address ng tatanggap
      • katayuan:

        • 1 = tagumpay
        • 0 = mabibigo

Paglalarawan

Tumawag sa pagpapaandar na OnDataSent pagkatapos magpadala ng data ng ESPNOW

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

Nagbabalik:

  • 1 = tagumpay
  • 0 = mabibigo

Mga Parameter:

  • mac_addr

    mac address ng kapantay

  • papel
  • channel

    Kung ang halaga ay 0, gamitin ang kasalukuyang channel kung aling mga istasyon o softap ang nasa. Kung hindi man, dapat itong itakda bilang ang channel kung saan naka-on ang istasyon o softap

  • * susi

    susi para sa pag-encrypt

  • key_len

    haba ng susi

Paglalarawan:

Magdagdag ng isang peer to peer list

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

Nagbabalik:

  • 1 = Tagumpay
  • 0 = Nabigo

Mga Parameter:

  • peer_addr: peer MAC address
  • data: data na ipadala
  • len: haba ng data

Paglalarawan:

Magpadala ng data ng ESPNOW. Para sa ilang mga kaso, nangyayari ito:

  • Kung ang peer_addr ay hindi NULL, magpadala ng data sa peer na ang MAC address ay tumutugma sa peer_addr
  • Kung ang peer_addr ay Null, magpadala ng data sa lahat ng mga kapantay na naidagdag sa listahan ng mga kapantay
  • Ang maximum na haba ng data ay dapat mas mababa sa ESP_NOW_MAX_DATA_LEN
  • Ang buffer na itinuro ng argument ng data ay hindi kailangang wasto pagkatapos ng pagbalik ng esp_now_send

int esp_now_register_recv_cb (cb)

Nagbabalik:

  • 1 = Tagumpay
  • 0 = Nabigo

Mga Parameter:

  • cb: pagpapaandar ng callback para sa pagtanggap ng data ng ESPNOW

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

      • mac_addr:

        mac address ng tatanggap

      • * data:

        natanggap ang data

      • data_len

        haba ng byte ng data

Paglalarawan:

Tawagan ang function na CB pagkatapos matanggap ang data ng ESPNOW

Hakbang 5: One Way Communication (ESP32 Bilang Nagpapadala)

Ang ESP32 ay nagpapadala ng data sa isang ESP8266. kasama ang code na ito. Baguhin ang broadcastAddress sa iyong address ng mac ng tumatanggap na tumatanggap. Ang akin ay A4: CF: 12: C7: 9C: 77

// Magdagdag ng mga kinakailangang aklatan

#include // Upang ma-access ang esp na gumagana ngayon #include // Upang Magdagdag ng Mga Kakayahang Wifi sa ESP32 // i-save ang MAC Address sa isang array na pinangalanang broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC address ng aking tatanggap / * tukuyin ang mga uri ng data ng maramihang mga variable na nakabalangkas at pinalitan ng pangalan ang lahat ng ito bilang struct_message * / typedef struktural_message {char a [32]; int b; lumutang c; String d; bool e; } struct_message; // Lumikha ng isang struct_message na tinatawag na myData struct_message myData; // function na tinatawag kapag ipinadala ang data upang mai-print ang status nito na walang bisa OnDataSent (const uint8_t * mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nLast Packet Send Status: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Tagumpay sa Paghahatid": "Nabigo ang Paghahatid"); } void setup () {// Itakda ang rate ng baud para sa serial na komunikasyon sa ESP Serial.begin (115200); // Itakda ang aparato bilang isang Wi-Fi Station WiFi.mode (WIFI_STA); // Sinisimulan ang wifi // Init ESP-NGAYON at ibabalik ang katayuan nito kung (esp_now_init ()! = ESP_OK) {Serial.println ("Error na nagpapasimula sa ESP -NOW "); bumalik; } // tawagan ang pagpapaandar na OnDataSent pagkatapos magpadala ng data ng ESPNOW esp_now_register_send_cb (OnDataSent); // Magrehistro ng peer esp_now_peer_info_t peerInfo; // ipasimula at italaga ang impormasyon ng kapwa bilang isang pointer sa isang addres memcpy (peerInfo.peer_addr, broadcastAddress, 6); // copy the value of broadcastAddress with 6 bytes to peerInfo.peer_addr peerInfo.channel = 0; // channel kung saan pinag-uusapan ang esp. Ang 0 ay nangangahulugang hindi natukoy at ipapadala ang data sa kasalukuyang channel. Ang 1-14 ay wastong mga channel na pareho sa lokal na aparato na peerInfo.encrypt = false; // not encrypt // Idagdag ang aparato sa nakapares na listahan ng aparato kung (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nabigong magdagdag ng peer"); bumalik; }} void loop () {// Itakda ang mga halaga upang maipadala ang strcpy (myData.a, "ITO AY ISANG CHAR"); // save "ITO AY ISANG CHAR" upang mai-variable ang isang aking "data" na tinukoy nang mas maaga myData.b = random (1, 20); // save a random value myData.c = 1.2; // save a float myData.d = "Hello"; // save a string myData.e = false; // save a bool // Magpadala ng data na mas mababa sa o pantay na 250 bytes sa pamamagitan ng ESP-NGAYON at ibabalik ang katayuan nito esp_err_t resulta = esp_now_send (broadcastAddress, (uint8_t *) at myData, sizeof (myData)); kung (resulta == ESP_OK) {Serial.println ("Ipinadala nang matagumpay"); } iba pa {Serial.println ("Error sa pagpapadala ng data"); } pagkaantala (2000); }

Ang ESP8266 ay tumatanggap ng data mula sa ESP32 gamit ang code na ito.

// Magdagdag ng mga kinakailangang aklatan

#include // To Add Wifi Capilities on ESP32 #include // To access the esp now functions / * tukuyin ang mga uri ng data ng maramihang mga variable na nakabalangkas at pinalitan ng pangalan ang lahat ng ito bilang struct_message * / typedef struct struct_message {char a [32]; int b; lumutang c; String d; bool e; } struct_message; // Lumikha ng isang variable na struct_message na tinatawag na myData struct_message myData; // function na tinawag kapag natanggap ang data at na-print ito na walang bisa OnDataRecv (uint8_t * mac, uint8_t * papasok naData, uint8_t len) {memcpy (& myData, papasok naData, laki ng (myData)); Serial.print ("Natanggap ang mga byte:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Itakda ang rate ng baud para sa serial na komunikasyon sa ESP Serial.begin (115200); // Itakda ang aparato bilang isang Wi-Fi Station WiFi.mode (WIFI_STA); // Sinisimulan ang wifi // Init ESP-NGAYON at ibabalik ang katayuan nito kung (esp_now_init ()! = 0) {Serial.println ("Error sa pagsisimula ng ESP-NGAYON"); bumalik; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Tinutukoy ang papel na ginagampanan ng esp esp_now_register_recv_cb (OnDataRecv); // call the function OnDataRecv pagkatapos matanggap ang data ng ESPNOW} void loop () {}

Hakbang 6: One Way Communication (ESP8266 Bilang Nagpapadala)

Ang ESP8266 ay nagpapadala ng data sa isang ESP32. kasama ang code na ito. Baguhin ang broadcastAddress sa iyong address ng mac ng tumatanggap na tumatanggap. Ang aking esp32 address ay 30: AE: A4: F5: 03: A4. Para sa iba pang mga pagpapaandar para sa esp8266 pumunta dito

// Magdagdag ng mga kinakailangang aklatan

#include // To Add Wifi Capilities on ESP32 #include // To access the esp now functions // save the MAC Address in an array called broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * tukuyin ang mga uri ng data ng maraming mga variable na nakabalangkas at pinalitan ng pangalan ang lahat ng ito bilang struct_message * / typedef struktural_message {char a [32]; int b; lumutang c; String d; bool e; } struct_message; // Lumikha ng isang nakabalangkas na variable na tinatawag na myData struct_message myData; // function na tinatawag kapag ipinadala ang data at nai-print ang status nito na walang bisa OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLast Packet Send Status: / t"); Serial.println (sendStatus == 1? "Tagumpay sa Paghahatid": "Nabigo ang Paghahatid"); } void setup () {// Itakda ang rate ng baud para sa serial na komunikasyon sa ESP Serial.begin (115200); // Itakda ang aparato bilang isang Wi-Fi Station WiFi.mode (WIFI_STA); // Sinisimulan ang wifi // Init ESP-NGAYON at ibabalik ang katayuan nito kung (esp_now_init ()) {Serial.println ("Error na nagpapasimula sa ESP-NGAYON"); bumalik; } esp_now_register_send_cb (OnDataSent); // call the function OnDataSent pagkatapos magpadala ng data ng ESPNOW // Idagdag ang aparato sa listahan ng nakapares na aparato kung (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Nabigong magdagdag ng peer"); bumalik; }} void loop () {// Itakda ang mga halaga upang maipadala ang strcpy (myData.a, "ITO AY ISANG CHAR"); // save "ITO AY ISANG CHAR" upang mai-variable ang isang aking "data" na tinukoy nang mas maaga myData.b = random (1, 20); // save a random value myData.c = 1.2; // save a float myData.d = "SP8266"; // save a string myData.e = false; // save a bool // Magpadala ng data na mas mababa sa o pantay na 250 bytes sa pamamagitan ng ESP-NGAYON at ibabalik ang katayuan nito int resulta = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); kung (esp_now_init ()! = 0) {Serial.println ("Naipadala nang may tagumpay"); } iba pa {Serial.println ("Error sa pagpapadala ng data"); } pagkaantala (2000); }

Ang ESP32 ay tumatanggap ng data mula sa isang ESP8266. kasama ang code na ito. Para sa iba pang mga pagpapaandar sa refere dito

// Magdagdag ng mga kinakailangang aklatan

#include // Upang ma-access ang esp na gumana ngayon #include // Upang Magdagdag ng Mga Kakayahang Wifi sa ESP32 / * tukuyin ang mga uri ng data ng maraming mga variable na nakabalangkas at pinalitan ng pangalan ang lahat ng mga ito bilang struct_message * / typedef struct struct_message {char a [32]; int b; lumutang c; String d; bool e; } struct_message; // Lumikha ng isang variable na struct_message na tinatawag na myData struct_message myData; // function na tinawag kapag natanggap ang data at na-print itong walang bisa OnDataRecv (const uint8_t * mac, const uint8_t * papasokData, int len) {memcpy (& myData, papasok naData, sizeof (myData)); Serial.print ("Natanggap ang mga byte:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Itakda ang rate ng baud para sa serial na komunikasyon sa ESP Serial.begin (115200); // Itakda ang aparato bilang isang Wi-Fi Station WiFi.mode (WIFI_STA); // Sinisimulan ang wifi // Init ESP-NGAYON at ibabalik ang katayuan nito kung (esp_now_init ()! = 0) {Serial.println ("Error sa pagsisimula ng ESP-NGAYON"); bumalik; } esp_now_register_recv_cb (OnDataRecv); // call the function OnDataRecv pagkatapos matanggap ang data ng ESPNOW} void loop () {}

Hakbang 7: DALANG PARAAN NG KOMUNIKASYON

DALAWANG PARAANG KOMUNIKASYON
DALAWANG PARAANG KOMUNIKASYON
DALAWANG PARAANG KOMUNIKASYON
DALAWANG PARAANG KOMUNIKASYON

Nagpapadala ang ESP32 ng data sa pagsisimula sa ESP8266. Ang ESP8266 ay naglilimbag ng natanggap na mensahe at pagkatapos ay ang mga tugon na kung saan ang ESP32 ay naka-print sa serial monitor nito.

CO32 ng ESP32

// Magdagdag ng mga kinakailangang aklatan

#include // Upang ma-access ang esp na gumagana ngayon #include // Upang Magdagdag ng Mga Kakayahang Wifi sa ESP32 // i-save ang MAC Address sa isang array na pinangalanang broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC address ng aking tatanggap / * tukuyin ang mga uri ng data ng maramihang mga variable na nakabalangkas at pinalitan ng pangalan ang lahat ng ito bilang struct_message * / typedef struktural_message {char a [32]; int b; lumutang c; String d; bool e; } struct_message; // Lumikha ng isang struct_message na tinatawag na myData struct_message myData; // function na tinatawag kapag ipinadala ang data upang mai-print ang status nito na walang bisa OnDataSent (const uint8_t * mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nLast Packet Send Status: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Tagumpay sa Paghahatid": "Nabigo ang Paghahatid"); kung (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} i-void ang OnDataRecv (const uint8_t * mac, const uint8_t * papasok naData, int len) {memcpy (& myData, papasok naData, sizeof (myData)); Serial.print ("Natanggap ang mga byte:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Itakda ang rate ng baud para sa serial na komunikasyon sa ESP Serial.begin (115200); // Itakda ang aparato bilang isang Wi-Fi Station WiFi.mode (WIFI_STA); // Sinisimulan ang wifi // Init ESP-NGAYON at ibabalik ang katayuan nito kung (esp_now_init ()! = ESP_OK) {Serial.println ("Error na nagpapasimula sa ESP -NOW "); bumalik; } // tawagan ang pagpapaandar na OnDataSent pagkatapos magpadala ng data ng ESPNOW esp_now_register_send_cb (OnDataSent); // Magrehistro ng peer esp_now_peer_info_t peerInfo; // ipasimula at italaga ang impormasyon ng kapwa bilang isang pointer sa isang addres memcpy (peerInfo.peer_addr, broadcastAddress, 6); // copy the value of broadcastAddress with 6 bytes to peerInfo.peer_addr peerInfo.channel = 0; // channel kung saan pinag-uusapan ang esp. Ang 0 ay nangangahulugang hindi natukoy at ipapadala ang data sa kasalukuyang channel. Ang 1-14 ay wastong mga channel na pareho sa lokal na aparato na peerInfo.encrypt = false; // not encrypt // Idagdag ang aparato sa nakapares na listahan ng aparato kung (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nabigong magdagdag ng peer"); bumalik; } esp_now_register_recv_cb (OnDataRecv); // call the function OnDataRecv pagkatapos matanggap ang data ng ESPNOW send_data (); } void loop () {} void send_data () {Serial.println ("Sending"); // Itakda ang mga halaga upang maipadala ang strcpy (myData.a, "ITO AY ISANG CHAR"); // save "ITO AY ISANG CHAR" upang mai-variable ang isang aking "data" na tinukoy nang mas maaga myData.b = random (1, 20); // save a random value myData.c = 1.2; // save a float myData.d = "ESP32"; // save a string myData.e = false; // save a bool // Magpadala ng data na mas mababa sa o pantay na 250 bytes sa pamamagitan ng ESP-NGAYON at ibabalik ang katayuan nito esp_err_t resulta = esp_now_send (broadcastAddress, (uint8_t *) at myData, sizeof (myData)); kung (resulta == ESP_OK) {Serial.println ("Ipinadala nang may tagumpay");} iba pa {Serial.println ("Error sa pagpapadala ng data"); }}

KODE ng ESP8266

// Magdagdag ng mga kinakailangang aklatan

#include // To Add Wifi Capilities on ESP32 #include // To access the esp now functions // save the MAC Address in an array called broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * tukuyin ang mga uri ng data ng maraming mga variable na nakabalangkas at pinalitan ng pangalan ang lahat ng ito bilang struct_message * / typedef struktural_message {char a [32]; int b; lumutang c; String d; bool e; } struct_message; // Lumikha ng isang variable na struct_message na tinatawag na myData struct_message myData; // function na tinawag kapag natanggap ang data at na-print ito na walang bisa OnDataRecv (uint8_t * mac, uint8_t * papasok naData, uint8_t len) {memcpy (& myData, papasok naData, laki ng (myData)); Serial.print ("Natanggap ang mga byte:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } void OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLast Packet Send Status: / t"); Serial.println (sendStatus == 1? "Tagumpay sa Paghahatid": "Nabigo ang Paghahatid"); kung (sendStatus! = 1) {send_data (); }} void send_data () {// Itakda ang mga halaga upang magpadala ng strcpy (myData.a, "ITO AY ISANG CHAR"); // save "ITO AY ISANG CHAR" upang mai-variable ang isang aking "data" na tinukoy nang mas maaga myData.b = random (1, 20); // save a random value myData.c = 1.2; // save a float myData.d = "ESP8266"; // save a string myData.e = false; // save a bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Itakda ang rate ng baud para sa serial na komunikasyon sa ESP Serial.begin (115200); // Itakda ang aparato bilang isang Wi-Fi Station WiFi.mode (WIFI_STA); // Sinisimulan ang wifi // Init ESP-NGAYON at ibabalik ang katayuan nito kung (esp_now_init ()! = 0) {Serial.println ("Error sa pagsisimula ng ESP-NGAYON"); bumalik; } kung (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Nabigong magdagdag ng peer"); bumalik; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Tinutukoy ang papel na ginagampanan ng esp esp_now_register_recv_cb (OnDataRecv); // call the function OnDataRecv pagkatapos matanggap ang data ng ESPNOW} void loop () {}

Hakbang 8: Mga SANGGUNIAN

ESPNOW_32_Example

Halimbawa ng ESPNOW_8266

WIFI.h

ESP8266WiFi.h

esp_now.h para sa ESP8266

esp_now.h para sa ESP32

esp_now opisyal na dokumento (Mas mahusay na Paliwanag ng mga pag-andar)

Opisyal na Gabay sa ESP-NGAYON

Inirerekumendang: