جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-23 12:53
في مشروعي الجاري ، أحتاج إلى عدة ESP للتحدث مع بعضنا البعض بدون جهاز توجيه. للقيام بذلك ، سأستخدم ESP-NOW لإجراء اتصال لاسلكي مع بعضها البعض بدون جهاز توجيه على ESP.
اللوازم
الأشياء التي استخدمتها:
وحدة ESP32 DEV
NODEMCU 1.0 (وحدة ESP12E)
الخطوة 1: احصل على عنوان Mac الخاص باللوحة
من خلال ESP-now ، تتحدث أجهزة ESP مع بعضها البعض عن طريق إرسال البيانات إلى عنوانها الفريد أثناء الاتصال بشبكة نقطة وصول داخلية تم إنشاؤها عند intilaizing esp الآن.. وبالتالي ، حدد عنوان MAC لكل جهاز. تم إرفاق إعدادات لوحة ESP32 و ESP8266 الخاصة بي
لـ ESP32
# تضمين "WiFi.h" // للوصول إلى إمكانات ESP32 WIFI
إعداد باطل () {Serial.begin (115200) ؛ Serial.print ("عنوان MAC للوحة ESP32:") ؛ Serial.println (WiFi.macAddress ()) ؛ // يطبع عنوان MAC الخاص به} حلقة فارغة () {}
لـ ESP8266
# تضمين // المكتبة المستخدمة للوصول إلى إمكانات ESP8266 WIFI
إعداد باطل () {Serial.begin (115200) ؛ Serial.println () ، Serial.print ("عنوان MAC للوحة ESP8266:")؛ Serial.println (WiFi.macAddress ()) ؛ // يطبع عنوان MAC الخاص به} حلقة فارغة () {}
عنوان MAC الخاص بي هو:
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
الخطوة 2: كيفية جعل ESP-NOW يعمل
فيما يلي نظرة عامة حول كيفية إنجاحه:
- تضمين esp الآن ومكتبات wifi
- احفظ عنوان mac الخاص بالمستلم ESP
- تحديد هيكل البيانات للرسالة المرسلة / المستلمة
- في الإعداد ، اضبط wifi على وضع المحطة
- قم بتهيئة esp_now
- قم بعمل وتسجيل وظيفة معاودة الاتصال التي تسمى بعد إرسال البيانات واستلامها
- بالنسبة لـ Esp8266 ، حدد دورها
- تسجيل الأقران أو المستلم خاصة
- إرسال البيانات
الخطوة 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 بهذه المعلمات:
-
void cb (const uint8_t * mac_addr ، esp_now_send_status_t status)
- mac_addr: عنوان جهاز استقبال mac
-
الحالة:
- 1 = النجاح
- 0 = فشل
-
وصف:
قم باستدعاء الوظيفة OnDataSent بعد إرسال بيانات ESPNOW
esp_now_add_peerconst esp_now_peer_info_t * peer)
عائدات:
- 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
peer_addr [ESP_NOW_ETH_ALEN] ، عنوان ESPNOW النظير MAC وهو أيضًا عنوان MAC للمحطة أو البرنامج
-
uint8_t lmk [ESP_NOW_KEY_LEN]
مفتاح رئيسي محلي ESPNOW نظير يُستخدم لتشفير البيانات
-
قناة uint8_t
قناة Wi-Fi التي يستخدمها النظير لإرسال / استقبال بيانات ESPNOW. إذا كانت القيمة 0 ، فاستخدم القناة الحالية التي تعمل بها المحطة أو البرنامج. خلاف ذلك ، يجب تعيينها على أنها القناة التي تعمل بها المحطة أو البرنامج
-
wifi_interface_t ifidx
واجهة Wi-Fi التي يستخدمها النظير لإرسال / استقبال بيانات 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: واجهة WiFi الحالية لا تطابق واجهة النظير
العوامل:
- peer_addr: عنوان MAC من نظير
- البيانات: البيانات المراد إرسالها
- لين: طول البيانات
وصف:
إرسال بيانات ESPNOW. في بعض الحالات ، يحدث هذا:
- إذا لم يكن peer_addr NULL ، فأرسل البيانات إلى النظير الذي يتطابق عنوان MAC الخاص به مع peer_addr
- إذا كانت قيمة peer_addr فارغة ، فأرسل البيانات إلى جميع النظراء الذين تمت إضافتهم إلى قائمة النظراء
- يجب أن يكون الحد الأقصى لطول البيانات أقل من 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
-
void cb (const uint8_t * mac_addr ، const uint8_t * data ، int data_len)
-
mac_addr:
عنوان MAC الخاص بالمتلقي
-
*البيانات:
تلقي البيانات
-
data_len
طول بايت البيانات
-
-
وصف:
اتصل بالوظيفة cb بعد تلقي بيانات ESPNOW
الخطوة 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: تعطى الأولوية لـ SoftAPinterface
وصف
يعيّن دور الجهاز
int esp_now_register_send_cb (cb)
عائدات:
- 1 = النجاح
- 0 = فشل
العوامل:
-
cb: اسم وظيفة رد الاتصال بعد إرسال بيانات ESPNOW بهذه المعلمات:
-
void cb (const uint8_t * mac_addr ، esp_now_send_status_t status)
- mac_addr: عنوان جهاز استقبال mac
-
الحالة:
- 1 = النجاح
- 0 = فشل
-
وصف
قم باستدعاء الوظيفة OnDataSent بعد إرسال بيانات ESPNOW
int esp_now_add_peer (u8 * mac_addr ، دور u8 ، قناة u8 ، مفتاح u8 * ، u8 key_len)
عائدات:
- 1 = النجاح
- 0 = فشل
العوامل:
-
mac_addr
عنوان mac للنظير
- وظيفة
-
قناة
إذا كانت القيمة 0 ، فاستخدم القناة الحالية التي تعمل بها المحطة أو البرنامج. خلاف ذلك ، يجب تعيينها على أنها القناة التي تعمل بها المحطة أو البرنامج
-
*مفتاح
مفتاح التشفير
-
key_len
طول المفتاح
وصف:
إضافة قائمة الند للند
int esp_now_send (const uint8_t * peer_addr ، const uint8_t * data ، size_t len)
عائدات:
- 1 = النجاح
- 0 = فشل
العوامل:
- peer_addr: عنوان MAC من نظير
- البيانات: البيانات المراد إرسالها
- لين: طول البيانات
وصف:
إرسال بيانات ESPNOW. في بعض الحالات ، يحدث هذا:
- إذا لم يكن peer_addr NULL ، فأرسل البيانات إلى النظير الذي يتطابق عنوان MAC الخاص به مع peer_addr
- إذا كانت قيمة peer_addr فارغة ، فأرسل البيانات إلى جميع النظراء الذين تمت إضافتهم إلى قائمة النظراء
- يجب أن يكون الحد الأقصى لطول البيانات أقل من ESP_NOW_MAX_DATA_LEN
- لا يلزم أن يكون المخزن المؤقت المشار إليه بواسطة وسيطة البيانات صالحًا بعد إرجاع esp_now_send
int esp_now_register_recv_cb (cb)
عائدات:
- 1 = النجاح
- 0 = فشل
العوامل:
-
cb: وظيفة رد الاتصال لتلقي بيانات ESPNOW
-
void cb (const uint8_t * mac_addr ، const uint8_t * data ، int data_len)
-
mac_addr:
عنوان MAC الخاص بالمتلقي
-
*البيانات:
تلقي البيانات
-
data_len
طول بايت البيانات
-
-
وصف:
اتصل بالوظيفة cb بعد تلقي بيانات ESPNOW
الخطوة 5: اتصال أحادي الاتجاه (ESP32 كمرسل)
يرسل ESP32 البيانات إلى ESP8266. بهذا الرمز. قم بتغيير عنوان البث إلى عنوان MAC الخاص بجهاز الاستقبال المتوافق. كان منجم A4: CF: 12: C7: 9C: 77
// أضف المكتبات الضرورية
#include // للوصول إلى وظائف esp الآن #include // لإضافة إمكانيات Wifi على ESP32 // احفظ عنوان MAC في مصفوفة باسمcastAddress ؛ uint8_t radioAddress = {0xA4 ، 0xCF ، 0x12 ، 0xC7 ، 0x9C ، 0x77} ؛ // عنوان MAC الخاص بجهاز الاستقبال الخاص بي / * حدد أنواع البيانات الخاصة بالمتغيرات المتعددة المهيكلة وأعيد تسميتها كلها باسم Struct_message * / typedef Struct_message {char a [32]؛ الباحث ب ؛ تعويم ج ؛ سلسلة د ؛ منطقي ه ؛ } Struct_message؛ // أنشئ رسالة هيكلية تسمى myData Struct_message myData ؛ // يتم استدعاء الوظيفة عند إرسال البيانات لطباعة حالتها باطلة OnDataSent (const uint8_t * mac_addr، esp_now_send_status_t status) {Serial.print ("\ r / n Last Packet Send Status: / t")؛ Serial.println (status == ESP_NOW_SEND_SUCCESS؟ "نجاح التسليم": "فشل التسليم") ؛ } void setup () {// تعيين معدل البث بالباود للاتصال التسلسلي مع ESP Serial.begin (115200) ؛ // تعيين الجهاز باعتباره Wi-Fi Station WiFi.mode (WIFI_STA) ؛ // يبدأ wifi // Init ESP-NOW ويعيد حالته إذا (esp_now_init ()! = ESP_OK) {Serial.println ("خطأ في تهيئة ESP -حاليا")؛ إرجاع؛ } // استدعاء الدالة OnDataSent بعد إرسال بيانات ESPNOW esp_now_register_send_cb (OnDataSent) ؛ // تسجيل نظير esp_now_peer_info_t peerInfo؛ // تهيئة وتعيين معلومات الأقران كمؤشر لعنوان memcpy (peerInfo.peer_addr ،castAddress، 6)؛ // انسخ قيمة عنوان البث مع 6 بايت إلى peerInfo.peer_addr peerInfo.channel = 0 ؛ // القناة التي يتحدث فيها esp. 0 يعني غير محدد وسيتم إرسال البيانات على القناة الحالية. 1-14 هي قنوات صالحة وهي نفسها مع الجهاز المحلي peerInfo.encrypt = false ؛ // غير مشفر // أضف الجهاز إلى قائمة الأجهزة المقترنة إذا (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("فشل إضافة نظير") ؛ إرجاع؛ }} void loop () {// تعيين القيم لإرسال strcpy (myData.a، "THIS A CHAR")؛ // حفظ "هذا حرف" لتغيير "أ" من "بياناتي" المحددة سابقًا myData.b = عشوائي (1 ، 20) ؛ // حفظ قيمة عشوائية myData.c = 1.2 ؛ // حفظ عائم myData.d = "مرحبًا" ؛ // حفظ سلسلة myData.e = false ؛ // save a bool // أرسل بيانات أقل من 250 بايت أو تساويها عبر ESP-NOW وإرجاع حالتها esp_err_t result = esp_now_send (castAddress، (uint8_t *) & myData، sizeof (myData)) ؛ إذا (نتيجة == ESP_OK) {Serial.println ("تم الإرسال بنجاح") ؛ } else {Serial.println ("خطأ في إرسال البيانات")؛ } تأخير (2000)؛ }
يستقبل ESP8266 البيانات من ESP32 باستخدام هذا الرمز.
// أضف المكتبات الضرورية
#include // لإضافة إمكانيات Wifi على ESP32 #include // للوصول إلى وظائف esp الآن / * حدد أنواع البيانات الخاصة بالمتغيرات المتعددة التي تم تنظيمها وأعدت تسميتها كلها كـ Struct_message * / typedef architecture Struct_message {char a [32]؛ الباحث ب ؛ تعويم ج ؛ سلسلة د ؛ منطقي ه ؛ } Struct_message؛ // إنشاء متغير Struct_message يسمى myData Struct_message myData ؛ // دالة تسمى عند استلام البيانات وطباعتها باطلة OnDataRecv (uint8_t * mac، uint8_t * incomingData، uint8_t len) {memcpy (& myData، incomingData، sizeof (myData)) ؛ Serial.print ("البايت المتلقاة:")؛ Serial.println (لين) ؛ 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 () {// تعيين معدل البث بالباود للاتصال التسلسلي مع ESP Serial.begin (115200) ؛ // تعيين الجهاز باعتباره Wi-Fi Station WiFi.mode (WIFI_STA) ؛ // يبدأ wifi // Init ESP-NOW ويعيد حالته إذا (esp_now_init ()! = 0) {Serial.println ("خطأ في تهيئة ESP-NOW") ؛ إرجاع؛ } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE) ، // يحدد دور هذا esp esp_now_register_recv_cb (OnDataRecv) ؛ // استدعاء الوظيفة OnDataRecv بعد تلقي بيانات ESPNOW} حلقة فارغة () {}
الخطوة 6: اتصال أحادي الاتجاه (ESP8266 كمرسل)
يرسل ESP8266 البيانات إلى ESP32. بهذا الرمز. قم بتغيير عنوان البث إلى عنوان MAC الخاص بجهاز الاستقبال المتوافق. عنواني esp32 هو 30: AE: A4: F5: 03: A4. للحصول على وظائف أخرى لـ esp8266 ، انتقل هنا
// أضف المكتبات الضرورية
#include // لإضافة إمكانيات Wifi على ESP32 #include // للوصول إلى وظائف esp الآن // احفظ عنوان MAC في مصفوفة تسمى بثادريس ؛ uint8_t radioAddress = {0x30، 0xAE، 0xA4، 0xF5، 0x03، 0xA4} ؛ / * تحديد أنواع البيانات الخاصة بالمتغيرات المتعددة المهيكلة وإعادة تسميتها كلها كـ Struct_message * / typedef architecture_message {char a [32]؛ الباحث ب ؛ تعويم ج ؛ سلسلة د ؛ منطقي ه ؛ } Struct_message؛ // إنشاء متغير منظم يسمى myData Struct_message myData ؛ // يتم استدعاء الوظيفة عند إرسال البيانات وطباعة حالتها باطلة OnDataSent (uint8_t * mac_addr، uint8_t sendStatus) {Serial.print ("\ r / n حالة إرسال الحزمة الأخيرة: / t")؛ Serial.println (sendStatus == 1؟ "نجاح التسليم": "فشل التسليم") ؛ } void setup () {// تعيين معدل البث بالباود للاتصال التسلسلي مع ESP Serial.begin (115200) ؛ // تعيين الجهاز باعتباره Wi-Fi Station WiFi.mode (WIFI_STA) ؛ // يبدأ wifi // Init ESP-NOW ويعيد حالته إذا (esp_now_init ()) {Serial.println ("خطأ في تهيئة ESP-NOW") ؛ إرجاع؛ } esp_now_register_send_cb (OnDataSent) ، // استدعاء الوظيفة OnDataSent بعد إرسال بيانات ESPNOW // أضف الجهاز إلى قائمة الأجهزة المقترنة إذا (esp_now_add_peer (عنوان البث ، ESP_NOW_ROLE_CONTROLLER ، 1 ، NULL ، 0)) {Serial.println ("فشل إضافة نظير") ؛ إرجاع؛ }} void loop () {// تعيين القيم لإرسال strcpy (myData.a، "THIS A CHAR")؛ // حفظ "هذا حرف" لتغيير "أ" من "بياناتي" المحددة سابقًا myData.b = عشوائي (1 ، 20) ؛ // حفظ قيمة عشوائية myData.c = 1.2 ؛ // حفظ عائم myData.d = "SP8266" ؛ // حفظ سلسلة myData.e = false ؛ // save a bool // أرسل بيانات أقل من 250 بايت أو تساويها عبر ESP-NOW وإرجاع حالتها int نتيجة = esp_now_send (بث عنوان ، (uint8_t *) & myData ، sizeof (myData)) ؛ if (esp_now_init ()! = 0) {Serial.println ("تم الإرسال بنجاح") ؛ } else {Serial.println ("خطأ في إرسال البيانات")؛ } تأخير (2000)؛ }
يستقبل ESP32 البيانات من ESP8266. بهذا الرمز. للوظائف الأخرى ، يرجى الرجوع هنا
// أضف المكتبات الضرورية
#include // للوصول إلى وظائف esp الآن #include // لإضافة إمكانيات Wifi على ESP32 / * حدد أنواع البيانات الخاصة بالمتغيرات المتعددة التي تم تنظيمها وأعدت تسميتها كلها كـ Struct_message * / typedef architecture Struct_message {char a [32]؛ الباحث ب ؛ تعويم ج ؛ سلسلة د ؛ منطقي ه ؛ } Struct_message؛ // إنشاء متغير Struct_message يسمى myData Struct_message myData ؛ // دالة تسمى عند استلام البيانات وطباعتها باطلة OnDataRecv (const uint8_t * mac، const uint8_t * incomingData، int len) {memcpy (& myData، incomingData، sizeof (myData)) ؛ Serial.print ("البايت المتلقاة:")؛ Serial.println (لين) ؛ 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 () {// تعيين معدل البث بالباود للاتصال التسلسلي مع ESP Serial.begin (115200) ؛ // تعيين الجهاز باعتباره Wi-Fi Station WiFi.mode (WIFI_STA) ؛ // يبدأ wifi // Init ESP-NOW ويعيد حالته إذا (esp_now_init ()! = 0) {Serial.println ("خطأ في تهيئة ESP-NOW") ؛ إرجاع؛ } esp_now_register_recv_cb (OnDataRecv) ، // استدعاء الوظيفة OnDataRecv بعد تلقي بيانات ESPNOW} حلقة فارغة () {}
الخطوة 7: الاتصال بطريقتين
يرسل ESP32 بيانات عند بدء التشغيل إلى ESP8266. يقوم ESP8266 بطباعة الرسالة المستلمة ثم الردود التي يطبعها ESP32 على الشاشة التسلسلية.
كود ESP32
// أضف المكتبات الضرورية
#include // للوصول إلى وظائف esp الآن #include // لإضافة إمكانيات Wifi على ESP32 // احفظ عنوان MAC في مصفوفة باسمcastAddress ؛ uint8_t radioAddress = {0xA4 ، 0xCF ، 0x12 ، 0xC7 ، 0x9C ، 0x77} ؛ // عنوان MAC الخاص بجهاز الاستقبال الخاص بي / * حدد أنواع البيانات الخاصة بالمتغيرات المتعددة المهيكلة وأعيد تسميتها كلها باسم Struct_message * / typedef Struct_message {char a [32]؛ الباحث ب ؛ تعويم ج ؛ سلسلة د ؛ منطقي ه ؛ } Struct_message؛ // أنشئ رسالة هيكلية تسمى myData Struct_message myData ؛ // يتم استدعاء الوظيفة عند إرسال البيانات لطباعة حالتها باطلة OnDataSent (const uint8_t * mac_addr، esp_now_send_status_t status) {Serial.print ("\ r / n Last 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، incomingData، sizeof (myData)) ؛ Serial.print ("البايت المتلقاة:")؛ Serial.println (لين) ؛ 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 () {// تعيين معدل البث بالباود للاتصال التسلسلي مع ESP Serial.begin (115200) ؛ // تعيين الجهاز باعتباره Wi-Fi Station WiFi.mode (WIFI_STA) ؛ // يبدأ wifi // Init ESP-NOW ويعيد حالته إذا (esp_now_init ()! = ESP_OK) {Serial.println ("خطأ في تهيئة ESP -حاليا")؛ إرجاع؛ } // استدعاء الدالة OnDataSent بعد إرسال بيانات ESPNOW esp_now_register_send_cb (OnDataSent) ؛ // تسجيل نظير esp_now_peer_info_t peerInfo؛ // تهيئة وتعيين معلومات الأقران كمؤشر لعنوان memcpy (peerInfo.peer_addr ،castAddress، 6)؛ // انسخ قيمة عنوان البث مع 6 بايت إلى peerInfo.peer_addr peerInfo.channel = 0 ؛ // القناة التي يتحدث فيها esp. 0 يعني غير محدد وسيتم إرسال البيانات على القناة الحالية.1-14 هي قنوات صالحة وهي نفسها مع الجهاز المحلي peerInfo.encrypt = false ؛ // غير مشفر // أضف الجهاز إلى قائمة الأجهزة المقترنة إذا (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("فشل إضافة نظير") ؛ إرجاع؛ } esp_now_register_recv_cb (OnDataRecv) ، // استدعاء الوظيفة OnDataRecv بعد تلقي بيانات ESPNOW send_data () ؛ } void loop () {} void send_data () {Serial.println ("Sending") ؛ // تعيين القيم لإرسال strcpy (myData.a، "هذا رمز") ؛ // حفظ "هذا حرف" لتغيير "أ" من "بياناتي" المحددة سابقًا myData.b = عشوائي (1 ، 20) ؛ // حفظ قيمة عشوائية myData.c = 1.2 ؛ // حفظ عائم myData.d = "ESP32" ؛ // حفظ سلسلة myData.e = false ؛ // save a bool // أرسل بيانات أقل من 250 بايت أو تساويها عبر ESP-NOW وإرجاع حالتها esp_err_t result = esp_now_send (castAddress، (uint8_t *) & myData، sizeof (myData)) ؛ إذا (نتيجة == ESP_OK) {Serial.println ("تم الإرسال بنجاح") ؛} else {Serial.println ("خطأ في إرسال البيانات") ؛ }}
كود ESP8266
// أضف المكتبات الضرورية
#include // لإضافة إمكانيات Wifi على ESP32 #include // للوصول إلى وظائف esp الآن // احفظ عنوان MAC في مصفوفة تسمى بثادريس ؛ uint8_t radioAddress = {0x30، 0xAE، 0xA4، 0xF5، 0x03، 0xA4} ؛ / * تحديد أنواع البيانات الخاصة بالمتغيرات المتعددة المهيكلة وإعادة تسميتها كلها كـ Struct_message * / typedef architecture_message {char a [32]؛ الباحث ب ؛ تعويم ج ؛ سلسلة د ؛ منطقي ه ؛ } Struct_message؛ // إنشاء متغير Struct_message يسمى myData Struct_message myData ؛ // دالة تسمى عند استلام البيانات وطباعتها باطلة OnDataRecv (uint8_t * mac، uint8_t * incomingData، uint8_t len) {memcpy (& myData، incomingData، sizeof (myData)) ؛ Serial.print ("البايت المتلقاة:")؛ Serial.println (لين) ؛ 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 () ، } باطل OnDataSent (uint8_t * mac_addr، uint8_t sendStatus) {Serial.print ("\ r / n حالة إرسال الحزمة الأخيرة: / t")؛ Serial.println (sendStatus == 1؟ "نجاح التسليم": "فشل التسليم") ؛ إذا (sendStatus! = 1) {send_data () ؛ }} void send_data () {// تعيين القيم لإرسال strcpy (myData.a، "THIS IS CHAR") ؛ // حفظ "هذا حرف" لتغيير "أ" من "بياناتي" المحددة سابقًا myData.b = عشوائي (1 ، 20) ؛ // حفظ قيمة عشوائية myData.c = 1.2 ؛ // حفظ عائم myData.d = "ESP8266" ؛ // حفظ سلسلة myData.e = false ؛ // حفظ منطقي esp_now_send (عنوان البث ، (uint8_t *) & myData ، sizeof (myData)) ؛ } void setup () {// تعيين معدل البث بالباود للاتصال التسلسلي مع ESP Serial.begin (115200) ؛ // تعيين الجهاز باعتباره Wi-Fi Station WiFi.mode (WIFI_STA) ؛ // يبدأ wifi // Init ESP-NOW ويعيد حالته إذا (esp_now_init ()! = 0) {Serial.println ("خطأ في تهيئة ESP-NOW") ؛ إرجاع؛ } if (esp_now_add_peer (radioAddress، ESP_NOW_ROLE_SLAVE، 1، NULL، 0)) {Serial.println ("Failed to add peer")؛ إرجاع؛ } esp_now_set_self_role (ESP_NOW_ROLE_COMBO) ، esp_now_register_send_cb (OnDataSent) ، esp_now_set_self_role (ESP_NOW_ROLE_COMBO) ، // يحدد دور هذا esp esp_now_register_recv_cb (OnDataRecv) ؛ // استدعاء الوظيفة OnDataRecv بعد تلقي بيانات ESPNOW} حلقة فارغة () {}
الخطوة 8: المراجع
ESPNOW_32_Example
مثال ESPNOW_8266
واي فاي
ESP8266WiFi.h
esp_now.h لـ ESP8266
esp_now.h لـ ESP32
esp_now المستند الرسمي (شرح أفضل للوظائف)
دليل ESP-NOW الرسمي
موصى به:
كيفية جعل برنامج تعقب البيانات الحية لفيروس كورونا COVID 19 باستخدام ESP8266 ، عرض الورق الإلكتروني: 7 خطوات
كيفية جعل برنامج تعقب البيانات الحية لفيروس كورونا COVID 19 مع ESP8266 ، شاشة عرض الورق الإلكتروني: 1
كيفية جعل RADAR باستخدام Arduino لمشروع العلوم أفضل مشاريع اردوينو: 5 خطوات
كيفية جعل RADAR باستخدام Arduino لمشروع العلوم أفضل مشاريع Arduino: مرحبًا يا أصدقاء ، في هذه التعليمات ، سأوضح لك كيفية إنشاء نظام رادار مذهل باستخدام اردوينو نانو ، هذا المشروع مثالي للمشاريع العلمية ويمكنك بسهولة القيام بذلك باستثمارات وفرص أقل إذا كان الفوز بالجائزة أمرًا رائعًا
الشروع في استخدام ESP32 CAM - دفق الفيديو باستخدام ESP CAM عبر Wifi - مشروع كاميرا الأمن ESP32: 8 خطوات
الشروع في استخدام ESP32 CAM | دفق الفيديو باستخدام ESP CAM عبر Wifi | مشروع كاميرا الأمان ESP32: سنتعلم اليوم كيفية استخدام لوحة ESP32 CAM الجديدة هذه وكيف يمكننا ترميزها واستخدامها ككاميرا أمنية والحصول على دفق فيديو عبر wifi
كيفية جعل الموسيقى WS2812B LEDs تفاعلية مع أنماط متعددة: 4 خطوات
كيفية جعل الموسيقى التفاعلية WS2812B LEDs مع نمط متعدد: WS2812 ، WS2812B هو مصدر ضوء LED يتم التحكم فيه بذكاء. لديها شريحة تحكم داخلية ولها 4 دبابيس. V +، V-، Din & amp؛ للتحكم في مصابيح LED هذه ، نريد استخدام MCU مثل Arduino أو PIC أو Rasberry pie. لقد استخدمت Arduino UNO لهذا المشروع
بث الفيديو عبر كاميرا ESP 32 عبر شبكة WiFi - البدء باستخدام لوحة ESP 32 CAM: 8 خطوات
ESP 32 Camera Streaming Video عبر WiFi | البدء باستخدام لوحة ESP 32 CAM: تعد ESP32-CAM وحدة كاميرا صغيرة جدًا مع شريحة ESP32-S تكلف حوالي 10 دولارات. إلى جانب كاميرا OV2640 والعديد من GPIOs لتوصيل الأجهزة الطرفية ، فإنها تتميز أيضًا بفتحة بطاقة microSD التي يمكن أن تكون مفيدة لتخزين الصور التي تم التقاطها باستخدام