विषयसूची:

ESP32 और ESP8266 का उपयोग करके ESP-Now के माध्यम से कई ESP टॉक कैसे करें: 8 कदम
ESP32 और ESP8266 का उपयोग करके ESP-Now के माध्यम से कई ESP टॉक कैसे करें: 8 कदम

वीडियो: ESP32 और ESP8266 का उपयोग करके ESP-Now के माध्यम से कई ESP टॉक कैसे करें: 8 कदम

वीडियो: ESP32 और ESP8266 का उपयोग करके ESP-Now के माध्यम से कई ESP टॉक कैसे करें: 8 कदम
वीडियो: ESP RainMaker with Google Assistant Alexa & Manual Switch|हिंदी 2024, जुलाई
Anonim
ESP32 और ESP8266 का उपयोग करके ESP-NOW के माध्यम से कई ESP टॉक कैसे करें?
ESP32 और ESP8266 का उपयोग करके ESP-NOW के माध्यम से कई ESP टॉक कैसे करें?

मेरे चल रहे प्रोजेक्ट पर, मुझे राउटर के बिना एक-दूसरे से बात करने के लिए कई ईएसपी चाहिए। ऐसा करने के लिए, मैं ईएसपी पर राउटर के बिना एक दूसरे के साथ वायरलेस संचार करने के लिए ईएसपी-नाउ का उपयोग करूँगा।

आपूर्ति

मेरे द्वारा उपयोग की जाने वाली चीजें:

ESP32 देव मॉड्यूल

NODEMCU 1.0 (ESP12E मॉड्यूल)

चरण 1: बोर्ड मैक पता प्राप्त करें

बोर्ड मैक पता प्राप्त करें
बोर्ड मैक पता प्राप्त करें
बोर्ड मैक पता प्राप्त करें
बोर्ड मैक पता प्राप्त करें

ईएसपी-नाउ के माध्यम से, ईएसपी डिवाइस एक दूसरे से अपने विशिष्ट पते पर डेटा भेजकर बात करते हैं, जबकि एक आंतरिक एसेस पॉइंट नेटवर्क से जुड़े होते हैं जो अब ईएसपी को इंटिलाइज करने पर बने होते हैं।. इस प्रकार, प्रत्येक डिवाइस का मैक पता निर्धारित करें। मेरी ESP32 और ESP8266 बोर्ड सेटिंग्स संलग्न है

ESP32. के लिए

#शामिल "WiFi.h" // ESP32 वाईफ़ाई क्षमताओं तक पहुँचने के लिए

शून्य सेटअप () {Serial.begin (115200); Serial.print ("ESP32 बोर्ड MAC पता:"); Serial.println (वाईफाई.मैकएड्रेस ()); // अपने मैक पते को प्रिंट करता है } शून्य लूप () {}

ESP8266. के लिए

#include // लाइब्रेरी का उपयोग ESP8266 वाईफ़ाई क्षमताओं तक पहुँचने के लिए किया जाता है

शून्य सेटअप () {Serial.begin (115200); सीरियल.प्रिंट्लन (); Serial.print ("ESP8266 बोर्ड MAC पता:"); Serial.println (वाईफाई.मैकएड्रेस ()); // अपने मैक पते को प्रिंट करता है } शून्य लूप () {}

मेरा मैक पता है:

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

चरण 2: ईएसपी-नाउ कैसे काम करें

इसे काम करने के तरीके के बारे में यहां एक सिंहावलोकन दिया गया है:

  1. esp अभी और वाईफाई लाइब्रेरी शामिल करें
  2. प्राप्तकर्ता ईएसपी का मैक पता सहेजें
  3. संदेश भेजने / प्राप्त करने की डेटा संरचना को परिभाषित करें
  4. सेटअप पर, वाईफाई को स्टेशन मोड पर सेट करें
  5. esp_now को इनिशियलाइज़ करें
  6. डेटा भेजने और प्राप्त करने के बाद कॉल बैक फ़ंक्शन बनाएं और पंजीकृत करें
  7. Esp8266 के लिए, इसकी भूमिका परिभाषित करें
  8. सहकर्मी या प्राप्तकर्ता esp. को पंजीकृत करें
  9. डेटा भेजें

चरण 3: ESP-अब कार्य (ESP32)

esp_now_init (शून्य)

वापसी:

  • ESP_OK: सफल
  • ESP_ERR_ESPNOW_INTERNAL: आंतरिक त्रुटि

विवरण:

ESPNOW फ़ंक्शन प्रारंभ करें

esp_now_register_send_cb(सीबी)

रिटर्न:

  • ESP_OK: सफल
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW को प्रारंभ नहीं किया गया है
  • ESP_ERR_ESPNOW_INTERNAL: आंतरिक त्रुटि

पैरामीटर:

  • cb: इस पैरामीटर के साथ ESPNOW डेटा भेजने के बाद कॉलबैक फ़ंक्शन का नाम:

    • शून्य सीबी (स्थिरांक uint8_t *mac_addr, esp_now_send_status_t स्थिति)

      • 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 पीयर मैक एड्रेस जो स्टेशन या सॉफ्टएप का मैक एड्रेस भी है

    • uint8_t एलएमके[ESP_NOW_KEY_LEN]

      ESPNOW सहकर्मी स्थानीय मास्टर कुंजी जिसका उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाता है

    • uint8_t चैनल

      वाई-फाई चैनल जो सहकर्मी ईएसपीएनओओ डेटा भेजने/प्राप्त करने के लिए उपयोग करता है। यदि मान 0 है, तो वर्तमान चैनल का उपयोग करें कि कौन सा स्टेशन या सॉफ्टैप चालू है। अन्यथा, इसे चैनल के रूप में सेट किया जाना चाहिए कि स्टेशन या सॉफ्टैप चालू है।

    • वाईफाई_इंटरफेस_टी इफिडएक्स

      वाई-फाई इंटरफ़ेस जो सहकर्मी ESPNOW डेटा भेजने/प्राप्त करने के लिए उपयोग करता है

    • बूल एन्क्रिप्ट

      ESPNOW डेटा जो यह सहकर्मी भेजता/प्राप्त करता है वह एन्क्रिप्टेड है या नहीं

    • शून्य *निजी

      ESPNOW सहकर्मी निजी डेटा

विवरण:

किसी सहकर्मी को सहकर्मी सूची में जोड़ें

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

रिटर्न:

  • 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: वर्तमान वाईफाई इंटरफ़ेस सहकर्मी से मेल नहीं खाता

पैरामीटर:

  • पीयर_एड्र: पीयर मैक एड्रेस
  • डेटा: भेजने के लिए डेटा
  • लेन: डेटा की लंबाई

विवरण:

ईएसपीएनओओ डेटा भेजें। कुछ मामलों में ऐसा होता है:

  • यदि पीयर_एड्र न्यूल नहीं है, तो उस पीयर को डेटा भेजें जिसका मैक एड्रेस पीयर_एड्र से मेल खाता है
  • यदि पीयर_एड्र न्यूल है, तो पीयर लिस्ट में जोड़े गए सभी पीयर्स को डेटा भेजें
  • डेटा की अधिकतम लंबाई ESP_NOW_MAX_DATA_LEN से कम होनी चाहिए
  • डेटा तर्क द्वारा इंगित बफर को esp_now_send रिटर्न के बाद मान्य होने की आवश्यकता नहीं है

esp_now_register_recv_cb(सीबी)

रिटर्न:

  • ESP_OK: सफल
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW को प्रारंभ नहीं किया गया है
  • ESP_ERR_ESPNOW_INTERNAL: आंतरिक त्रुटि

पैरामीटर:

  • cb: ESPNOW डेटा प्राप्त करने के लिए कॉलबैक फ़ंक्शन

    • शून्य सीबी (स्थिरांक uint8_t *mac_addr, const uint8_t *डेटा, int data_len)

      • mac_addr:

        रिसीवर का मैक पता

      • *आंकड़े:

        डेटा प्राप्त

      • डेटा_लेन

        डेटा बाइट लंबाई

विवरण:

ESPNOW डेटा प्राप्त करने के बाद फ़ंक्शन cb को कॉल करें

चरण 4: ईएसपी-अब कार्य (ईएसपी8266)

कार्य विवरण ESP32 ESP8266

int esp_now_init (शून्य)

रिटर्न:

  • 1 = सफलता
  • 0=असफल

विवरण

ESPNOW फ़ंक्शन प्रारंभ करें

int esp_now_set_self_role(u8 भूमिका)

पैरामीटर:

  • ESP_NOW_ROLE_IDLE: डेटा ट्रांसमिशन की अनुमति नहीं है।
  • ESP_NOW_ROLE_CONTROLLER: सेशन इंटरफ़ेस को प्राथमिकता दी जाती है
  • ESP_NOW_ROLE_SLAVE: सॉफ्टएप इंटरफ़ेस को प्राथमिकता दी जाती है
  • ESP_NOW_ROLE_COMBO: सॉफ्टएपी इंटरफेस को प्राथमिकता दी जाती है

विवरण

डिवाइस भूमिका सेट करता है

int esp_now_register_send_cb (सीबी)

रिटर्न:

  • 1 = सफलता
  • 0 = असफल

पैरामीटर:

  • cb: इस पैरामीटर के साथ ESPNOW डेटा भेजने के बाद कॉलबैक फ़ंक्शन का नाम:

    • शून्य सीबी (स्थिरांक uint8_t *mac_addr, esp_now_send_status_t स्थिति)

      • mac_addr: रिसीवर का मैक पता
      • स्थिति:

        • 1 = सफलता
        • 0 = असफल

विवरण

ESPNOW डेटा भेजने के बाद OnDataSent फ़ंक्शन को कॉल करें

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

रिटर्न:

  • 1 = सफलता
  • 0 = असफल

पैरामीटर:

  • mac_addr

    सहकर्मी का मैक पता

  • भूमिका
  • चैनल

    यदि मान 0 है, तो वर्तमान चैनल का उपयोग करें कि कौन सा स्टेशन या सॉफ्टैप चालू है। अन्यथा, इसे चैनल के रूप में सेट किया जाना चाहिए कि स्टेशन या सॉफ्टैप चालू है

  • *चाभी

    एन्क्रिप्शन के लिए कुंजी

  • key_len

    कुंजी की लंबाई

विवरण:

किसी सहकर्मी को सहकर्मी सूची में जोड़ें

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

रिटर्न:

  • 1 = सफलता
  • 0 = विफल

पैरामीटर:

  • पीयर_एड्र: पीयर मैक एड्रेस
  • डेटा: भेजने के लिए डेटा
  • लेन: डेटा की लंबाई

विवरण:

ईएसपीएनओओ डेटा भेजें। कुछ मामलों में ऐसा होता है:

  • यदि पीयर_एड्र न्यूल नहीं है, तो उस पीयर को डेटा भेजें जिसका मैक एड्रेस पीयर_एड्र से मेल खाता है
  • यदि पीयर_एड्र न्यूल है, तो पीयर लिस्ट में जोड़े गए सभी पीयर्स को डेटा भेजें
  • डेटा की अधिकतम लंबाई ESP_NOW_MAX_DATA_LEN से कम होनी चाहिए
  • डेटा तर्क द्वारा इंगित बफर को esp_now_send रिटर्न के बाद मान्य होने की आवश्यकता नहीं है

int esp_now_register_recv_cb (सीबी)

रिटर्न:

  • 1 = सफलता
  • 0 = विफल

पैरामीटर:

  • cb: ESPNOW डेटा प्राप्त करने के लिए कॉलबैक फ़ंक्शन

    • शून्य सीबी (स्थिरांक uint8_t *mac_addr, const uint8_t *डेटा, int data_len)

      • mac_addr:

        रिसीवर का मैक पता

      • *आंकड़े:

        डेटा प्राप्त

      • डेटा_लेन

        डेटा बाइट लंबाई

विवरण:

ESPNOW डेटा प्राप्त करने के बाद फ़ंक्शन cb को कॉल करें

चरण 5: वन वे कम्युनिकेशन (ईएसपी 32 प्रेषक के रूप में)

ESP32 एक ESP8266 को डेटा भेजता है। इस कोड के साथ। ब्रॉडकास्ट एड्रेस को अपने संबंधित रिसीवर मैक एड्रेस में बदलें। मेरा था A4:CF:12:C7:9C:77

// आवश्यक पुस्तकालय जोड़ें

#include // esp को एक्सेस करने के लिए अब फंक्शन #include // ESP32 पर Wifi कैपेबिलिटीज जोड़ने के लिए // ब्रॉडकास्ट एड्रेस नाम के एरे में मैक एड्रेस को सेव करें; uint8_t प्रसारण पता = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // मेरे रिसीवर का मैक पता / * संरचित कई चर के डेटा प्रकारों को परिभाषित करें और इसका नाम बदलकर struct_message*/ typedef struct struct_message {char a [32]; इंट बी; फ्लोट सी; स्ट्रिंग डी; बूल ई; } struct_message; // myData struct_message myData नामक एक struct_message बनाएं; // फ़ंक्शन को कॉल किया जाता है जब डेटा अपनी स्थिति को प्रिंट करने के लिए भेजा जाता है 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 ? "डिलीवरी सक्सेस": "डिलीवरी फेल"); } शून्य सेटअप () {// ESP Serial.begin(115200) के साथ धारावाहिक संचार के लिए बॉड दर निर्धारित करें; // डिवाइस को वाई-फाई स्टेशन WiFi.mode (WIFI_STA) के रूप में सेट करें; // वाईफाई शुरू करता है // ESP-NOW शुरू करें और अपनी स्थिति लौटाता है अगर (esp_now_init ()! = ESP_OK) { Serial.println ("ईएसपी शुरू करने में त्रुटि -अभी"); वापसी; } // ESPNOW डेटा esp_now_register_send_cb (OnDataSent) भेजने के बाद OnDataSent फ़ंक्शन को कॉल करें; // सहकर्मी esp_now_peer_info_t सहकर्मी को पंजीकृत करें; // प्रारंभ करें और पीयर जानकारी को एक एड्रेस memcpy (peerInfo.peer_addr, BroadcastAddress, 6) के सूचक के रूप में असाइन करें; // ब्रॉडकास्टएड्रेस के मूल्य को 6 बाइट्स के साथ पीरइन्फो.पीयर_एड्र पीरइन्फो.चैनल = 0 पर कॉपी करें; // चैनल जिस पर esp बात करते हैं। 0 का अर्थ है अपरिभाषित और डेटा वर्तमान चैनल पर भेजा जाएगा। 1-14 वैध चैनल हैं जो स्थानीय डिवाइस के साथ समान हैं.peerInfo.encrypt = false; // एन्क्रिप्ट नहीं किया गया // डिवाइस को युग्मित डिवाइस सूची में जोड़ें यदि (esp_now_add_peer(&peerInfo)!= ESP_OK){ Serial.println("पीयर जोड़ने में विफल"); वापसी; } } शून्य लूप () {// strcpy भेजने के लिए मान सेट करें (myData.a, "यह एक चार्ज है"); // पहले myData.b = random(1, 20) परिभाषित मेरे "डेटा" के चर के लिए "यह एक चार्ज है" सहेजें; // एक यादृच्छिक मान सहेजें myData.c = 1.2; // एक फ्लोट सहेजें myData.d = "हैलो"; // एक स्ट्रिंग सहेजें myData.e = false; // बूल सहेजें अगर (परिणाम == ESP_OK) { Serial.println ("सफलतापूर्वक भेजा गया"); } और { Serial.println ("डेटा भेजने में त्रुटि"); } देरी (2000); }

ESP8266 इस कोड का उपयोग करके ESP32 से डेटा प्राप्त करता है।

// आवश्यक पुस्तकालय जोड़ें

#include // ESP32 पर Wifi क्षमताओं को जोड़ने के लिए #include // esp को एक्सेस करने के लिए अब फंक्शन्स / * स्ट्रक्चर्ड मल्टीपल वेरिएबल्स के डेटा टाइप्स को परिभाषित करें और इसका नाम बदलकर struct_message*/ typedef struct struct_message {char a[32]; इंट बी; फ्लोट सी; स्ट्रिंग डी; बूल ई; } struct_message; // myData struct_message myData नामक एक वैरिएबल struct_message बनाएं; // डेटा प्राप्त होने पर कॉल किया जाता है और इसे प्रिंट करता है OnDataRecv (uint8_t * mac, uint8_t *incomingData, uint8_t len) {memcpy (& myData, आने वाली डेटा, आकार (myData)); सीरियल.प्रिंट ("प्राप्त बाइट्स:"); सीरियल.प्रिंट्लन (लेन); सीरियल.प्रिंट ("चार:"); Serial.println (myData.a); सीरियल.प्रिंट ("इंट:"); Serial.println (myData.b); सीरियल.प्रिंट ("फ्लोट:"); Serial.println (myData.c); सीरियल.प्रिंट ("स्ट्रिंग:"); Serial.println (myData.d); सीरियल.प्रिंट ("बूल:"); Serial.println (myData.e); सीरियल.प्रिंट्लन (); } शून्य सेटअप () {// ESP Serial.begin(115200) के साथ धारावाहिक संचार के लिए बॉड दर निर्धारित करें; // डिवाइस को वाई-फाई स्टेशन वाईफाई मोड (WIFI_STA) के रूप में सेट करें; // वाईफाई शुरू करता है // इनिट ईएसपी-नाउ और अपनी स्थिति लौटाता है अगर (esp_now_init ()! = 0) {Serial.println ("ईएसपी-नाउ शुरू करने में त्रुटि"); वापसी; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); // इस esp esp_now_register_recv_cb (OnDataRecv) की भूमिका को परिभाषित करता है; // ESPNOW डेटा प्राप्त करने के बाद फ़ंक्शन OnDataRecv को कॉल करें} शून्य लूप () {}

चरण 6: वन वे कम्युनिकेशन (ईएसपी8266 प्रेषक के रूप में)

ESP8266 एक ESP32 को डेटा भेजता है। इस कोड के साथ। ब्रॉडकास्ट एड्रेस को अपने संबंधित रिसीवर मैक एड्रेस में बदलें। मेरा esp32 पता 30:AE:A4:F5:03:A4 है। Esp8266 के अन्य कार्यों के लिए यहां जाएं

// आवश्यक पुस्तकालय जोड़ें

#include // ESP32 पर Wifi क्षमताओं को जोड़ने के लिए #include // esp को एक्सेस करने के लिए अब फंक्शन्स // ब्रॉडकास्ट एड्रेस नाम की एक ऐरे में मैक एड्रेस को सेव करें; uint8_t प्रसारण पता = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*संरचित कई चरों के डेटा प्रकारों को परिभाषित करें और उन सभी का नाम बदलकर struct_message*/ typedef struct struct_message {char a[32]; इंट बी; फ्लोट सी; स्ट्रिंग डी; बूल ई; } struct_message; // myData struct_message myData नामक एक संरचित चर बनाएँ; // फंक्शन कॉल किया जाता है जब डेटा भेजा जाता है और इसकी स्थिति को प्रिंट करता है शून्य OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print("\r\nLast Packet Send Status:\t"); Serial.println (sendStatus == 1? "वितरण सफलता": "वितरण विफल"); } शून्य सेटअप () {// ESP Serial.begin(115200) के साथ धारावाहिक संचार के लिए बॉड दर निर्धारित करें; // डिवाइस को वाई-फाई स्टेशन वाईफाई.मोड (WIFI_STA) के रूप में सेट करें;//वाईफाई शुरू करता है // ईएसपी-नाउ में प्रवेश करें और अपनी स्थिति लौटाएं यदि (esp_now_init ()) { Serial.println ("ESP-NOW प्रारंभ करने में त्रुटि"); वापसी; } esp_now_register_send_cb (ऑनडाटासेंट); // ईएसपीएनओओ डेटा भेजने के बाद ऑनडाटासेंट फ़ंक्शन को कॉल करें वापसी; } } शून्य लूप () {// strcpy भेजने के लिए मान सेट करें (myData.a, "यह एक चार्ज है"); // पहले myData.b = random(1, 20) परिभाषित मेरे "डेटा" के चर के लिए "यह एक चार्ज है" सहेजें; // एक यादृच्छिक मान सहेजें myData.c = 1.2; // एक फ्लोट सहेजें myData.d = "SP8266"; // एक स्ट्रिंग सहेजें myData.e = false; // बूल सहेजें अगर (esp_now_init() != 0) { Serial.println ("सफलतापूर्वक भेजा गया"); } और { Serial.println ("डेटा भेजने में त्रुटि"); } देरी (2000); }

ESP32 एक ESP8266 से डेटा प्राप्त करता है। इस कोड के साथ। अन्य कार्यों के लिए यहां देखें

// आवश्यक पुस्तकालय जोड़ें

#include // esp को एक्सेस करने के लिए अब फंक्शन #include // ESP32 पर Wifi कैपेबिलिटीज जोड़ने के लिए / * स्ट्रक्चर्ड मल्टीपल वेरिएबल्स के डेटा टाइप्स को परिभाषित करें और इसका नाम बदलकर struct_message*/ typedef struct struct_message {char a[32]; इंट बी; फ्लोट सी; स्ट्रिंग डी; बूल ई; } struct_message; // myData struct_message myData नामक एक वैरिएबल struct_message बनाएं; // डेटा प्राप्त होने पर कॉल किया जाता है और इसे प्रिंट करता है OnDataRecv (const uint8_t * mac, const uint8_t *incomingData, int len) {memcpy (& myData, आने वाली डेटा, आकार (myData)); सीरियल.प्रिंट ("प्राप्त बाइट्स:"); सीरियल.प्रिंट्लन (लेन); सीरियल.प्रिंट ("चार:"); Serial.println (myData.a); सीरियल.प्रिंट ("इंट:"); Serial.println (myData.b); सीरियल.प्रिंट ("फ्लोट:"); Serial.println (myData.c); सीरियल.प्रिंट ("स्ट्रिंग:"); Serial.println (myData.d); सीरियल.प्रिंट ("बूल:"); Serial.println (myData.e); सीरियल.प्रिंट्लन (); } शून्य सेटअप () {// ESP Serial.begin(115200) के साथ धारावाहिक संचार के लिए बॉड दर निर्धारित करें; // डिवाइस को वाई-फाई स्टेशन वाईफाई.मोड (WIFI_STA) के रूप में सेट करें; // वाईफाई शुरू करता है // इनिट ईएसपी-नाउ और अपनी स्थिति देता है अगर (esp_now_init ()! = 0) {Serial.println ("ईएसपी-नाउ शुरू करने में त्रुटि"); वापसी; } esp_now_register_recv_cb(OnDataRecv); // ESPNOW डेटा प्राप्त करने के बाद फ़ंक्शन OnDataRecv को कॉल करें} शून्य लूप () {}

चरण 7: दो तरह से संचार

दो तरफ से संचार
दो तरफ से संचार
दो तरफ से संचार
दो तरफ से संचार

ESP32 स्टार्टअप पर ESP8266 को डेटा भेजता है। ESP8266 प्राप्त संदेश को प्रिंट करता है और फिर उत्तर देता है जिसका ESP32 अपने सीरियल मॉनिटर पर प्रिंट करता है।

ESP32 कोड

// आवश्यक पुस्तकालय जोड़ें

#include // esp को एक्सेस करने के लिए अब फंक्शन #include // ESP32 पर Wifi कैपेबिलिटीज जोड़ने के लिए // ब्रॉडकास्ट एड्रेस नाम के एरे में मैक एड्रेस को सेव करें; uint8_t प्रसारण पता = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // मेरे रिसीवर का मैक पता / * संरचित कई चर के डेटा प्रकारों को परिभाषित करें और इसका नाम बदलकर struct_message*/ typedef struct struct_message {char a [32]; इंट बी; फ्लोट सी; स्ट्रिंग डी; बूल ई; } struct_message; // myData struct_message myData नामक एक struct_message बनाएं; // फ़ंक्शन को कॉल किया जाता है जब डेटा अपनी स्थिति को प्रिंट करने के लिए भेजा जाता है शून्य 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 ? "डिलीवरी सक्सेस": "डिलीवरी फेल"); if(status!=ESP_NOW_SEND_SUCCESS){send_data();} } void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, आने वाली डेटा, sizeof(myData)); सीरियल.प्रिंट ("प्राप्त बाइट्स:"); सीरियल.प्रिंट्लन (लेन); सीरियल.प्रिंट ("चार:"); Serial.println (myData.a); सीरियल.प्रिंट ("इंट:"); Serial.println (myData.b); सीरियल.प्रिंट ("फ्लोट:"); Serial.println (myData.c); सीरियल.प्रिंट ("स्ट्रिंग:"); Serial.println (myData.d); सीरियल.प्रिंट ("बूल:"); Serial.println (myData.e); सीरियल.प्रिंट्लन (); } शून्य सेटअप () {// ESP Serial.begin(115200) के साथ धारावाहिक संचार के लिए बॉड दर निर्धारित करें; // डिवाइस को वाई-फाई स्टेशन वाईफाई.मोड (WIFI_STA) के रूप में सेट करें; // वाईफाई शुरू करता है // ESP-NOW शुरू करता है और अपनी स्थिति देता है अगर (esp_now_init ()! = ESP_OK) { Serial.println ("ईएसपी शुरू करने में त्रुटि -अभी"); वापसी; } // ESPNOW डेटा esp_now_register_send_cb (OnDataSent) भेजने के बाद OnDataSent फ़ंक्शन को कॉल करें; // सहकर्मी esp_now_peer_info_t सहकर्मी को पंजीकृत करें; // प्रारंभ करें और सहकर्मी की जानकारी को एक सूचक के रूप में निर्दिष्ट करें memcpy(peerInfo.peer_addr, BroadcastAddress, 6); // ब्रॉडकास्टएड्रेस के मूल्य को 6 बाइट्स के साथ पीरइन्फो.पीयर_एड्र पीरइन्फो.चैनल = 0 पर कॉपी करें; // चैनल जिस पर esp बात करते हैं। 0 का अर्थ है अपरिभाषित और डेटा वर्तमान चैनल पर भेजा जाएगा।1-14 वैध चैनल हैं जो स्थानीय डिवाइस के साथ समान हैं.peerInfo.encrypt = false; // एन्क्रिप्ट नहीं किया गया // डिवाइस को युग्मित डिवाइस सूची में जोड़ें यदि (esp_now_add_peer(&peerInfo)!= ESP_OK){ Serial.println("पीयर जोड़ने में विफल"); वापसी; } esp_now_register_recv_cb(OnDataRecv); // ESPNOW डेटा send_data () प्राप्त करने के बाद फ़ंक्शन OnDataRecv को कॉल करें; } शून्य लूप () {} शून्य send_data () {Serial.println ("भेजना"); // strcpy भेजने के लिए मान सेट करें (myData.a, "यह एक चार्ज है"); // पहले myData.b = random(1, 20) परिभाषित मेरे "डेटा" के चर के लिए "यह एक चार्ज है" सहेजें; // एक यादृच्छिक मान सहेजें myData.c = 1.2; // एक फ्लोट सहेजें myData.d = "ESP32"; // एक स्ट्रिंग सहेजें myData.e = false; // बूल सहेजें अगर (परिणाम == ESP_OK) { Serial.println ("सफलतापूर्वक भेजा गया");} और { Serial.println ("डेटा भेजने में त्रुटि"); } }

ईएसपी8266 कोड

// आवश्यक पुस्तकालय जोड़ें

#include // ESP32 पर Wifi क्षमताओं को जोड़ने के लिए #include // esp को एक्सेस करने के लिए अब फंक्शन्स // ब्रॉडकास्ट एड्रेस नाम की एक ऐरे में मैक एड्रेस को सेव करें; uint8_t प्रसारण पता = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*संरचित कई चरों के डेटा प्रकारों को परिभाषित करें और उन सभी का नाम बदलकर struct_message*/ typedef struct struct_message {char a[32]; इंट बी; फ्लोट सी; स्ट्रिंग डी; बूल ई; } struct_message; // myData struct_message myData नामक एक वैरिएबल struct_message बनाएं; // डेटा प्राप्त होने पर कॉल किया जाता है और इसे प्रिंट करता है OnDataRecv (uint8_t * mac, uint8_t *incomingData, uint8_t len) {memcpy (& myData, आने वाली डेटा, आकार (myData)); सीरियल.प्रिंट ("प्राप्त बाइट्स:"); सीरियल.प्रिंट्लन (लेन); सीरियल.प्रिंट ("चार:"); Serial.println (myData.a); सीरियल.प्रिंट ("इंट:"); Serial.println (myData.b); सीरियल.प्रिंट ("फ्लोट:"); Serial.println (myData.c); सीरियल.प्रिंट ("स्ट्रिंग:"); Serial.println (myData.d); सीरियल.प्रिंट ("बूल:"); Serial.println (myData.e); सीरियल.प्रिंट्लन (); डेटा भेजें(); } शून्य OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nLast Packet Send Status:\t"); Serial.println (sendStatus == 1? "वितरण सफलता": "वितरण विफल"); अगर (भेजें स्थिति! = 1) {send_data (); } } void send_data () {// strcpy भेजने के लिए मान सेट करें (myData.a, "यह एक चार्ज है"); // पहले myData.b = random(1, 20) परिभाषित मेरे "डेटा" के चर के लिए "यह एक चार्ज है" सहेजें; // एक यादृच्छिक मान सहेजें myData.c = 1.2; // एक फ्लोट सहेजें myData.d = "ESP8266"; // एक स्ट्रिंग सहेजें myData.e = false; // एक बूल सहेजें esp_now_send (प्रसारण पता, (uint8_t *) और myData, sizeof (myData)); } शून्य सेटअप () {// ESP Serial.begin(115200) के साथ धारावाहिक संचार के लिए बॉड दर निर्धारित करें; // डिवाइस को वाई-फाई स्टेशन वाईफाई.मोड (WIFI_STA) के रूप में सेट करें; // वाईफाई शुरू करता है // इनिट ईएसपी-नाउ और अपनी स्थिति देता है अगर (esp_now_init ()! = 0) {Serial.println ("ईएसपी-नाउ शुरू करने में त्रुटि"); वापसी; } अगर (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)){ Serial.println ("सहकर्मी जोड़ने में विफल"); वापसी; } esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (ऑनडाटासेंट); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // इस esp esp_now_register_recv_cb (OnDataRecv) की भूमिका को परिभाषित करता है; // ESPNOW डेटा प्राप्त करने के बाद फ़ंक्शन OnDataRecv को कॉल करें} शून्य लूप () {}

चरण 8: संदर्भ

ESPNOW_32_उदाहरण

ESPNOW_8266 उदाहरण

वाईफ़ाई.एच

ESP8266WiFi.h

ESP8266. के लिए esp_now.h

esp_now.h ESP32 के लिए

esp_now आधिकारिक दस्तावेज़ (कार्यों की बेहतर व्याख्या)

ईएसपी-अब आधिकारिक गाइड

सिफारिश की: