نصنع البوابة بين Wi-Fi و LoRa لـ UDP

كان لدي حلم في طفولتي - أن أعطي لكل أسرة "خالية من الواي فاي" تذكرة شبكة ، أي عنوان IP ومنفذ. بعد بعض الوقت ، أدركت أنه لا ينبغي لي تأجيله. يجب أن نأخذ ونفعل.
الاختصاصات
اجعلها بوابة M5Stack مع وحدة LoRa مثبتة (الشكل 1). سيتم توصيل البوابة بشبكة Wi-Fi للحصول على عنوان IP محلي عبر DHCP. ستقوم البوابة ببث اسمها على LoRa-ether بتردد معين (تناظرية SSID لشبكة Wi-Fi) ومجموعة من المنافذ المقبولة ، بحيث تعرف الأجهزة الأخرى أن هناك مثل هذه الشبكة التي يمكنك الاتصال بها وفي أي مدى يمكنك اختيار منفذ مجاني. نظرًا لأن هذا سيكون نموذجًا أوليًا ، فإن المصادقة ليست هذه المرة. سوف تعثر الأجهزة العميلة الجديدة على شبكة LoRa المتاحة وتنقل المنفذ المحدد إليها. بعد أن استقبلت البوابة منفذًا من عميل جديد ، تتحقق مما إذا كان مجانيًا ، وإذا كان الأمر كذلك ، فإنها تسجل عميلًا جديدًا وتبدأ في الاستماع إلى هذا المنفذ على خادم UDP غير المتزامن الخاص بها. بعد التسجيل ، سيتلقى العميل موافقة أو رفض استخدام المنفذ المعلن. يظهر إجراء التشغيل في الجدول 1.

الشكل 1
الجدول 1
قبلي على الطاولة هي كل أنواع الوحدات النمطية لـ M5Stack وهي بالملل. لنأخذ لو والمتعة معها . مفهوم الوحدة نفسها جميلة! ماذا يمكنني أن أقول؟ ولكن ، الوحدات النمطية لمراجعتي الأولى ، والتي صنع فيها هوائي مدمج فظيع ، على لوحة دوائر مطبوعة مرنة ولصقها على الجدار الجانبي للحالة. لقد أجريت الاختبارات الميدانية لمثل هذه الوحدات (يمكنك مشاهدتها على القناة باللغة الروسية على YouTube):
وبطبيعة الحال ، كان علي إزالة هذه الأساسيات ولحام الهوائيات الحلزونية القياسية التي تأتي مع Ra-01. بعد هذا التخصيص ، تحسن نطاق الاتصال بشكل ملحوظ ، ولكن ظهرت نقطة جانبية - للهوائي قطر أكبر من المسافة المسموح بها بين الوحدات. اضطررت إلى التخلي عن الوحدة النهائية لمدة المشروع.
الصعوبات الأولى من ضيق التزامن
يبدو أن المكتبة WiFiUdp.h ، حيث كل شيء من أجل وجود مريح لخادم UDP ، لا. تم تصميم المكتبة لرفع خادم متزامن ، والتي ، للأسف ، لا يمكن أن تخدم اتصالات متعددة في نفس الوقت. هذه المكتبة ليست مناسبة للمهمة الحالية. اضطررت إلى شرب الكثير من أكواب الشاي والبحث عن مكتبة تسمح لنا برفع خادم UDP غير متزامن قادر على دعم العديد من الاتصالات في نفس الوقت. تم العثور على هذه المكتبة - AsyncUDP.h . ما هو الفرق بين خادم متزامن وخادم غير متزامن؟ دعنا نلقي نظرة على ست حلقات في الشكل 2 ، حيث يتم عرض خيارات تشغيل المقبس بشكل تافه.

الشكل 2
بطولة:
رجل في دور مأخذ ؛
حمامة في دور المجمع ؛
بيسمو كبيانات .
الحلقة A. متزامن المقبس دون مهلة
سيقف الشخص حتى يحضره حمامة.
الحلقة B. مأخذ توصيل متزامن مع مهلة
رجل ينتظر الوقت المتفق عليه مع الحمامة ، وإذا لم يصل في الوقت المحدد ، فسيغادر الرجل.
الحلقة C. متزامن multithreading المقبس
رجل يستريح ويراقب بينما تقدم الحمام رسائل من تلقاء نفسها.
الحلقة D. مقبس غير متزامن (عندما لا يوجد شيء آخر لتلقي)
رجل يفعل الأشياء المفضلة لديه ، لكنه لا ينسى الحمام.
الحلقة E. مقبس غير متزامن (عندما يكون هناك شيء لتلقي)
الرجل صرف الانتباه لفترة قصيرة عن شؤونه لتلقي رسالة من الحمامة.
الحلقة F. متزامن Multithreading المقبس
رجل يدور حول عمله ويشاهد الحمام يسلم رسائل من تلقاء نفسه.
إذا كنت حريصًا ، فمن المحتمل أن تكون قد لاحظت أن الياقات الموجودة على الحمام في كل حلقة لها لون معين. وهذا ليس صدفة. في الحلقة A و B ، يعمل مقبس واحد فقط على الخادم وهذا كل شيء. الحلقة C لديها بالفعل مآخذين. تحتوي الحلقات D و E و F بالفعل على ثلاثة مآخذ. "لماذا هناك اثنان ، ولكن هنا ثلاثة؟" - أنت تسأل. هذا هو الشرط 2 و 3 ، في الواقع ، بدلاً من 2 ، يمكن أن يكون 20 ، وبدلاً من ثلاثة 200. المهمة هي إظهار أن مآخذ التوصيل غير المتزامنة لا تحرق الحديد بقدر ما تحرق المآخذ المتزامنة.
أين ما يصلح؟
دعونا نلقي نظرة على الجدول 1 ، الذي يوضح بنية حزمة UDP والتفكير فيما يمكنك القيام به حيال ذلك.
الجدول 1. هيكل حزمة UDP
أضف حقل جلسة آخر (1 بايت) إلى بداية هذا الجدول. هذا يكفي لهذا المشروع. استنادًا إلى الجلسة ، سيعرف الجهاز ما يجب القيام به مع الحزمة التالية. الآن سنتوصل إلى رموز للجلسات ونكتبها في الجدول 2.
الجدول 2. وصف الجلسة
حسنا. الآن لنناقش تكوين الجلسات في الجدول 3.
الجدول 3. جلسات
كتب اثنين من العملاء لاردوينو و M5Stack. يمكنك أن ترى كيف يعمل في الفيديو . لا توجد مشاكل داخل الشقة ، لم أقم بإجراء اختبارات ميدانية بعد.
شفرة المصدر متاحة على جيثب في
تعرف على المزيد حول M5Stack Base Unit واشترِ من هنا.
يمكنك تحديد وحدات LoRa اللاسلكية لوحدة Base هنا
سأكون سعيدًا إذا كان هذا المشروع مفيدًا لك. شكرا جزيلا على وقتك!
المراجع و (أو) المصادر: