سنتعلّم في هذا المقال مبادئ عمل تقنيّة LoRa الأساسيّة (بروتوكول الاتّصال بعيد المدىLong Range )، وكيفيّة استخدامها مع ESP32 لمشاريع IoT (إنترنت الأشياء Internet of Things) باستخدام بيئة أردوينو البرمجيّة، وسنوضّح كيفيّة إنشاء مرسل ومستقبل LoRa باستخدام وحدة إرسال واستقبال RFM95.

يتحدث الفيديو التالي عن أساسيّات ومبادئ تقنيّة LoRa:

 

ما هي LoRa؟

هي تقنيّة نقل بيانات لاسلكيّة، تستخدم تقنيّة التعديل الراديويّ التي يمكن توليدها بوساطة شرائح إرسال واستقبال تُدعى Semtech LoRa.

تعديل موجات الراديو وشرائح LoRa
تعديل موجات الراديو وشرائح LoRa (مصدر الصورة: موقع randomnerdtutorials)

 

تسمح تقنيّة التعديل هذه باتّصال طويل المدى لكمٍّ صغيرٍ من البيانات (ممّا يعني أنّ عرض الحزمة قليل)، ومناعة عالية ضدّ التداخل، بالإضافة إلى تقليل استهلاك الطاقة، ممّا يسمح بالاتّصال عبر مسافات بعيدة بمتطلّبات طاقة منخفضة.

ميّزات استخدام تقنيّة LoRa.
ميّزات استخدام تقنيّة LoRa (مصدر الصورة: موقع randomnerdtutorials)

 

تردّدات LoRa:

تَستخدم هذه التقنيّة تردّدات لا تتطلّب رخصة، وهي متاحة للجميع. وهذه هي أكثر التردّدات انتشاراً عالميّاً:

  • 868 MHz في أوروبّا.
  • 915 MHz في أمريكا الشماليّة.
  • 433 MHz في آسيا.

وبما أنّ هذه التردّدات لا تتطلّب رخصة، فيمكن استخدامها بشكل مجّانيّ من قبل أيّ شخص، ودون الحاجة إلى رخصة.

يمكنك معرفة التردّدات المتاحة في بلدك من هنا

تطبيقات LoRa:

إنّ ميّزات LoRa طويلة المدى ومنخفضة الطاقة تجعلها مثاليّة للحسّاسات التي تعمل بالبطاريّة، والتطبيقات منخفضة استهلاك الطاقة في:

  • إنترنت الأشياء IoT.
  • المنازل الذكيّة.
  • اتّصال آلة بآلة أخرى.
  • وغيرها الكثير.

فهي خيار جيّد لعقد الاستشعار التي تعمل بالبطاريّة أو بالطاقة الشمسيّة، والتي ترسل كمّيّات قليلة من البيانات.

استخدام LoRa في الطاقة الشمسيّة والبطاريّات.
استخدام LoRa في الطاقة الشمسيّة والبطاريّات (مصدر الصورة: موقع randomnerdtutorials)

تقنيّة LoRa ليست مناسبة لبعض المشاريع، ومنها:

  • التطبيقات التي تتطلّب معدّل نقل بيانات عالٍ.
  • التطبيقات التي تحتاج عمليّات نقل متكرّرة بشكل كبير.
  • التطبيقات ضمن الشبكات المزدحمة.

تقنيّات وصل LoRa:

يمكن وصل شبكة LoRa بطريقتين:

شبكات وصل LoRa نقطة بنقطة، وشبكة.
شبكات وصل LoRa نقطة بنقطة وشبكة (مصدر الصورة: موقع randomnerdtutorials)

 

  • اتّصال نقطة بنقطة.
  • بناء شبكة LoRa (على سبيل المثال، باستخدام LoRaWAN).

اتّصال نقطة بنقطة:

في هذه التقنيّة، يتبادل جهازا LoRa البيانات باستخدام إشارات راديويّة RF.

على سبيل المثال، يُستخدم هذا الاتّصال لتبادل البيانات بين لوحتي ESP32 مزوّدتين بشريحتي إرسال/استقبال LoRa تتوضّعان بعيداً عن بعضهما نسبيّاً، أو في بيئة دون تغطية شبكة Wi-Fi.

وصل نقطة بنقطة.
وصل نقطة بنقطة (مصدر الصورة: موقع randomnerdtutorials)

 

على عكس تقنيّتي البلوتوث وWi-Fi اللتان تدعمان الاتّصال قصير المدى، يمكن تبادل البيانات هنا عبر مسافات بعيدة باستخدام جهازي LoRa مع هوائيّ مناسب.

مقارنة تغطية تقنيّة البلوتوث وWi-Fi مع تقنيّة LoRa.
مقارنة تغطية تقنيّة البلوتوث وWi-Fi مع تقنيّة LoRa (مصدر الصورة: موقع randomnerdtutorials)

يمكن تهيئة ESP32 بسهولة بشريحة LoRa لإرسال واستقبال البيانات بموثوقيّة لمسافات تتجاوز 200 متر. كما يمكن الحصول على نتائج أفضل في بيئات مختلفة، وبإعدادات LoRa مناسبة، حيث إنّ هناك حلول أخرى باستخدام LoRa بتغطية تتجاوز 30 كم.

شبكة LoRaWAN:

بإمكانك بناء شبكة باستخدام تقنيّة .LoRaWAN

 LoRaWAN
LoRaWAN (مصدر الصورة: موقع randomnerdtutorials)

 

بروتوكول اتّصال LoRaWAN هو شبكة منخفضة الطاقة، واسعة المدى، ويرمز لها اختصاراً بـ LPWAN (تقنيّة LoRa الموحّدة من LoRa Alliance). ولمزيد من المعلومات عن LoRa Alliance، اضغط هنا  و هنا

كيف نستخدم LoRa في مشاريع الأتمتة المنزليّة؟

في هذا المثال العمليّ، يمكنك قياس نسبة الرطوبة في حديقتك باعتبارها غير بعيدة عن منزلك، لكن لا تصلها تغطية Wi-Fi. ويمكنك بناء عقدة استشعار باستخدام لوحة ESP32، وحسّاس رطوبة يرسل درجة الرطوبة مرّة أو مرّتين في اليوم إلى لوحة ESP32 أخرى باستخدام LoRa.

استخدام LoRa في حسّاس رطوبة.
استخدام LoRa في حسّاس رطوبة (مصدر الصورة: موقع randomnerdtutorials)

تملك لوحة ESP32 الأخرى وصولاً إلى شبكة Wi-Fi، وبإمكانها تشغيل مخدّم ويب الذي يعرض بدوره درجة الرطوبة.

تقنيّة LoRa في تجربة لتحسُّس الرطوبة.
تقنيّة LoRa في تجربة لتحسُّس الرطوبة (مصدر الصورة: موقع randomnerdtutorials)

وهذا مثال توضيحيّ لاستخدام تقنيّة LoRa في مشاريع ESP32.

حسّاس الرطوبة معLoRa عمليّاً.
حسّاس الرطوبة معLoRa عمليّاً (مصدر الصورة: موقع randomnerdtutorial)

 

ربط وحدة ESP32 مع شريحة LoRa:

سنشرح في هذا القسم كيفيّة استخدام تقنيّة LoRa مع ESP32 باستخدام بيئة أردوينو البرمجيّة. على سبيل المثال، سننشئ مرسل ومستقبل LoRa بسيط.

يرسل مرسل LoRa رسالة hello”” متبوعة بعدّاد للاختبار، ويمكننا تبديل هذه الرسالة بسهولة ببيانات مفيدة، مثل قراءات الحسّاس، أو الإشعارات.

ألواح ESP32 مع LoRa.
ألواح ESP32 مع LoRa (مصدر الصورة: موقع randomnerdtutorial)

نحتاج العناصر التالية لهذا القسم، وهي:

  • لوحا ESP32 DOIT DEVKIT V1.
  • وحدتا مرسل مستقبل LoRa (RFM95).
  • لوح RFM95 LoRa breakout board (اختياريّ).
  • أسلاك التوصيل.
  • لوح اختبار أو لوح مثقّب لتوصيل العناصر الإلكترونيّة.

البدائل:

جهازا TTGO LoRa32 SX1276 OLED، حيث نستبدل كلّ من لوحتي ESP32، ووحدتي مرسل مستقبل LoRa منفصلتين بألواح تطوير ESP32 مزوّدة بشريحة LoRa مدمجة، وشاشة OLED؛ ممّا يجعل التوصيل أسهل بكثير. ويتمثّل البديل في:

ألواح TTGO LoRa32 SX1276 OLED.
ألواح TTGO LoRa32 SX1276 OLED(مصدر الصورة: موقع randomnerdtutorial)

تحضير بيئة أردوينو البرمجيّة:

هناك إضافة برمجيّة لبيئة أردوينو تتيح لنا برمجة لوحة ESP32 بلغة برمجة أردوينو. زُر الروابط التالية لتحضير البيئة للعمل مع ESP32:

الرابط لمستخدمي Windows:انقر هنا

الرابط لمستخدمي Mac ولينوكس: انقر هنا

تحميل مكتبة LoRa:

يوجد العديد من المكتبات المتاحة لإرسال واستقبال حزم LoRa من وإلى لوحة ESP32. وفي هذا المثال، سنستخدم مكتبة arduino-LoRa من Sandeep mistry.

اذهب إلى Sketch > Include Library > Manage Libraries في بيئة أردوينو البرمجيّة.

ابحث عن مكتبة LoRa، واخترها كما هو موضّح في الشكل أدناه، وحمّلها.

مكتبة LoRa في Arduino IDE.
مكتبة LoRa في Arduino IDE (مصدر الصورة: موقع randomnerdtutorial)

 

تحضير وحدات إرسال واستقبال LoRa:

لإرسال واستقبال رسائل LoRa من وإلى ESP32، سنستخدم وحدة إرسال/استقبال RFM95، حيث إنّ جميع وحدات LoRa هي وحدات إرسال/استقبال، وسنحتاج اثنتان منها هنا.

لوحة RFM95.
لوحة RFM95(مصدر الصورة: موقع randomnerdtutorial)

بإمكانك استخدام العديد من الوحدات الملائمة، مثل ألواح القاعدة من Semtech SX1276/77/78/79، مثل: RFM96W، وRFM98W، وغيرها.

وبدلاً عن ذلك، هناك ألواح ESP32 مزوّدة بشريحة LoRa مدمجة وشاشة OLED، مثل وحدة ESP32 Heltec Wifi، أو لوح TTGO LoRa32.

اللوحات البديلة Heltec LoRa SX1276 وTTGO LoRa SX1278.
اللوحات البديلة Heltec LoRa SX1276 وTTGO LoRa SX1278(مصدر الصورة: موقع randomnerdtutorial)

قبل البدء، تأكَّد من التردّد الصحيح في منطقتك، كما هو موضّح انقر هنا

فمثلاً، في البرتغال، يمكننا استخدام تردّدات ما بين 863 و870 ميغا هرتز، أو يمكننا استخدام التردّد 433 ميغا هرتز. وفي هذا المشروع، سنستخدم لوح RFM95 الذي يعمل بتردّد 868 ميغا هرتز.

تحضير وحدة مرسل/مستقبل RFM95:

إذا كنت تستخدم لوح تطوير ESP32 مزوّد بشريحة LoRa مدمجة، فبإمكانك تخطّي هذه الخطوة.

إنّ وحدة مرسل/مستقبل RFM95 غير مناسبة للتوصيل على لوح الاختبار، فصفّ الأطراف بقياس 2.54mm لن يناسب أطراف المرسل/مستقبل، والمسافة بين التوصيلات أقصر من المعتاد.

وحدة RFM95.
وحدة RFM95 (مصدر الصورة: موقع randomnerdtutorial)

هناك العديد من الخيارات لتوصيل أطراف المرسل/مستقبل:

  • لحام الأسلاك مباشرة إلى المرسل/مستقبل.
  • كسر الأطراف ولحام كلّ منها بشكل منفصل.
  • شراء لوح خاصّ لوصل الأطراف ببساطة.

في الشكل أدناه، لحمنا رأس بوحدة مرسل/مستقبل.

لحام رأس بوحدة مرسل/مستقبل.
لحام رأس بوحدة مرسل/مستقبل(مصدر الصورة: موقع randomnerdtutorial)

 

في هذه الطريقة، يمكن بسهولة وصل أطراف وحدة مرسل/مستقبل مع أسلاك التوصيل، أو وضع رؤوس لوصلها مباشرة بلوح الاختبار.

توصيل الهوائيّ:

تتطلّب شريحة RFM95 هوائيّ خارجيّ موصول إلى الطرف ANA.

مكان وصل الهوائيّ.
مكان وصل الهوائيّ(مصدر الصورة: موقع randomnerdtutorial)

بإمكانك وصل هوائيّ حقيقيّ، أو إنشاء هوائيّ بنفسك باستخدام سلك توصيل، كما هو موضّح في الشكل التالي. كما أنّ بعض ألواح الوصل تحوي منفذ خاصّ لإضافة هوائيّ ملائم.

تصميم هوائيّ باستخدام سلك.
تصميم هوائيّ باستخدام سلك(مصدر الصورة: موقع randomnerdtutorial)

يعتمد طول السلك على التردّد:

  • 868 ميغا هرتز: 86.3 مم (3.4 إنش).
  • 915 ميغا هرتز: 81.9 مم (3.22 إنش).
  • 433 ميغا هرتز: 173.1 مم (6.8 إنش).

واستخدمنا هنا سلك بقياس 86.3 ملحوم مباشرة بطرف مرسل/مستقبل ANA.

ملاحظة:

عند استخدام هوائيّ مناسب، يتوسّع مجال التغطية، لذلك من المهمّ جدّاً أن تضيف الهوائيّ.

توصيل وحدة مرسل/مستقبل RFM95 LoRa:

توصل وحدة مرسل/مستقبل  RFM95 LoRaبلوح ESP32 باستخدام بروتوكول اتّصال SPI، لذلك سنستخدم أطراف SPI الافتراضيّة في ESP32.

يجب توصيل الأطراف في لوحي ESP32 بما يقابلها في وحدات المرسل/مستقبل، كما هو موضّح في الشكل التالي:

مخطّط توصيل ESP32 مع RFM95 LoRa.
مخطّط توصيل ESP32 مع RFM95 LoRa(مصدر الصورة: موقع randomnerdtutorial)

التوصيلات بين وحدة مرسل/مستقبل RFM95 LoRa وESP32:

ANA: Antenna الهوائيّ

GND: GNDالأرضيّ

DIO3: دون توصيل

DIO4: دون توصيل

3.3V: 3.3V

DIO0: GPIO 2

DIO1: دون توصيل

DIO2: دون توصيل

GND: دون توصيل

DIO5: دون توصيل

RESET: GPIO 14

NSS: GPIO 5

SCK: GPIO 18

MOSI: GPIO 23

MISO: GPIO 19

GND: دون توصيل

ملاحظة:

تحوي وحدة مرسل/مستقبل RFM95 ثلاثة أطراف GND (أرضيّ)، لذلك لا يهمّ أيّ طرف سنستخدم، لكن علينا توصيل أحدها على الأقل.

صمّمنا هذه الدارة هنا على لوح نحاسيّ مثقّب للعناصر الإلكترونيّة، وقابل للحام؛ لتسهيل حملها، ولضمان عدم فصل الأسلاك. ولكن، يمكنك أيضاً وصلها على لوح اختبار.

