ESP-NOW هو بروتوكول اتصال بديل لـ ESP8266 و ESP32. مفاهيم أساسية



ESP-NOW هو بروتوكول WiFi مبسط لإرسال الحزم القصيرة بين أزواج من الأجهزة المقترنة ، تم تطويره وإصداره بواسطة Espressif in 2016-07 لـ Microcontrollers ESP8266 و ESP32. في الوقت نفسه ، لا يتم استخدام الإجراءات الإضافية المتعلقة بدعم بروتوكول WiFi ، مما يسرع عملية تبادل الحزم.

يمكن استخدام ESP-NOW على إنترنت الأشياء للتحكم في مصادر الإضاءة الذكية والمرحلات والمآخذ وأجهزة التحكم عن بعد الأخرى وتلقي المعلومات من أجهزة الاستشعار والتطبيقات الأخرى.

يدعم ESP-NOW الميزات التالية


  • اتصال مشفر وغير مشفر بين الأجهزة المقترنة.
  • مختلط الاتصال المشفر وغير المشفر بين الأجهزة المقترنة.
  • انقل حتى 250 بايت من المعلومات المفيدة.
  • إعداد وظيفة رد الاتصال لإبلاغ طبقة التطبيق ، على وجه الخصوص ، بنجاح أو فشل الإرسال.


يحتوي ESP-NOW أيضًا على الميزات والقيود التالية.


  • سرعة الإرسال - لا تزيد عن 1 ميجا بت في الثانية بتردد 2.4 جيجا هرتز ، أي يعمل ESP-NOW على نفس التردد والقنوات التي يعمل بها موجه WiFi الخاص بك.
  • بروتوكول WiFi غير مستخدم
  • مشابه لبروتوكول الطاقة المنخفضة المستخدمة في ماوس لاسلكي 2.4 غيغاهرتز.
  • مطلوب الإقران الأولي فقط.
  • بعد الاقتران ، لا ينقطع الاتصال.
  • البث غير معتمد - التوزيع المتعدد فقط على أزواج الأجهزة المقترنة.
  • يتم دعم 20 زوجًا كحد أقصى ، بما في ذلك الأزواج المشفرة ، على جهاز واحد ، بما في ذلك الأزواج المشفرة.
  • يتم دعم 10 أزواج مشفرة كحد أقصى في وضع المحطة.
  • الحد الأقصى 6 في وضع SoftAP أو SoftAP + Station.
  • تشفير الإرسال المتعدد غير معتمد.

سلامة


يعتمد برنامج ESP-NOW تقنية إطار عمل البائع IEEE802.11 مع وظيفة IE التي طورتها تقنية التشفير Espressif و CCMP ، مما يوفر حل اتصال آمن وخالي من الاتصال. يدعم جهاز Wi-Fi مفتاح رئيسي أساسي (PMK) ومفاتيح رئيسية محلية متعددة (LMK)

  • يُستخدم PMK لتشفير LMK باستخدام خوارزمية AES-128.
  • يتم استخدام الجهاز المقترن LMK لتشفير معلومات المستخدم باستخدام CCMP. الحد الأقصى لعدد LMKs مختلفة هو 6. إذا لم يتم تعيين LMK للجهاز المقترن ، فلن يتم تشفير بيانات المستخدم.

المستوى الأساسي لل


في المستوى الأدنى من بروتوكول ESP_NOW ، يتم الاحتفاظ بقائمة مرتبطة تحتوي على معلومات حول الجهاز المحلي والجهاز المقترن ، بما في ذلك عناوين ومفاتيح MAC. يقوم برنامج ESP-NOW أيضًا بتخزين البيانات المستخدمة بشكل متكرر لطبقة التطبيق لتجنب زيادة إعادة معالجة القائمة المرتبطة. تُستخدم المعلومات المتعلقة بالأجهزة لإرسال البيانات وتلقيها وتتضمن

معلومات حول الجهاز المحلي:

  • PMK : 16 بايت - المفتاح الرئيسي الذي يتم استخدامه لتشفير المفتاح على الجهاز المرفق (KOK في API) ESP_NOW يدعم PMK بشكل افتراضي ، لذلك لا يلزم التكوين. إذا لزم الأمر ، يمكنك التحقق من تطابق قيمة PMK مع الجهاز المحلي.
  • الوضع : 1 بايت - وضع الجهاز المحلي الذي يحدد واجهة WiFi المرسلة (SoftAP أو STA) ESP-NOW. لا يؤثر وضع الجهاز المقترن على أي وظيفة ، ولكنه يحفظ فقط معلومات الوضع لطبقة التطبيق. في وضع STA WiFi ، تكون المحطة فقط قابلة للتطبيق و SoftAP WiFi هي فقط SoftAP.
    أوضاع تشغيل الجهاز المحلي ESP_NOW
    WiFi
    IDLE
    CONTROLLERSTA
    SLAVESoftAP

    COMBO&SoftAP


معلومات الجهاز المقترن (بما في ذلك المعلومات المستخدمة بشكل متكرر ومعلومات المستخدم الأخرى):

  • LMK : 16 بايت - مفتاح رئيسي محلي يستخدم لتشفير مفتاح المعلومات المفيدة أثناء الاتصال في هذا الزوج.
  • MAC-: 6 — , . , Station, MAC- Station.
  • : 1 — (SoftAP STA) ESP-NOW.
  • : 1 — , , . 0..255. , . . , 0 , ; 1 ~ 14 ; , .

لا يوصي Espressif باستخدام العمليات المطولة في وظائف رد الاتصال عند إرسال / إرسال الحزم ، والتي من المفترض أن تكون مرتبطة بتنفيذ الخوارزميات باستخدام آلية المقاطعة. هذا الافتراض مدعوم أيضًا بالمشكلات المرتبطة بتخصيص الذاكرة الديناميكية في وظائف رد الاتصال ، والتي يتم حلها من خلال الاستخدام المفضل للمتغيرات الثابتة ، بالإضافة إلى غموض استخدام آلية استثناء MicroPython .

/ تحيل تنفيذ اتواقت العمليات بداية / نهاية، الاقتران، وتلقي Espressif الحزم و ليس وصفها، والتي أيضا لا يسهل تطبيق asyncio MicroPython أيديولوجية .

تنسيق حزمة ESP-NOW


  • رأس MAC : 24 بايت.
  • الفئة : بايت واحد يشير إلى فئة منشئ الحزمة. يتم تعيين القيمة (127).
  • معرف المؤسسة : 3 بايت ، يحتوي على معرف فريد ، وهو أول ثلاث وحدات بايت من عنوان MAC الذي تستخدمه Espressif. تعيين القيمة (0x18fe34)
  • القيمة العشوائية : 4 بايت تستخدم لحماية البيانات.
  • بيانات منشئ الحزمة : 7-255 بايت

تحتوي بيانات منشئ الحزمة على الحقول التالية:

  • ID : 1 بايت ، مضبوطة على (221).
  • الطول : 1 بايت ، الطول الإجمالي لمعرف المؤسسة ، النوع ، الإصدار ، وبيانات المستخدم.
  • معرف المؤسسة : 3 بايت ، يحتوي على معرف فريد ، وهو أول ثلاث وحدات بايت من عنوان MAC الذي تستخدمه Espressif. تعيين القيمة (0x18fe34)
  • النوع : 1 بايت ، بروتوكول ESP-NOW. تعيين القيمة (4)
  • الإصدار : 1 بايت ، الإصدار الحالي من ESP-NOW. مثبتة (1)
  • المحتوى : 0-250 بايت بيانات المستخدم.
  • FCS : 4 بايت ، المجموع الاختباري

نظرًا لأن ESP-NOW لا يستخدم WiFi ، فإن رأس MAC يختلف قليلاً عن رأس الحزمة القياسي. بتات FromDS و ToDS في حقل FrameControl هي 0. يتم تحديد عنوان الوجهة في حقل العنوان الأول. يعرض حقل العنوان الثاني عنوان المصدر. يتم تعيين حقل العنوان الثالث كعنوان البث (0xff: 0xff: 0xff: 0xff: 0xff: 0xff).

خوارزمية التطبيق الأساسية


بداية و نهاية


قبل استخدام ESP-NOW ، يوصى بتعيين واجهة Wi-Fi في الوضع المطلوب. عادة، يتم تعيين واجهة محطة ل CONTROLLER ، واجهة SoftAP ل الرقيق و COMBO . من المستحسن أيضًا إيقاف Wi-Fi بعد استخدام ESP-NOW.

لبدء ESP-NOW ، اتصل esp_now_init () و esp_now_deinit () للإكمال . عند استدعاء esp_now_deinit () ، يتم حذف جميع المعلومات حول الأجهزة المقترنة.

وظائف رد الاتصال الملزمة


يمكن استخدام وظيفة معالجة المكالمات عند إرسال الحزمة esp_now_register_send_cb () لإبلاغ مستوى التطبيق للطرف المرسل في زوج عن نجاح أو فشل الإرسال ، على سبيل المثال ، إذا تم نقل المعلومات الموجودة على طبقة MAC الفرعية بنجاح.

عند استخدام esp_now_register_send_cb () ، ضع في الاعتبار ما يلي:

في زوج مرتبط:

  • إذا لم تستقبل طبقة التطبيق الحزمة ، ولكن وظيفة رد الاتصال أعادت "نجاح" ، فقد يكون السبب:
    - الهجمات من جهاز احتيالي
    - أخطاء تثبيت المفتاح المشفرة
    - فقدان الحزمة على مستوى تطبيق Espressif
  • إذا تلقت طبقة التطبيق الحزمة ، ولكن وظيفة رد الاتصال ترجع خطأ ، فقد يكون السبب:
    - القناة مشغولة ولا يتم تلقي ACK.

مع اتصالات متعددة مع جميع أزواج الجهاز المحلي:

  • إذا أعاد رد الاتصال "نجاح" ، فهذا يعني أنه تم إرسال الحزمة بنجاح.
  • إذا أعادت وظيفة رد الاتصال خطأ ، فهذا يعني أنه لم يتم إرسال الحزمة بنجاح.

تقوم وظيفة معالجة المكالمات عند استلام الحزمة esp_now_register_receive_cb () بإرجاع المعلومات بما في ذلك عنوان MAC الخاص بجهاز الإرسال في زوج ومعلومات مفيدة. يمكن استخدامه أيضًا لإبلاغ طبقة التطبيق لجهاز الإرسال المقترن بجهاز الاستقبال أن الحزمة قد تم استلامها بنجاح.

إضافة زوج من الأجهزة المقترنة


قبل إرسال البيانات ، يجب عليك إضافة الجهاز إلى قائمة أزواج الأجهزة المقترنة عن طريق استدعاء esp_now_add_peer () . قبل إرسال البيانات إلى مجموعة أزواج تم تأسيسها ، يجب عليك إضافة جهاز بعنوان MAC متعدد الإرسال. نطاق قناة الأجهزة المقترنة من 0 إلى 14. إذا تم تعيين القناة إلى 0 ، سيتم إرسال البيانات على القناة الحالية. وبخلاف ذلك ، يجب تعيين القناة كقناة يوجد عليها الجهاز المحلي.

سلامة


إذا احتاج المفتاح إلى التشفير ، فيمكنك الاتصال بـ esp_now_set_pmk () لتهيئته لتعيين PMK. إذا لم يتم تثبيت PMK ، فسيتم استخدام PMK افتراضيًا وتحديد نفس المفتاح لجميع الأجهزة. اضبط أيضًا LMK للأزواج المحددة.

إرسال البيانات مع حزم ESP-NOW


استخدم esp_now_send () لإرسال بيانات ESP-NOW . في الوقت نفسه، وضعت وظيفة في وقت سابق من esp_now_register_send_cb () سيعود ESP_NOW_SEND_SUCCESS عند إرسال ظيفة رد إذا كان في استقبال البيانات بنجاح على مستوى MAC. خلاف ذلك ، سيعود ESP_NOW_SEND_FAIL . قد تتسبب عدة أسباب في عدم قدرة ESP-NOW على إرسال البيانات. خاصه،

  • الجهاز المستهدف غير موجود ؛
  • قنوات الجهاز لا تتطابق ؛
  • يتم فقدان البيانات أثناء الإرسال.

ليس من المضمون أن طبقة التطبيق ستقبل البيانات بالضرورة. إذا لزم الأمر ، يمكنك إرسال تأكيد عندما تتلقى بيانات ESP-NOW. في حالة حدوث مهلة للتأكيد ، يجب تكرار إرسال البيانات ESP-NOW. يمكن أيضًا تعيين رقم تسلسلي لبيانات ESP-NOW لإزالة البيانات المكررة.

عند إرسال بيانات ESP-NOW عبر esp_now_send () ، يرجى ملاحظة أنه لا يمكن إرسال أكثر من 250 بايت من المعلومات في المرة الواحدة.

انتباه! فاصل زمني قصير جدًا بين إرسال حزمتي ESP-NOW يمكن أن يؤدي إلى أخطاء في تنفيذ وظيفة رد الاتصال ، لذلك يُنصح بإرسال حزمة البيانات التالية ESP-NOW بعد اكتمال وظيفة رد الاتصال بنجاح معالجة الإرسال السابق. يتم إرسال وظيفة رد الاتصال من مهمة Wi-Fi ذات أولوية عالية. لذلك ، لا يوصى بإجراء عمليات طويلة في وظيفة رد الاتصال. بدلاً من ذلك ، يمكنك وضع البيانات الضرورية في قائمة انتظار ثابتة ومعالجتها من عملية ذات أولوية أقل.

إذا أعادت وظيفة الإرسال عنوان MAC ، فسيتم إرسالها إلى الجهاز بعنوان MAC هذا. إذا أعادت وظيفة الإرسال القيمة الفارغة (NULL) ، فسيتم إرسال الحزمة إلى جميع الأجهزة المتصلة بالجهاز المرسل ، مما قد يؤدي إلى فشل الإرسال أو التأخير بسبب ازدحام الشبكة.

ESP-NOW تلقي البيانات


تبدأ وظيفة رد الاتصال أيضًا من مهمة Wi-Fi. لذلك ، لا يوصى بإجراء عمليات طويلة في وظيفة رد الاتصال. بدلاً من ذلك ، يمكنك وضع البيانات الضرورية في قائمة انتظار ثابتة ومعالجتها بعملية ذات أولوية أقل.

في الختام ، ما سبق


تجربتي في بناء Espressif IDE و MicroPython مع ESP-NOW ، تصف الأخطاء التي واجهتها أثناء التجميع وسأصلحها بعد أن أحقق نتيجة مستقرة. ثم سأقدم وصفًا لمكتبة ESP-NOW على MicroPython مع اكتشاف الأخطاء وطرق حلها. لسوء الحظ ، نظرًا لأن كود المصدر لـ ESP-NOW مغلق وموزع فقط في شكل ثنائي ، فإن فهم خوارزميات بروتوكول ESP-NOW أمر تجريبي وهناك عدد من المشكلات التي تم تحديدها بالفعل ، والتي لا توجد دائمًا خيارات للتغلب عليها منطقياً ، ولكن بشكل عام ESP تم تطبيق -NOW بنجاح في مجتمع كل من مستخدمي C و Pythonists بناءً على أكثر من 300 تطبيق مقدم على GitHub.

وصف مكتبة ESP-NOW C بواسطة Espressif

وصف MicroPython ESP-NOW والمصادر المفتوحة

All Articles