ዝርዝር ሁኔታ:
- አቅርቦቶች
- ደረጃ 1 የቦርድ ማክ አድራሻ ያግኙ
- ደረጃ 2 ESP-NOW ን እንዴት እንደሚሰራ
- ደረጃ 3 የ ESP-NOW ተግባራት (ESP32)
- ደረጃ 4 የ ESP-NOW ተግባራት (ESP8266)
- ደረጃ 5 - የአንድ መንገድ ግንኙነት (ESP32 እንደ ላኪ)
- ደረጃ 6 - የአንድ መንገድ ግንኙነት (ESP8266 እንደ ላኪ)
- ደረጃ 7 - የሁለት መንገድ ግንኙነት
- ደረጃ 8 - ማጣቀሻዎች
ቪዲዮ: ESP32 ን እና ESP8266: 8 ደረጃዎችን በመጠቀም በ ESP-NOW በኩል ብዙ የ ESP ንግግርን እንዴት ማድረግ እንደሚቻል
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:30
በሂደት ላይ ባለው ፕሮጀክቴ ላይ ፣ ያለ ራውተር እርስ በእርስ ለመነጋገር ብዙ 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 ን እንዴት እንደሚሰራ
እንዴት እንደሚሰራ አጠቃላይ እይታ እነሆ-
- ESP ን አሁን እና የ wifi ቤተ -መጽሐፍትን ያካትቱ
- የተቀባዩን ESP የማክ አድራሻ ያስቀምጡ
- የተላከው/የተቀበለው መልእክት የውሂብ አወቃቀር ይግለጹ
- በማዋቀር ላይ wifi ን ወደ ጣቢያው ሁኔታ ያቀናብሩ
- Esp_now ን ያስጀምሩ
- መረጃ ከላከ እና ከተቀበለ በኋላ የተጠራውን የጥሪ መልሰው ተግባር ያድርጉ እና ይመዝግቡ
- ለ Esp8266 ፣ ሚናውን ይግለጹ
- አቻውን ወይም ተቀባዩን esp ይመዝገቡ
- ውሂብ ላክ
ደረጃ 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 ኦፊሴላዊ መመሪያ
የሚመከር:
ሮቦትን በቤት ውስጥ እንዴት ማስወገድ እንደሚቻል DIY Arduino እንቅፋት እንዴት ማድረግ እንደሚቻል - 4 ደረጃዎች
ሮቦትን በቤት ውስጥ DIY አርዱinoኖ እንቅፋት እንዴት እንደሚደረግ -ጤና ይስጥልኝ ወንዶች ፣ በዚህ አስተማሪ ውስጥ ሮቦትን በማስወገድ እንቅፋት ይፈጥራሉ። ይህ መመሪያ በአቅራቢያ ያሉ ነገሮችን መለየት እና እነዚህን ነገሮች ለማስወገድ አቅጣጫቸውን መለወጥ የሚችል ከአልትራሳውንድ ዳሳሽ ጋር ሮቦትን መገንባት ያካትታል። የአልትራሳውንድ ዳሳሽ
ኤክስኮድን በመጠቀም ስዊፍት በመጠቀም የቲክ ታክ ጣት ጨዋታን እንዴት ማድረግ እንደሚቻል 5 ደረጃዎች
ከ ‹Xcode› ጋር ስዊፍት በመጠቀም የቲክ ታክ ጣት ጨዋታ እንዴት እንደሚሠራ -በዚህ የስዊፍት አጋዥ ስልጠና ውስጥ የቲክ ታክ ጣት መተግበሪያን እንዴት መፍጠር እንደሚችሉ አሳያችኋለሁ። ይህ መተግበሪያ እጅግ በጣም ቀላል እና ለማንኛውም ጀማሪ ታላቅ ፕሮጀክት ነው። ትምህርቱን በሦስት ደረጃዎች እከፍላለሁ 1. ዕቃዎችን መፍጠር 2. ዕቃዎችን ከኮዱ ጋር ማገናኘት 3. ሐ
በፓንዶራ ሣጥን በመጠቀም ባለ 2 ተጫዋች DIY ባርቶፕ የመጫወቻ ማዕከልን በፓንዶራ ሣጥን በመጠቀም እንዴት ማድረግ እንደሚቻል 17 ደረጃዎች (ከስዕሎች ጋር)
አንድ Pandora ያለው ሣጥን በመጠቀም የ 2 የተጫዋች DIY Bartop Arcade ጋር ብጁ Marquee የሳንቲም መክተቻዎች, ማድረግ የሚቻለው እንዴት ነው: ይህም Marquee ውስጥ የተሰሩ ብጁ ሳንቲም ቦታዎች ያለው የ 2 ተጫዋች አሞሌ ከላይ Arcade ማሽን መገንባት እንደሚቻል የደረጃ አጋዥ በማድረግ አንድ እርምጃ ነው. የሳንቲም ክፍተቶች የሚሠሩት ሩብ እና ትልቅ መጠን ያላቸውን ሳንቲሞች ብቻ እንዲቀበሉ ነው። ይህ የመጫወቻ ማዕከል ኃይል አለው
Raspberry Pi 2 ን እና Scratch: 11 ደረጃዎችን በመጠቀም በቀለም ስፔክትረም በኩል RGB LED ን ያዙሩ
Raspberry Pi 2 ን እና Scratch ን በመጠቀም የ RGB LED ን በቀለም ስፔክትረም በኩል ያሽከርክሩ - ማስታወሻዎችን ያዘምኑ ፌብሩዋሪ 25 ፣ 2016 - የጭረት ፕሮግራሙን አሻሽዬ ትምህርቴን አስተካክዬዋለሁ። ሠላም ሰዎች ፣ በዚህ ፕሮጀክት በቀለም ህብረቀለም በኩል የ RGB LED ን ለማሽከርከር Scratch ን ለመጠቀም ፈልጌ ነበር። ከቲ ጋር ይህንን የሚያደርጉ የፕሮጀክቶች ጭነት አለ
በ Beaglebone በኩል በ VNC በኩል እንዴት መድረስ እንደሚቻል -3 ደረጃዎች
በ ‹VNC› በኩል ‹Beaglebone› ን እንዴት መድረስ እንደሚቻል -ማሳያዎን ሳይሰኩ ሌሎች ዴስክቶፖችን እንዲያዩ የሚያስችልዎ በቪኤንሲ በኩል የእርስዎን Beaglebone ዴስክቶፕ ለመድረስ ቀላሉ መንገድ እዚህ አለ። ይህ በተቻለ መጠን ቀላል እና ቀጥተኛ እንዲሆን የታሰበ ነው። በመጀመሪያ ፣ እርስዎ