توصيل الدارة على لوح مثقّب قابل للحام.
توصيل الدارة على لوح مثقّب قابل للحام(مصدر الصورة: موقع randomnerdtutorial)

 

برمجة مرسل LoRa:

انسخ الكود التالي في بيئة أردوينو البرمجيّة.

بُنيَ هذا البرنامج على مثال من مكتبة LoRa، وينقل الرسائل كلّ 10 ثوانٍ باستخدام LoRa، حيث يُرسل كلمة hello متبوعة برقم يزداد في كلّ رسالة.

الكود البرمجي: التحميل من هنا

لنلقِ نظرة على الكود.

نبدأ بتضمين المكتبات المطلوبة:

#include <SPI.h>

#include <LoRa.h>

ثمّ نعرّف الأطراف باستخدام وحدة LoRa. إذا اعتمدت المخطّط السابق في التوصيل، يمكنك استخدام تعريف الأطراف الموجود في الكود. وإذا لم تكن تستخدم لوح ESP32 المزوّد بشريحة LoRa مدمجة، تحقّق من الأطراف المستخدمة في وحدة LoRa في لوحتك، واختر الطرف المناسب.

#define ss 5

#define rst 14

#define dio0 2

أنشئ متغيّر باسم counter يبدأ من الصفر.

int counter = 0;

أنشئ اتّصال متسلسل في تابع setup().

Serial.begin(115200);

while (!Serial);

اضبط الأطراف في وحدة LoRa.

LoRa.setPins(ss, rst, dio0);

نهيّئ وحدة المرسل/مستقبل بتردّد محدّد.

while (!LoRa.begin(866E6)) {

Serial.println(“.”);

delay(500);

}

ربّما سنحتاج إلى تغيير التردّد لمطابقته مع التردّد الموجود في المنطقة. اختر أحد الخيارات التالية:

433E6

866E6

915E6

تستقبل وحدات مرسل/مستقبل LoRa الحزم الموجودة في نطاقها، إذ لا يهمّ من أين تأتي هذه الحزم. ولضمان عدم استقبال حزم من وحدات إرسال مختلفة، بإمكانك ضبط التزامن (ضمن النطاق: من 0 إلى 0xFF).

LoRa.setSyncWord(0xF3);

يحتاج كلّ من المستقبل والمرسل إلى استخدام نفس التزامن، وبذلك يتجاهل المستقبل أيّة حزم LoRa لا تحوي قيمة التزامن تلك.

ثمّ في تابع loop()، نرسل حزم LoRa، فنهيّئ الحزمة باستخدام تعليمة beginPacket().

LoRa.beginPacket();

نكتب بيانات في الحزمة باستخدام تعليمة print(). وكما ترى في السطرين التاليين، سنرسل الرسالة hello متبوعة ب counter.

LoRa.print(“hello “);

LoRa.print(counter);

ثمّ نغلق الحزمة عن طريق endPacket().

LoRa.endPacket();

بعد ذلك، تزداد قيمة المتغيّر counter في كلّ حلقة أيّ كلّ 10 ثوانٍ.

counter++;

delay(10000);

اختبار كود المرسل:

حمّل الكود إلى لوح ESP32، وتحقّق من التحميل على اللوح الصحيح ومنفذ COM المحدّد.

بعد ذلك، افتح شاشة العرض التسلسليّ، واضغط على زرّ تمكين ESP32. يجب أن تظهر رسالة success، كما هو موضّح في الشكل التالي، ويزداد العدّاد counter كلّ 10 ثوانٍ.

التحقّق من نجاح الكود للمرسل.
التحقّق من نجاح الكود للمرسل(مصدر الصورة: موقع randomnerdtutorial)

 

برنامج مستقبل LoRa:

والآن، نحضّر لوح ESP32 آخر، ونحمّل البرنامج التالي (مستقبل LoRa)، حيث يستقبل البرنامج حزم LoRa التي تحوي كلمة التزامن التي حدّدناها، ونظهر محتوى الحزم على شاشة العرض التسلسليّ، إضافة إلى RSSI (مؤشّر قوّة الإشارة المستلمة)، حيث يقيس RSSI القوّة النسبيّة للإشارة المستخدمة.

لتحميل الكود البرمجي من هنا

يتشابه هذا البرنامج مع البرنامج السابق، ويختلف عنه فقط في تابع loop()، وقد تحتاج إلى تغيير التردّد والتزامن لمطابقتها مع قيمة التزامن في برنامج المرسل السابق.

في تابع loop()، يتحقّق الكود من وصول الحزمة الجديدة باستخدام تعليمة parsePacket().

int packetSize = LoRa.parsePacket();

إذا كانت هناك حزمة جديدة، سنقرأ محتواها عندما تكون متاحة.

لقراءة بيانات الدخل، استخدم تعليمة readString().

while (LoRa.available()) {

String LoRaData = LoRa.readString();

Serial.print(LoRaData);

}

تحفظ بيانات الدخل في المتغيّر LoRaData، وتظهر على شاشة العرض التسلسليّ.

في السطرين التاليين للكود، نظهر RSSI للحزمة المستلمة بالديسبل.

Serial.print(“‘ with RSSI “);

Serial.println(LoRa.packetRssi());

اختبار برنامج مستقبل LoRa:

حمّل الكود إلى لوحة ESP32. وفي هذه الحالة، يجب أن يكون لدينا لوحان ESP32 مختلفان ببرنامجين مختلفين عن بعضهما لكلٍّ من المرسل والمستقبل.

افتح شاشة العرض التسلسليّ لمستقبل LoRa، واضغط على زرّ تشغيل مرسلLoRa . وبذلك، يجب أن تصلك حزم على مستقبل LoRa.

التحقّق من نجاح الكود للمستقبل.
التحقّق من نجاح الكود للمستقبل(مصدر الصورة: موقع randomnerdtutorial)

 

وهكذا نكون قد بنينا مرسل ومستقبل LoRa باستخدام ESP32.

اختبار مدى الاتّصال:

الآن، عند اختبار مدى الاتّصال بين المرسل والمستقبل في منطقتك، والذي يتغيّر تبعاً للبيئة الموجود فيها (على سبيل المثال، إذا كنت تعيش في منطقة نائية أو في منطقة مليئة بالأبنية)، نضيف شاشة OLED لمستقبل LoRa، ثمّ نمشي لنرى لأيّ مدى توجد تغطية.

الدارة النهائيّة مع رسالة "hello".
الدارة النهائيّة مع رسالة “hello”(مصدر الصورة: موقع randomnerdtutorial)

 

في هذا المثال، سنرسل فقط رسالة “hello”، لكن يمكن بالطبع استبدالها بنصّ آخر مفيد.

ملخّص:

عرضنا في هذا المقال أساسيّات تقنيّة LoRa، وهي باختصار:

  • LoRa هو تقنيّة اتّصالات تستخدم تقنيّة تعديل راديويّة.
  • تسمح هذه التقنيّة بالاتّصال بعيد المدى لكمّ صغير من البيانات، وتتطلّب استهلاك طاقة أقلّ.
  • يمكن وصل LoRa باستخدام اتّصال نقطة بنقطة، أو شبكة.
  • تكون تقنيّة LoRa مفيدة عند استخدام حسّاس مراقبة غير متّصل بشبكة Wi-Fi، وفي نقل البيانات عبر مسافات أطول.

شرحنا في هذا المقال كيفيّة بناء مرسل ومستقبل LoRa، وهي فقط أمثلة بسيطة للبدء باستخدام هذه التقنيّة التي سنتحدّث عنها في المقالات القادمة.


المصدر هنا

ترجمة: سها اديب ، مراجعة:يارا قاضون، تدقيق لغوي:سلام أحمد، تصميم: علي العلي، تحرير: نور البوشي.