LoRaMessenger
LoRaMessenger عبارة عن دردشة خارج الشبكة بين عقد ESP32 المجهزة بـ LoRa مع واجهة ويب لاسلكية بسيطة.
يستضيف ESP32 شبكة Wi-Fi توفر واجهة بسيطة تشبه الدردشة والتي ستعرض العقد عبر الإنترنت والرسائل المستلمة والمرسلة وبعض مربعات النص لتعيين اسم العقدة وعقدة الوجهة والرسالة.
نظرًا لاستخدام بروتوكول اتصالات LoRa لإرسال واستقبال الرسائل، فمن الممكن تعيين وحدتين أو أكثر لإرسال واستقبال الرسائل على مسافة تصل إلى بضعة كيلومترات.
تم تجهيز معظم وحدات ESP32 LoRa، مثل TTGO LoRa32 أو Heltec Wifi LoRa 32، بشاشة عرض، بحيث يمكنك استخدامها بشكل مستقل لتلقي رسائل مثل جهاز النداء.
يمكن تركيب العقدة بسهولة داخل صندوق صغير مزود ببطارية، وبالتالي إنشاء نظام اتصال يمكنه التواصل حتى في المناطق التي لا توجد فيها إشارة هاتفية.
واجهة الويب
بعد بدء تشغيل ESP32، يتم إنشاء شبكة Wi-Fi جديدة تسمى LoRaMessenger [الرقم].
عندما يتصل جهاز ما بالشبكة، يجب أن تفتح واجهة الويب تلقائيًا، وإذا لم يحدث شيء، يمكن الوصول إلى الواجهة عن طريق فتح متصفح الويب والانتقال إلى ESP32 IP، وهو 1.1.1.1 افتراضيًا.
على نظام Android، يتم فتح صفحة تسجيل دخول wifi تحتوي على واجهة الويب بعد الاتصال بشبكة Wi-Fi. بهذه الطريقة، يتم الحفاظ على اتصال شبكة 4G في الخلفية حتى عند استخدام LoRaMessenger . يجب أن يبقى الإشعار الذي يشير إلى تسجيل الدخول إلى الشبكة في لوحة الإشعارات ويمكن فتحه في أي وقت لإظهار الواجهة مرة أخرى.
يتم الآن عرض واجهة الويب على متصفحك، وتتميز الدردشة بالميزات التالية:
- في أعلى الصفحة، يمكن إدخال اسم العقدة حتى يعرف المستلم من يكتب. بعد الضغط على التحديث، يتم حفظ الاسم وإرساله إلى جميع العقد التي يمكن الوصول إليها.
- يعرض القسم عبر الإنترنت جميع العقد المتاحة التي تم اكتشافها، مع بعض المعلومات الإضافية مثل عقدة الترحيل التي تستخدمها عقدة الاستقبال إذا كانت موجودة، وRSSI المتلقي، وعدد القفزات بين المرحلات، والوقت المنقضي منذ آخر جهة اتصال.
- يعرض قسم الرسائل آخر 5 رسائل (افتراضيًا، قابلة للتعيين من قبل المستخدم) تم إرسالها واستلامها بترتيب زمني. تتم الإشارة إلى اسم كافة العقد التي تلقت الرسالة بشكل صحيح تحت كل رسالة.
- يوجد في أسفل الصفحة مربعي نص، يُستخدم الأول لتعيين العقدة الوجهة والثاني لكتابة الرسالة.
يحتوي حقل الوجهة على قيمة البث بشكل افتراضي. بهذه الطريقة يتم إرسال الرسالة إلى جميع العقد المتاحة. يمكنك أيضًا كتابة اسم العقدة تمامًا كما هو مذكور في القسم عبر الإنترنت لإرسال الرسالة إلى مستلم محدد فقط.
لاحظ أنه اعتبارًا من الآن يعد تحديث الصفحة ضروريًا لتحديث الرسائل المستلمة وإيصالات القراءة.
بروتوكول لورا
يستخدم LoRaMessenger بروتوكول اتصال مخصص، وتتكون كل حزمة مرسلة من رأس وحمولة.
يوفر الرأس المعلومات اللازمة لتوجيه الشبكة والحزم للعمل بشكل صحيح، والمعلمات الموجودة في الرأس هي كما يلي:
- NETID: معرف الشبكة، المحدد في config.h. وهذا يسمح بإنشاء شبكات مستقلة متعددة.
- TTL: مدة بقاء الحزمة، محددة في config.h. تُستخدم هذه القيمة لمعرفة عدد القفزات التي قامت بها الحزمة والتي تحتاجها خوارزمية التوجيه.
- المتلقي: رقم عقدة المتلقي.
- المرسل: رقم عقدة المرسل.
- العقدة الأخيرة: رقم عقدة المرسل أو العقدة الأخيرة التي قامت بترحيل الحزمة.
- العقدة التالية: رقم عقدة جهاز الاستقبال أو العقدة التالية اللازمة لترحيل الحزمة إلى عقدة جهاز الاستقبال.
- المعرف: معرف الحزمة، كل حزمة مرسلة من نفس العقدة لها معرف فريد بطول 4 بايت. يعد هذا ضروريًا لتجاهل الحزم المستلمة بالفعل ولإرسال إقرار مستلم.
- PAYLOAD TYPE: نوع الحمولة، يُستخدم لتفسير الحمولة بشكل صحيح. أنواع الحمولات المحتملة هي: رسالة، وإقرار، وإعلان.
حمولة الرسالة:
- MESSAGE SIZE: حجم الرسالة بالبايت، وهو ضروري لقراءة الرسالة.
- الرسالة: محتوى الرسالة. يتم إرسال هذا في نص عادي في الوقت الراهن!
حمولة الإقرار:
- معرف الحزمة المستلمة: معرف من حزمة الرسائل المستلمة. يتم إرسال هذا مرة أخرى إلى المرسل لإعلامه باستلام الحزمة.
الإعلان عن الحمولة:
- NAME SIZE: حجم اسم العقدة بالبايت، مطلوب لقراءة الاسم.
- اسم العقدة: اسم العقدة. يتم عرض هذا على كل واجهة ويب للعقدة ويمكن كتابته في حقل الوجهة لإرسال رسالة إلى عقدة محددة فقط.
ترحيل الحزمة وتوجيهها
يقوم LoRaMessenger بإنشاء شبكة من العقد القادرة على إعادة توجيه الرسائل إلى العقد التي لا يمكن للمرسل الوصول إليها مباشرة.
للقيام بذلك، تستخدم كل عقدة جدول توجيه تلقائي يحتوي على العقد الوجهة وأفضل طريق للوصول إليها. يتم تحديث الجدول من خلال حزم الإعلانات التي يتم إرسالها بشكل دوري أو عند تغيير الاسم بواسطة كافة العقد.
إن خوارزمية التوجيه الحالية بسيطة للغاية وتفضل عددًا أقل من القفزات، وفي حالة وجود مسارين لهما نفس عدد القفزات، يتم اختيار المسار الذي يتصل بالعقدة الأقوى التالية.
تثبيت
يمكن تثبيت هذا البرنامج بسهولة عن طريق استيراد المشروع في النظام الأساسي وتحديث الإعدادات وتحميله على اللوحات.
إعدادات
في مجلد التضمين، يوجد ملف تكوين يسمى config.h. يحتوي هذا الملف على كافة الإعدادات اللازمة لكي يعمل LoRaMessenger .
تكوين لورا:
- LORABAND: تردد شريحة LoRa. يعتمد التردد على اللوحة الخاصة بك والترددات المحلية المسموح بها، يرجى التأكد من استخدام الترددات المسموح بها فقط في بلدك، مزيد من المعلومات هنا.
القيم المحتملة: 433E6، 866E6، 915E6. - عامل الانتشار: عامل انتشار LoRa. كن حذرًا عند استخدام قيم أعلى من 7 لأن LoRaMessenger يحترم دورة عمل الإرسال. تعمل القيم العالية على إبطاء وقت الانتظار بين عمليات الإرسال إلى حد كبير ويمكن أن تؤثر على التشغيل الصحيح، وقد تكون هناك حاجة إلى تعديلات أخرى مثل وقت منع الاصطدام. القيم المحتملة: 7 - 12.
- TXDBM: قوة نقل شريحة LoRa.
القيم المحتملة: 1 - 20 - LORADUTY: دورة عمل ناقل الحركة. تأكد من استخدام القيم المسموح بها فقط في بلدك. القيم المحتملة: 1 - 99.
- NETID: معرف شبكة LoRaMessenger . وهذا يسمح بإنشاء شبكات مستقلة متعددة.
القيم المحتملة: 0 - 255.
التكوين L1:
- L1BUFFER: قائمة انتظار حزم الإرسال. تزيد في حالة استخدام شبكات كبيرة من العقد أو استخدام عوامل انتشار عالية.
- TTL: وقت الحزمة للعيش. يضبط الحد الأقصى لعدد القفزات التي يمكن أن تقوم بها الحزمة قبل انتهاء صلاحيتها.
القيم المحتملة: 1 (الرسائل المباشرة فقط، بدون ترحيل)، >1. - BROADCASTADDR: رقم عنوان البث.
التكوين L3:
- NODENUMBER: رقم العقدة المحلية. كل عقدة تحتاج إلى رقم عقدة مختلف! يمكنك أن تعتقد أن هذا يعادل عنوان IP لشبكة عادية.
القيم المحتملة: 1 - 255. احذر من استخدام نفس عنوان BROADCASTADDR! - MAXNODES: الحد الأقصى لعدد العقد المتوقعة في الشبكة.
- الإعلانات: الإعلان عن وجود العقدة وتحديث الاسم. هذه الرسالة ضرورية لإبلاغ جميع العقد بوجود جميع العقد الأخرى. يمكن زيادة الفاصل الزمني لمنع البريد العشوائي في حالة استخدام العقد الثابتة أو عوامل الانتشار العالية أو الشبكات الكبيرة.
- INACTIVEMINS: وقت عدم النشاط اللازم لكي تعتبر العقدة غير متصلة بالإنترنت. يجب الحذر من استخدام ما لا يقل عن 2-3 أضعاف قيمة ANNOUNCEMINS أو حتى أكبر في حالة سوء الاستقبال.
- INACTIVESECONDSREMOVECHECK: الفاصل الزمني للتحقق من إزالة العقد غير المتصلة.
تكوين الرسائل:
- SHOWNMESSAGES: عدد الرسائل التي سيتم عرضها على واجهة الويب.
- KEEPNMESSAGES: عدد الرسائل التي يجب الاحتفاظ بها في الذاكرة.
عرض التكوين:
- DISPLAYSTBYSECS: عدد الثواني بعد إيقاف تشغيل الشاشة.
تكوين الشبكة:
- WIFIENABLED: تمكين Wi-Fi. يمكن استخدام هذا لتقليل الطاقة المستخدمة في حالة نشر عقدة لنقل الرسائل فقط.
- NODENAMEOVERRIDEEN: تمكين تجاوز اسم العقدة. يُستخدم لتجاوز اسم العقدة الافتراضية (العقدة [الرقم]) إلى السلسلة المحددة في NODENAMEOVERRIDE.
- NODENAMEOVERRIDE: تجاوز اسم الاسم. يمكن استخدام هذا لتعيين اسم العقدة دون تعديله على واجهة الويب. مفيد عند إعداد عقدة الترحيل فقط.
- WIFISSID: بادئة اسم شبكة Wi-Fi ( LoRaMessenger [الرقم])
- DNSPORT: منفذ DNS.
دبوس:
- SCK: ساعة SPI.
- ميسو: SPI ميسو.
- موسي: سبي موسي.
- SS: اختيار الرقيق SPI.
- RST: إعادة ضبط شريحة LoRa.
- DI0: تتلقى LoRa رد الاتصال.
- I2CSCL: ساعة I2C.
- I2CSDA: بيانات I2C.
- LCDRESET: إعادة ضبط LCD.
قد يلزم تحرير تعريفات الدبوس في حالة استخدام لوحة أخرى (تعتمد تعريفات الدبوس على TTGO LoRa32 V2).
التحسينات/الإصلاحات المستقبلية
الميزات الأخرى التي تم التخطيط لها في المستقبل هي:
- تشفير الرسائل، اعتبارًا من الأول يتم إرسال جميع الرسائل غير مشفرة.
- التحديث التلقائي للرسائل.
- اختبار وتحسين خوارزمية التوجيه.
رخصة
رخصة معهد ماساتشوستس للتكنولوجيا.