ዝርዝር ሁኔታ:

ESP32 ን እና ESP8266: 8 ደረጃዎችን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ንግግርን እንዴት ማድረግ እንደሚቻል
ESP32 ን እና ESP8266: 8 ደረጃዎችን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ንግግርን እንዴት ማድረግ እንደሚቻል

ቪዲዮ: ESP32 ን እና ESP8266: 8 ደረጃዎችን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ንግግርን እንዴት ማድረግ እንደሚቻል

ቪዲዮ: ESP32 ን እና ESP8266: 8 ደረጃዎችን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ንግግርን እንዴት ማድረግ እንደሚቻል
ቪዲዮ: Установка приложения ArduBlock 2024, ሀምሌ
Anonim
ESP32 ን እና ESP8266 ን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ውይይት እንዴት እንደሚደረግ
ESP32 ን እና ESP8266 ን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ውይይት እንዴት እንደሚደረግ

በሂደት ላይ ባለው ፕሮጀክቴ ላይ ፣ ያለ ራውተር እርስ በእርስ ለመነጋገር ብዙ ESP እፈልጋለሁ። ይህንን ለማድረግ በ ESP ላይ ራውተር ሳይኖር ገመድ አልባ እርስ በእርስ እንዲገናኝ ESP-NOW ን እጠቀማለሁ።

አቅርቦቶች

እኔ የተጠቀምኳቸው ነገሮች ፦

ESP32 DEV ሞዱል

NODEMCU 1.0 (ESP12E ሞዱል)

ደረጃ 1 የቦርድ ማክ አድራሻ ያግኙ

የቦርድ ማክ አድራሻን ያግኙ
የቦርድ ማክ አድራሻን ያግኙ
የቦርድ ማክ አድራሻን ያግኙ
የቦርድ ማክ አድራሻን ያግኙ

በ ESP-now በኩል ፣ የ ESP መሣሪያዎች አሁን ኢፒን በማዋሃድ ላይ ከተሰራው የውስጠ-ነጥብ ነጥብ አውታረ መረብ ጋር ሲገናኙ መረጃን ወደ ልዩ አድራሻቸው በመላክ እርስ በእርሳቸው ይነጋገራሉ።. ስለዚህ ፣ የእያንዳንዱን መሣሪያ የ MAC አድራሻ ይወስኑ። ተያይ ESል የእኔ ESP32 እና ESP8266 የቦርድ ቅንብሮች

ለ ESP32

#“WiFi.h” ን ያካትቱ // የ ESP32 WIFI ችሎታዎችን ለመድረስ

ባዶነት ማዋቀር () {Serial.begin (115200); Serial.print ("ESP32 ቦርድ MAC አድራሻ:"); Serial.println (WiFi.macAddress ()); // የ MAC አድራሻውን ያትማል} ባዶነት loop () {}

ለ ESP8266

#አካትት /ቤተ -መጽሐፍት የ ESP8266 WIFI ችሎታዎችን ለመድረስ ያገለግል ነበር

ባዶነት ማዋቀር () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 ቦርድ MAC አድራሻ:"); Serial.println (WiFi.macAddress ()); // የ MAC አድራሻውን ያትማል} ባዶነት loop () {}

የእኔ MAC አድራሻ እነዚህ ናቸው

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

ደረጃ 2 ESP-NOW ን እንዴት እንደሚሰራ

እንዴት እንደሚሰራ አጠቃላይ እይታ እነሆ-

  1. ESP ን አሁን እና የ wifi ቤተ -መጽሐፍትን ያካትቱ
  2. የተቀባዩን ESP የማክ አድራሻ ያስቀምጡ
  3. የተላከው/የተቀበለው መልእክት የውሂብ አወቃቀር ይግለጹ
  4. በማዋቀር ላይ wifi ን ወደ ጣቢያው ሁኔታ ያቀናብሩ
  5. Esp_now ን ያስጀምሩ
  6. መረጃ ከላከ እና ከተቀበለ በኋላ የተጠራውን የጥሪ መልሰው ተግባር ያድርጉ እና ይመዝግቡ
  7. ለ Esp8266 ፣ ሚናውን ይግለጹ
  8. አቻውን ወይም ተቀባዩን esp ይመዝገቡ
  9. ውሂብ ላክ

ደረጃ 3 የ ESP-NOW ተግባራት (ESP32)

esp_now_init (ባዶ)

ተመለስ

  • ESP_OK: ይሳካል
  • ESP_ERR_ESPNOW_INTERNAL: የውስጥ ስህተት

መግለጫ:

የ ESPNOW ተግባርን ያስጀምሩ

esp_now_register_send_cb (cb)

ተመላሾች ፦

  • ESP_OK: ይሳካል
  • ESP_ERR_ESPNOW_NOT_INIT ፦ ESPNOW አልተጀመረም
  • ESP_ERR_ESPNOW_INTERNAL: የውስጥ ስህተት

መለኪያዎች ፦

  • cb: በዚህ መመዘኛዎች የ ESPNOW ውሂብ ከላኩ በኋላ የመልሶ ማግኛ ተግባር ስም

    • ባዶ ባዶ cb (const uint8_t *mac_addr ፣ esp_now_send_status_t status)

      • mac_addr: ተቀባዩ የማክ አድራሻ
      • ሁኔታ ፦

        • 1 = ስኬት
        • 0 = አልተሳካም

መግለጫ:

የ ESPNOW ውሂብ ከላኩ በኋላ ተግባሩን OnDataSent ይደውሉ

esp_now_add_peerconst esp_now_peer_info_t *አቻ)

ተመላሾች ፦

  • ESP_OK: ይሳካል
  • ESP_ERR_ESPNOW_NOT_INIT ፦ ESPNOW አልተጀመረም
  • ESP_ERR_ESPNOW_ARG: ልክ ያልሆነ ክርክር
  • ESP_ERR_ESPNOW_FULL: የአቻ ዝርዝር ተሞልቷል
  • ESP_ERR_ESPNOW_NO_MEM: ከማስታወስ ውጭ
  • ESP_ERR_ESPNOW_EXIST ፦ አቻ አለ

መለኪያዎች ፦

  • እኩያ: የአቻ መረጃ ከሚከተለው ውሂብ ጋር

    • uint8_t

      አቻ_አድር [ESP_NOW_ETH_ALEN]; የ ESPNOW የአቻ MAC አድራሻ እንዲሁ የጣቢያ ወይም የሶፍትፕ MAC አድራሻ ነው

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW ውሂብን ለማመስጠር የሚያገለግል የአካባቢያዊ ዋና ቁልፍ አቻ

    • uint8_t ሰርጥ

      አቻ የ ESPNOW ውሂብ ለመላክ/ለመቀበል የሚጠቀምበት የ Wi-Fi ሰርጥ። እሴቱ 0 ከሆነ ፣ የትኛው ጣቢያ ወይም ሶፍታፕ እንደበራ የአሁኑን ሰርጥ ይጠቀሙ። ያለበለዚያ ጣቢያው ወይም ሶፍታፕ በርቶ እንደመሆኑ መጠን መዋቀር አለበት።

    • wifi_interface_t ifidx

      አቻ የ ESPNOW ውሂብ ለመላክ/ለመቀበል የሚጠቀምበት የ Wi-Fi በይነገጽ

    • bool ኢንክሪፕት

      ይህ እኩያ የላከው/የሚቀበለው የ ESPNOW ውሂብ የተመሰጠረ ወይም አይደለም

    • ባዶ *የግል

      ESPNOW የአቻ የግል ውሂብ

መግለጫ:

ለአቻ ዝርዝር ውስጥ አቻ ያክሉ

esp_now_send (const uint8_t *peer_addr ፣ const uint8_t *data ፣ size_t ሌን)

ተመላሾች ፦

  • ESP_OK: ይሳካል
  • ESP_ERR_ESPNOW_NOT_INIT ፦ ESPNOW አልተጀመረም
  • ESP_ERR_ESPNOW_ARG: ልክ ያልሆነ ክርክር
  • ESP_ERR_ESPNOW_INTERNAL: የውስጥ ስህተት
  • ESP_ERR_ESPNOW_NO_MEM: ከማስታወስ ውጭ
  • ESP_ERR_ESPNOW_NOT_FOUND: አቻ አልተገኘም
  • ESP_ERR_ESPNOW_IF: የአሁኑ የ WiFi በይነገጽ ከእኩዮች ጋር አይዛመድም

መለኪያዎች ፦

  • peer_addr: የአቻ MAC አድራሻ
  • ውሂብ: ለመላክ ውሂብ
  • ሌን: የውሂብ ርዝመት

መግለጫ:

የ ESPNOW ውሂብ ላክ። በአንዳንድ ሁኔታዎች ይህ ይከሰታል

  • Peer_addr NULL ካልሆነ ፣ የ MAC አድራሻው ከ peer_addr ጋር ለሚዛመድ ለባልደረባው ውሂብ ይላኩ
  • Peer_addr NULL ከሆነ ፣ በአቻ ዝርዝር ውስጥ ለተጨመሩ ለሁሉም እኩዮች ውሂብን ይላኩ
  • ከፍተኛው የውሂብ ርዝመት ከ ESP_NOW_MAX_DATA_LEN ያነሰ መሆን አለበት
  • በውሂብ ክርክር የተጠቆመው ቋት (esp_now_send) ከተመለሰ በኋላ ትክክለኛ መሆን አያስፈልገውም

esp_now_register_recv_cb (cb)

ተመላሾች ፦

  • ESP_OK: ይሳካል
  • ESP_ERR_ESPNOW_NOT_INIT ፦ ESPNOW አልተጀመረም
  • ESP_ERR_ESPNOW_INTERNAL: የውስጥ ስህተት

መለኪያዎች ፦

  • cb: የ ESPNOW ውሂብን ለመቀበል የመደወያ ተግባር

    • ባዶ ባዶ cb (const uint8_t *mac_addr ፣ const uint8_t *ውሂብ ፣ int data_len)

      • mac_addr ፦

        ተቀባዩ የማክ አድራሻ

      • *ውሂብ ፦

        ውሂብ ይቀበላል

      • ውሂብ_አለን

        የውሂብ ባይት ርዝመት

መግለጫ:

የ ESPNOW ውሂብ ከተቀበሉ በኋላ ወደ ተግባር cb ይደውሉ

ደረጃ 4 የ ESP-NOW ተግባራት (ESP8266)

ተግባራት መግለጫ ESP32 ESP8266

int esp_now_init (ባዶ)

ተመላሾች ፦

  • 1 = ስኬት
  • 0 = አልተሳካም

መግለጫ

የ ESPNOW ተግባርን ያስጀምሩ

int esp_now_set_self_role (u8 ሚና)

መለኪያዎች ፦

  • ESP_NOW_ROLE_IDLE ፦ የውሂብ ማስተላለፍ አይፈቀድም።
  • ESP_NOW_ROLE_CONTROLLER: ቅድሚያ የሚሰጠው ለ Sation በይነገጽ ነው
  • ESP_NOW_ROLE_SLAVE: ቅድሚያ የሚሰጠው ለ SoftAP በይነገጽ ነው
  • ESP_NOW_ROLE_COMBO: ቅድሚያ የሚሰጠው ለ SoftAP በይነገጽ ነው

መግለጫ

የመሣሪያውን ሚና ያዘጋጃል

int esp_now_register_send_cb (cb)

ተመላሾች ፦

  • 1 = ስኬት
  • 0 = አልተሳካም

መለኪያዎች ፦

  • cb: በዚህ መመዘኛዎች የ ESPNOW ውሂብ ከላኩ በኋላ የመልሶ ማግኛ ተግባር ስም

    • ባዶ ባዶ cb (const uint8_t *mac_addr ፣ esp_now_send_status_t status)

      • mac_addr: ተቀባዩ የማክ አድራሻ
      • ሁኔታ ፦

        • 1 = ስኬት
        • 0 = አልተሳካም

መግለጫ

የ ESPNOW ውሂብ ከላኩ በኋላ ተግባሩን OnDataSent ይደውሉ

int esp_now_add_peer (u8 *mac_addr ፣ u8 ሚና ፣ u8 ሰርጥ ፣ u8 *ቁልፍ ፣ u8 key_len)

ተመላሾች ፦

  • 1 = ስኬት
  • 0 = አልተሳካም

መለኪያዎች ፦

  • mac_addr

    የማክ አድራሻ የአቻ

  • ሚና
  • ሰርጥ

    እሴቱ 0 ከሆነ ፣ የትኛው ጣቢያ ወይም ሶፍታፕ እንደበራ የአሁኑን ሰርጥ ይጠቀሙ። ያለበለዚያ ጣቢያው ወይም ሶፍታፕ በርቶ እንደመሆኑ መጠን መዋቀር አለበት

  • *ቁልፍ

    ለማመስጠር ቁልፍ

  • ቁልፍ_አለን

    የቁልፍ ርዝመት

መግለጫ:

ለአቻ ዝርዝር ውስጥ አቻ ያክሉ

int esp_now_send (const uint8_t *peer_addr ፣ const uint8_t *data ፣ size_t ሌን)

ተመላሾች ፦

  • 1 = ስኬት
  • 0 = አልተሳካም

መለኪያዎች ፦

  • peer_addr: የአቻ MAC አድራሻ
  • ውሂብ: ለመላክ ውሂብ
  • ሌን: የውሂብ ርዝመት

መግለጫ:

የ ESPNOW ውሂብ ላክ። በአንዳንድ ሁኔታዎች ይህ ይከሰታል

  • Peer_addr NULL ካልሆነ ፣ የ MAC አድራሻው ከ peer_addr ጋር ለሚዛመድ ለባልደረባው ውሂብ ይላኩ
  • Peer_addr NULL ከሆነ ፣ በአቻ ዝርዝር ውስጥ ለተጨመሩ ለሁሉም እኩዮች ውሂብን ይላኩ
  • ከፍተኛው የውሂብ ርዝመት ከ ESP_NOW_MAX_DATA_LEN ያነሰ መሆን አለበት
  • በውሂብ ክርክር የተጠቆመው ቋት (esp_now_send) ከተመለሰ በኋላ ትክክለኛ መሆን አያስፈልገውም

int esp_now_register_recv_cb (cb)

ተመላሾች ፦

  • 1 = ስኬት
  • 0 = አልተሳካም

መለኪያዎች ፦

  • cb: የ ESPNOW ውሂብን ለመቀበል የመደወያ ተግባር

    • ባዶ ባዶ cb (const uint8_t *mac_addr ፣ const uint8_t *ውሂብ ፣ int data_len)

      • mac_addr ፦

        ተቀባዩ የማክ አድራሻ

      • *ውሂብ ፦

        ውሂብ ይቀበላል

      • ውሂብ_አለን

        የውሂብ ባይት ርዝመት

መግለጫ:

የ ESPNOW ውሂብ ከተቀበሉ በኋላ ወደ ተግባር cb ይደውሉ

ደረጃ 5 - የአንድ መንገድ ግንኙነት (ESP32 እንደ ላኪ)

ESP32 መረጃን ወደ ESP8266 ይልካል። በዚህ ኮድ። የብሮድካስት አድራሻውን ወደ ኮርፖሬሽንስ ተቀባዩ የማክ አድራሻዎ ይለውጡ። የእኔ A4: CF: 12: C7: 9C: 77 ነበር

// አስፈላጊ ቤተ -መጽሐፍትን ያክሉ

#ያካትቱ // የ ESP አሁን ተግባሮችን ለመድረስ #ያካትቱ /// በ ESP32 ላይ የ Wifi ችሎታዎችን ለማከል // የማሰራጫ አድራሻውን በአድራሻ በተሰየመ ድርድር ውስጥ ያስቀምጡ ፣ uint8_t broadcastAddress = {0xA4 ፣ 0xCF ፣ 0x12 ፣ 0xC7 ፣ 0x9C ፣ 0x77}; // የእኔ ተቀባዩ/*MAC አድራሻ የብዙ ተለዋዋጮች የውሂብ አይነቶች የተዋቀሩ እና ሁሉንም እንደ መዋቅራዊ መልእክት*/tyedef struct struct_message {char a [32]; int ለ; ተንሳፋፊ ሐ; ሕብረቁምፊ d; bool e; } መዋቅራዊ_መልክዕት; // myData struct_message myData የሚባል መዋቅራዊ_መልክት ይፍጠሩ ፤ // ተግባሩ ሁኔታውን ባዶ ለማድረግ OnDataSent (const uint8_t *mac_addr ፣ esp_now_send_status_t status) {Serial.print ("\ r / n የመጨረሻው እሽግ መላክ ሁኔታ ፦ / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "የመላኪያ ስኬት": "መላኪያ አልተሳካም"); } ባዶነት ማዋቀር () {// ከ ESP Serial.begin (115200) ጋር ለተከታታይ ግንኙነት የባውድ ተመን ያዘጋጁ። // መሣሪያን እንደ Wi-Fi ጣቢያ WiFi.mode (WIFI_STA) ያዋቅሩ ፤ // wifi ን ይጀምራል/Init ESP-NOW እና (esp_now_init ()! = ESP_OK) {Serial.println ("ESP ን ማስጀመር ላይ ስህተት") -አሁን "); መመለስ; } // የ ESPNOW ውሂብ esp_now_register_send_cb (OnDataSent) ከላኩ በኋላ ተግባሩን OnDataSent ይደውሉ ፤ // አቻን esp_now_peer_info_t peerInfo ይመዝገቡ ፤ // የአቻ መረጃን እንደ ጠቋሚ ለአድራሻዎች memcpy (peerInfo.peer_addr ፣ broadcastAddress ፣ 6) ማስጀመር እና መመደብ ፤ // የብሮድካስት አድራሻውን በ 6 ባይት ወደ peerInfo.peer_addr peerInfo.channel = 0 ይቅዱ። esp የሚያወራበት // ሰርጥ። 0 ማለት ያልተገለፀ እና ውሂብ አሁን ባለው ሰርጥ ላይ ይላካል። 1-14 ከአከባቢው መሣሪያ peerInfo.encrypt = ሐሰት ጋር ተመሳሳይ የሆኑ ትክክለኛ ሰርጦች ናቸው። // አልተመሰጠረም // መሣሪያውን ወደ ተጣመረው የመሣሪያ ዝርዝር ውስጥ ያክሉ (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println («አቻ ማከል አልተሳካም») ፤ መመለስ; }} ባዶነት loop () {// strcpy ን ለመላክ እሴቶችን ያዘጋጁ (myData.a ፣ “ይህ ዋጋ ነው”) ፤ // ቀደም ሲል የተገለጸውን የእኔን “ውሂብ” ለመለወጥ “ይህ ዋጋ ነው” አስቀምጥ myData.b = የዘፈቀደ (1 ፣ 20) ፤ // የዘፈቀደ እሴት ያስቀምጡ myData.c = 1.2; // ተንሳፋፊ አስቀምጥ myData.d = "ሰላም"; // ሕብረቁምፊ ያስቀምጡ myData.e = ሐሰት; // ሐሰተኛ አስቀምጥ // በ ESP-NOW ከ 250 ባይት ያነሰ ወይም እኩል የሆነ ውሂብ ይላኩ እና ሁኔታውን ይመልሳል esp_err_t ውጤት = esp_now_send (broadcastAddress ፣ (uint8_t *) & myData ፣ sizeof (myData)) ፤ ከሆነ (ውጤት == ESP_OK) {Serial.println (“በስኬት የተላከ”) ፤ } ሌላ {Serial.println («ውሂቡን መላክ ላይ ስህተት») ፤ } መዘግየት (2000); }

ESP8266 ይህንን ኮድ በመጠቀም ከ ESP32 መረጃ ይቀበላል።

// አስፈላጊ ቤተ -መጽሐፍትን ያክሉ

#ጨምሮ /በ ESP32 ላይ የ Wifi ችሎታዎችን ለማከል #ያካትቱ // የ esp አሁን ተግባሮችን ለመድረስ /*የብዙ ተለዋዋጮች የውሂብ አይነቶች የተዋቀሩ እና ሁሉንም እንደ መዋቅራዊ_መልክዕ* /tyedef struct struct struct_message {char a [32]; int ለ; ተንሳፋፊ ሐ; ሕብረቁምፊ d; bool e; } መዋቅራዊ_መልክዕት; // myData struct_message myData የሚባል ተለዋዋጭ struct_message ይፍጠሩ ፤ // ተግባሩ ውሂቡ ሲደርሰው ተጠርቶ ባዶ ሆኖ ሲያትመው OnDataRecv (uint8_t * mac ፣ uint8_t * incomingData ፣ uint8_t len) {memcpy (& myData ፣ incomingData ፣ sizeof (myData)); Serial.print ("ባይት ደርሷል:"); Serial.println (ሌን); Serial.print ("ቻር:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("ተንሳፋፊ"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } ባዶነት ማዋቀር () {// ከ ESP Serial.begin (115200) ጋር ለተከታታይ ግንኙነት የባውድ ተመን ያዘጋጁ። // መሣሪያን እንደ Wi-Fi ጣቢያ WiFi.mode (WIFI_STA) ያዘጋጁ ፤ // wifi ይጀምራል // Init ESP-NOW እና (esp_now_init ()! = 0) {Serial.println («ESP-NOW ን ማስጀመር ስህተት») ከሆነ ሁኔታውን ይመልሳል ፤ መመለስ; } ራሱን_አስቀምጥ (ESP_NOW_ROLE_SLAVE); // የዚህን esp_now_register_recv_cb (OnDataRecv) ሚና ይገልጻል ፤ // የ ESPNOW ውሂብን} ባዶነት loop () {} ከተቀበሉ በኋላ ተግባሩን OnDataRecv ይደውሉ

ደረጃ 6 - የአንድ መንገድ ግንኙነት (ESP8266 እንደ ላኪ)

ESP8266 መረጃን ወደ ESP32 ይልካል። በዚህ ኮድ። የብሮድካስት አድራሻውን ወደ ኮርፖሬሽንስ ተቀባዩ የማክ አድራሻዎ ይለውጡ። የእኔ esp32 አድራሻ 30: AE: A4: F5: 03: A4 ነው። ለ esp8266 ለሌሎች ተግባራት እዚህ ይሂዱ

// አስፈላጊ ቤተ -መጽሐፍትን ያክሉ

#ጨምሮ /በ ESP32 ላይ የ Wifi ችሎታዎችን ለማከል #ያካትቱ // የ esp አሁን ተግባሮችን ለመድረስ // የማሰራጫ አድራሻውን በአድራሻ ስም በተዘጋጀ ድርድር ውስጥ ያስቀምጡ ፣ uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*የተዋቀሩትን እና ሁሉንም እንደ መዋቅራዊ_መልእክት*የተሰየሙትን በርካታ ተለዋዋጮች የውሂብ አይነቶች ይግለጹ*/ typedef struct struct_message {char a [32]; int ለ; ተንሳፋፊ ሐ; ሕብረቁምፊ d; bool e; } መዋቅራዊ_መልክዕት; // myData struct_message myData የተባለ የተዋቀረ ተለዋዋጭ ይፍጠሩ ፤ // ተግባር ሲላክ ተጠርቷል እና ሁኔታው ባዶ ሆኖ OnDataSent (uint8_t *mac_addr ፣ uint8_t sendStatus) {Serial.print ("\ r / n የመጨረሻው የጥቅል መላክ ሁኔታ / t"); Serial.println (sendStatus == 1? "የመላኪያ ስኬት": "መላኪያ አልተሳካም"); } ባዶነት ማዋቀር () {// ከ ESP Serial.begin (115200) ጋር ለተከታታይ ግንኙነት የባውድ ተመን ያዘጋጁ። // መሣሪያን እንደ Wi-Fi ጣቢያ WiFi.mode (WIFI_STA) ያዋቅሩ ፤ // wifi ን ይጀምራል/Init ESP-NOW እና (esp_now_init ()) {Serial.println («ESP-NOW ን ማስጀመር ላይ ስህተት»)); መመለስ; } esp_now_register_send_cb (OnDataSent) ፤ // የ ESPNOW ውሂብ ከላኩ በኋላ ወደ ተግባር OnDataSent ይደውሉ/(esp_now_add_peer (broadcastAddress ፣ ESP_NOW_ROLE_CONTROLLER ፣ 1 ፣ NULL ፣ 0)) {Serial.println (“አቻን ማከል አልተሳካም”) ከሆነ መሣሪያውን ወደ ተጣመረው የመሣሪያ ዝርዝር ውስጥ ያክሉ። መመለስ; }} ባዶነት loop () {// strcpy ን ለመላክ እሴቶችን ያዘጋጁ (myData.a ፣ “ይህ ዋጋ ነው”) ፤ // ቀደም ሲል የተገለጸውን የእኔን “ውሂብ” ለመለወጥ “ይህ ዋጋ ነው” አስቀምጥ myData.b = የዘፈቀደ (1 ፣ 20) ፤ // የዘፈቀደ እሴት ያስቀምጡ myData.c = 1.2; // ተንሳፋፊ myData.d = "SP8266" አስቀምጥ; // ሕብረቁምፊ ያስቀምጡ myData.e = ሐሰት; // ሐሰተኛ አስቀምጥ // በ ESP-NOW በኩል ከ 250 ባይት ያነሰ ወይም እኩል የሆነ ውሂብ ይላኩ እና ሁኔታውን ይመልሳል esp_now_send (broadcastAddress ፣ (uint8_t *) & myData ፣ sizeof (myData)) ፤ ከሆነ (esp_now_init ()! = 0) {Serial.println ("በስኬት የተላከ"); } ሌላ {Serial.println («ውሂቡን መላክ ላይ ስህተት») ፤ } መዘግየት (2000); }

ESP32 ከ ESP8266 መረጃ ይቀበላል። በዚህ ኮድ። ለሌሎች ተግባራት እዚህ ይመልከቱ

// አስፈላጊ ቤተ -መጽሐፍትን ያክሉ

#አካታች /// የ ESP አሁን ተግባሮችን ለመድረስ #ያካትቱ // በ ESP32 /*ላይ የ Wifi ችሎታዎችን ለማከል /የተዋቀሩ እና ሁሉንም እንደ ተለዋጭ_መልክዕ* /typedef struct struct struct_message /የተሰየሙ የብዙ ተለዋዋጮች የውሂብ አይነቶችን ይግለጹ {char a [32]; int ለ; ተንሳፋፊ ሐ; ሕብረቁምፊ d; bool e; } መዋቅራዊ_መልክዕት; // myData struct_message myData የሚባል ተለዋዋጭ struct_message ይፍጠሩ ፤ // ተግባሩ ውሂቡ ሲደርሰው ተጠርቶ ባዶ ሆኖ ሲያትመው OnDataRecv (const uint8_t * mac ፣ const uint8_t * incomingData ፣ int len) {memcpy (& myData ፣ incomingData ፣ sizeof (myData)); Serial.print ("ባይት ደርሷል:"); Serial.println (ሌን); Serial.print ("ቻር:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("ተንሳፋፊ"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } ባዶነት ማዋቀር () {// ከ ESP Serial.begin (115200) ጋር ለተከታታይ ግንኙነት የባውድ ተመን ያዘጋጁ። // መሣሪያን እንደ Wi-Fi ጣቢያ WiFi.mode (WIFI_STA) ያዘጋጁ ፤ // wifi ይጀምራል // Init ESP-NOW እና (esp_now_init ()! = 0) {Serial.println («ESP-NOW ን ማስጀመር ስህተት») ከሆነ ሁኔታውን ይመልሳል ፤ መመለስ; } esp_now_register_recv_cb (OnDataRecv); // የ ESPNOW ውሂብን} ባዶነት loop () {} ከተቀበሉ በኋላ ተግባሩን OnDataRecv ይደውሉ

ደረጃ 7 - የሁለት መንገድ ግንኙነት

የሁለት መንገድ ግንኙነት
የሁለት መንገድ ግንኙነት
የሁለት መንገድ ግንኙነት
የሁለት መንገድ ግንኙነት

ESP32 ጅምር ላይ መረጃን ወደ ESP8266 ይልካል። ESP8266 የተቀበለውን መልእክት ያትማል ከዚያም መልሶች ESP32 በተከታታይ ማሳያው ላይ ያትማል።

ESP32 ኮድ

// አስፈላጊ ቤተ -መጽሐፍትን ያክሉ

#ያካትቱ // የ ESP አሁን ተግባሮችን ለመድረስ #ያካትቱ /// በ ESP32 ላይ የ Wifi ችሎታዎችን ለማከል // የማሰራጫ አድራሻውን በአድራሻ በተሰየመ ድርድር ውስጥ ያስቀምጡ ፣ uint8_t broadcastAddress = {0xA4 ፣ 0xCF ፣ 0x12 ፣ 0xC7 ፣ 0x9C ፣ 0x77}; // የእኔ ተቀባዩ/*MAC አድራሻ የብዙ ተለዋዋጮች የውሂብ አይነቶች የተዋቀሩ እና ሁሉንም እንደ መዋቅራዊ መልእክት*/tyedef struct struct_message {char a [32]; int ለ; ተንሳፋፊ ሐ; ሕብረቁምፊ d; bool e; } መዋቅራዊ_መልክዕት; // myData struct_message myData የሚባል መዋቅራዊ_መልክት ይፍጠሩ ፤ // ተግባሩ ሁኔታውን ባዶ ለማድረግ OnDataSent (const uint8_t *mac_addr ፣ esp_now_send_status_t status) {Serial.print ("\ r / n የመጨረሻው እሽግ መላክ ሁኔታ ፦ / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "የመላኪያ ስኬት": "መላኪያ አልተሳካም"); ከሆነ (ሁኔታ! Serial.print ("ባይት ደርሷል:"); Serial.println (ሌን); Serial.print ("ቻር:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("ተንሳፋፊ"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } ባዶነት ማዋቀር () {// ከ ESP Serial.begin (115200) ጋር ለተከታታይ ግንኙነት የባውድ ተመን ያዘጋጁ። // መሣሪያን እንደ Wi-Fi ጣቢያ WiFi.mode (WIFI_STA) ያዋቅሩ ፤ // wifi ን ይጀምራል/Init ESP-NOW እና (esp_now_init ()! = ESP_OK) {Serial.println ("ESP ን ማስጀመር ላይ ስህተት") -አሁን "); መመለስ; } // የ ESPNOW ውሂብ esp_now_register_send_cb (OnDataSent) ከላኩ በኋላ ተግባሩን OnDataSent ይደውሉ ፤ // አቻን esp_now_peer_info_t peerInfo ይመዝገቡ ፤ // የአቻ መረጃን እንደ ጠቋሚ ለ addres memcpy (peerInfo.peer_addr ፣ broadcastAddress ፣ 6) ማስጀመር እና መመደብ ፤ // የብሮድካስት አድራሻውን በ 6 ባይት ወደ peerInfo.peer_addr peerInfo.channel = 0 ይቅዱ። esp የሚናገርበት/ሰርጥ። 0 ማለት ያልተገለፀ እና ውሂብ አሁን ባለው ሰርጥ ላይ ይላካል።1-14 ከአከባቢው መሣሪያ peerInfo.encrypt = ሐሰት ጋር ተመሳሳይ የሆኑ ትክክለኛ ሰርጦች ናቸው። // አልተመሰጠረም // መሣሪያውን ወደ ተጣመረው የመሣሪያ ዝርዝር ውስጥ ያክሉ (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println («አቻ ማከል አልተሳካም») ፤ መመለስ; } esp_now_register_recv_cb (OnDataRecv); // የ ESPNOW ውሂብ send_data () ከተቀበለ በኋላ ተግባሩን OnDataRecv ይደውሉ ፤ } ባዶነት loop () {} ባዶነት send_data () {Serial.println («መላክ»)); // strcpy ን ለመላክ እሴቶችን ያዘጋጁ (myData.a ፣ “ይህ ዋጋ ነው”); // ቀደም ሲል የተገለጸውን የእኔን “ውሂብ” ለመለወጥ “ይህ ዋጋ ነው” አስቀምጥ myData.b = የዘፈቀደ (1 ፣ 20) ፤ // የዘፈቀደ እሴት ያስቀምጡ myData.c = 1.2; // ተንሳፋፊን አስቀምጥ myData.d = "ESP32"; // ሕብረቁምፊ ያስቀምጡ myData.e = ሐሰት; // ሐሰተኛ አስቀምጥ // በ ESP-NOW ከ 250 ባይት ያነሰ ወይም እኩል የሆነ ውሂብ ይላኩ እና ሁኔታውን ይመልሳል esp_err_t ውጤት = esp_now_send (broadcastAddress ፣ (uint8_t *) & myData ፣ sizeof (myData)) ፤ ከሆነ (ውጤት == ESP_OK) {Serial.println (“በስኬት የተላከ”) ፤} ሌላ {Serial.println (“ውሂቡን መላክ ላይ ስህተት”) ፤ }}

ESP8266 ኮድ

// አስፈላጊ ቤተ -መጽሐፍትን ያክሉ

#ጨምሮ /በ ESP32 ላይ የ Wifi ችሎታዎችን ለማከል #ያካትቱ // የ esp አሁን ተግባሮችን ለመድረስ // የማሰራጫ አድራሻውን በአድራሻ ስም በተዘጋጀ ድርድር ውስጥ ያስቀምጡ ፣ uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*የተዋቀሩትን እና ሁሉንም እንደ መዋቅራዊ_መልእክት*የተሰየሙትን በርካታ ተለዋዋጮች የውሂብ አይነቶች ይግለጹ*/ typedef struct struct_message {char a [32]; int ለ; ተንሳፋፊ ሐ; ሕብረቁምፊ d; bool e; } መዋቅራዊ_መልክዕት; // myData struct_message myData የሚባል ተለዋዋጭ struct_message ይፍጠሩ ፤ // ተግባሩ ውሂቡ ሲደርሰው ተጠርቶ ባዶ ሆኖ ሲያትመው OnDataRecv (uint8_t * mac ፣ uint8_t * incomingData ፣ uint8_t len) {memcpy (& myData ፣ incomingData ፣ sizeof (myData)); Serial.print ("ባይት ደርሷል:"); Serial.println (ሌን); Serial.print ("ቻር:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("ተንሳፋፊ"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); ላክ_ዳታ (); } ባዶነት OnDataSent (uint8_t *mac_addr ፣ uint8_t sendStatus) {Serial.print ("\ r / n የመጨረሻው እሽግ መላክ ሁኔታ ፦ t"); Serial.println (sendStatus == 1? "የመላኪያ ስኬት": "መላኪያ አልተሳካም"); ከሆነ (sendStatus! = 1) {send_data (); }} ባዶነት send_data () {// strcpy ን ለመላክ እሴቶችን ያዘጋጁ (myData.a ፣ “ይህ ዋጋ ነው”) ፤ // ቀደም ሲል የተገለጸውን የእኔን “ውሂብ” ለመለወጥ “ይህ ዋጋ ነው” አስቀምጥ myData.b = የዘፈቀደ (1 ፣ 20) ፤ // የዘፈቀደ እሴት ያስቀምጡ myData.c = 1.2; // ተንሳፋፊ አስቀምጥ myData.d = "ESP8266"; // ሕብረቁምፊ ያስቀምጡ myData.e = ሐሰት; // ሐሰተኛ esp_now_send (broadcastAddress ፣ (uint8_t *) & myData ፣ sizeof (myData)) ያስቀምጡ። } ባዶነት ማዋቀር () {// ከ ESP Serial.begin (115200) ጋር ለተከታታይ ግንኙነት የባውድ ተመን ያዘጋጁ። // መሣሪያን እንደ Wi-Fi ጣቢያ WiFi.mode (WIFI_STA) ያዘጋጁ ፤ // wifi ይጀምራል // Init ESP-NOW እና (esp_now_init ()! = 0) {Serial.println («ESP-NOW ን ማስጀመር ስህተት») ከሆነ ሁኔታውን ይመልሳል ፤ መመለስ; } ከሆነ (esp_now_add_peer (broadcastAddress ፣ ESP_NOW_ROLE_SLAVE ፣ 1 ፣ NULL ፣ 0)) {Serial.println («አቻ ማከል አልተሳካም») ፤ መመለስ; } ራሱን_አስቀምጦ_አስቀምጥ (ESP_NOW_ROLE_COMBO) ፤ esp_now_register_send_cb (OnDataSent); esp_now_set_self_role_ (ESP_NOW_ROLE_COMBO); // የዚህን esp_now_register_recv_cb (OnDataRecv) ሚና ይገልጻል ፤ // የ ESPNOW ውሂብን} ባዶነት loop () {} ከተቀበሉ በኋላ ተግባሩን OnDataRecv ይደውሉ

ደረጃ 8 - ማጣቀሻዎች

ESPNOW_32_ ምሳሌ

ESPNOW_8266 ምሳሌ

WIFI.h

ESP8266WiFi.h

esp_now.h ለ ESP8266

esp_now.h ለ ESP32

esp_now ኦፊሴላዊ ሰነድ (የተግባሮች የተሻለ ማብራሪያ)

ESP-NOW ኦፊሴላዊ መመሪያ

የሚመከር: