- المواد المطلوبة
- ربط Raspberry Pi مع LoRa
- توصيل Arduino بـ LoRa
- pyLoRa لـ Raspberry Pi
- تكوين Raspberry Pi لوحدة LoRa
- برمجة Raspberry Pi لـ LoRa
- كود Arduino لـ LoRa للتواصل مع Raspberry Pi
- اختبار اتصال LoRa بين Raspberry Pi و Arduino
تزداد شعبية LoRa مع ظهور IoT و Connected Cars و M2M و Industry 4.0 وما إلى ذلك نظرًا لقدرتها على الاتصال لمسافات طويلة بقوة أقل ، يفضل استخدامها من قبل المصممين لإرسال / استقبال البيانات من شيء يعمل بالبطارية. لقد ناقشنا بالفعل أساسيات LoRa وكيفية استخدام LoRa مع Arduino. على الرغم من أن التكنولوجيا مخصصة في الأصل لعقد LoRa للاتصال ببوابة LoRa ، إلا أن هناك العديد من السيناريوهات التي يتعين على عقدة LoRa فيها الاتصال بعقدة LoRa أخرى لتبادل المعلومات عبر مسافة طويلة. لذلك ، في هذا البرنامج التعليمي سوف نتعلم كيفية استخدام وحدة LoRa SX1278 مع Raspberry piللتواصل مع SX1278 آخر متصل بمتحكم دقيق مثل Arduino. يمكن أن تكون هذه الطريقة مفيدة في العديد من الأماكن حيث يمكن أن يعمل Arduino كخادم لجلب البيانات من المستشعرات وإرسالها إلى Pi عبر مسافة طويلة عبر LoRa ثم يمكن لـ Pi الذي يعمل كعميل تلقي هذه المعلومات وتحميلها إلى يمكن لأنه يمكنه الوصول إلى الإنترنت. تبدو مثيرة للاهتمام ، أليس كذلك؟ اذا هيا بنا نبدأ.
المواد المطلوبة
- SX1278 433 ميجا هرتز وحدة LoRa - عدد 2
- 433 ميجاهرتز LoRa هوائي - 2Nos
- Arduino UNO- أو إصدار آخر
- Raspberry Pi 3
من المفترض أن Raspberry Pi الخاص بك يومض بالفعل بنظام تشغيل ويمكنه الاتصال بالإنترنت. إذا لم يكن كذلك ، فاتبع البرنامج التعليمي Getting started with Raspberry Pi قبل المتابعة. نحن هنا نستخدم Raspberry Jessie المثبت Raspberry Pi 3.
تحذير: استخدم دائمًا وحدة SX1278 LoRa مع هوائيات 433 ميجا هرتز ؛ وإلا فقد تتلف الوحدة.
ربط Raspberry Pi مع LoRa
قبل أن ندخل في حزم البرامج ، دعنا نجهز الأجهزة. و SX1278 هو 16 دبوس وحدة ورا الذي يتصل باستخدام SPI على 3.3V المنطق. يعمل Raspberry pi أيضًا على مستوى منطق 3.3 فولت ويحتوي أيضًا على منفذ SPI مدمج ومنظم 3.3 فولت. حتى نتمكن من توصيل وحدة LoRa مباشرةً بـ Raspberry Pi. يتم عرض جدول الاتصال أدناهفطيرة التوت | وحدة لورا - SX1278 |
3.3 فولت | 3.3 فولت |
أرض | أرض |
GPIO 10 | MOSI |
GPIO 9 | ميسو |
GPIO 11 | SCK |
GPIO 8 | Nss / تمكين |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
يمكنك أيضًا استخدام مخطط الدائرة أدناه كمرجع. لاحظ أنه تم إنشاء مخطط الدائرة باستخدام وحدة RFM9x التي تشبه إلى حد بعيد الوحدة النمطية SX1278 ، وبالتالي قد يختلف المظهر في الصورة أدناه.
الاتصالات مباشرة إلى الأمام ، والمشكلة الوحيدة التي قد تواجهها هي أن SX1278 ليس متوافقًا مع اللوح ، وبالتالي يتعين عليك استخدام أسلاك التوصيل مباشرة لإجراء الاتصالات أو استخدام لوحين صغيرين كما هو موضح أدناه. يقترح عدد قليل من الأشخاص أيضًا تشغيل وحدة LoRa بسكة طاقة منفصلة 3.3 فولت حيث قد لا يتمكن Pi من توفير تيار كافٍ. ومع ذلك ، يجب أن تعمل Lora كونها وحدة منخفضة الطاقة على سكة 3.3V لـ Pi ، لقد اختبرت نفس الشيء ووجدت أنها تعمل دون أي مشكلة. لكن ، خذها مع قليل من الملح. يبدو إعداد الاتصال الخاص بي لـ LoRa مع Raspberry Pi شيئًا كهذا أدناه
توصيل Arduino بـ LoRa
يظل اتصال وحدة Arduino هو نفسه الذي استخدمناه في برنامجنا التعليمي السابق. سيكون الاختلاف الوحيد هو بدلاً من استخدام المكتبة من Sandeep Mistry ، سنستخدم مكتبة Rspreal بناءً على رأس الراديو الذي سنناقشه لاحقًا في هذا المشروع. الدائرة تعطى أدناه
مرة أخرى ، يمكنك استخدام دبوس 3.3 فولت على Arduino Uno أو استخدام منظم 3.3V منفصل. في هذا المشروع ، استخدمت منظم الجهد على متن الطائرة. يوجد جدول توصيل الدبوس أدناه لمساعدتك في إجراء التوصيلات بسهولة.
وحدة LoRa SX1278 | مجلس اردوينو UNO |
3.3 فولت | 3.3 فولت |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | د 2 |
SCK | D13 |
ميسو | D12 |
MOSI | D11 |
RST | D9 |
نظرًا لأن الوحدة لا تتناسب مع لوحة التجارب ، فقد استخدمت أسلاك التوصيل مباشرة لإجراء التوصيلات. بمجرد إجراء الاتصال ، سيبدو إعداد Arduino LoRa كما يلي
pyLoRa لـ Raspberry Pi
هناك العديد من حزم python التي يمكنك استخدامها مع LoRa. من الشائع أيضًا استخدام Raspberry Pi باعتباره LoRaWAN للحصول على بيانات من عقد LoRa متعددة. ولكن ، في هذا المشروع ، هدفنا هو إجراء اتصال نظير إلى نظير بين وحدتي Raspberry Pi أو بين Raspberry Pi و Arduino. لذلك ، قررت استخدام حزمة pyLoRa. يحتوي على وحدات rpsreal LoRa Arduino و rpsreal LoRa Raspberry pi التي يمكن استخدامها في بيئة Arduino و Raspberry Pi. في الوقت الحالي ، دعنا نركز على بيئة Raspberry Pi.
تكوين Raspberry Pi لوحدة LoRa
كما قيل سابقًا ، تعمل وحدة LoRa مع اتصال SPI ، لذلك يتعين علينا تمكين SPI على Pi ثم تثبيت حزمة pylora . اتبع الخطوات أدناه لفعل الشيء نفسه ، بعد فتح النافذة الطرفية لـ Pi. مرة أخرى ، أنا أستخدم المعجون للاتصال بـ Pi الخاص بي ، يمكنك استخدام طريقتك المريحة.
الخطوة 1: ادخل إلى نافذة التكوين باستخدام الأمر التالي. للحصول على النافذة أدناه
sudo raspi-config
الخطوة 2: انتقل إلى خيارات الواجهة وقم بتمكين SPI كما هو موضح في الصورة أدناه. يتعين علينا تمكين واجهة SPI لأننا كما ناقشنا اتصال LCD و PI من خلال بروتوكول SPI
الخطوة 3: احفظ التغييرات وارجع إلى نافذة الجهاز. تأكد من تحديث pip و python ثم قم بتثبيت حزمة RPi.GPIO باستخدام الأمر التالي.
نقطة تثبيت RPi.GPIO
ستساعدنا فئة الحزمة هذه في التحكم في دبوس GPIO الموجود على Pi. إذا تم التثبيت بنجاح ، ستبدو شاشتك هكذا
الخطوة 4: استمر بالمثل في تثبيت حزمة spidev باستخدام الأمر التالي. Spidev هو رابط Python لنظام Linux والذي يمكن استخدامه لإجراء اتصال SPI على Raspberry Pi.
نقطة تثبيت spidev
إذا كان التثبيت ناجحًا ، يجب أن يبدو الجهاز كما يلي.
الخطوة 5: بعد ذلك ، يتيح تثبيت حزمة pyLoRa باستخدام الأمر pip التالي. تقوم هذه الحزمة بتثبيت نماذج الراديو المرتبطة بـ LoRa.
نقطة تثبيت pyLoRa
في حالة نجاح التثبيت ، سترى الشاشة التالية.
تدعم حزمة PyLoRa أيضًا الاتصالات المشفرة التي يمكن استخدامها مع Arduino و Raspberry Pi بسلاسة. سيؤدي ذلك إلى تحسين أمان البيانات في اتصالك. لكن عليك تثبيت حزمة منفصلة بعد هذه الخطوة التي لا أقوم بها لأن التشفير ليس في نطاق هذا البرنامج التعليمي. يمكنك متابعة روابط جيثب أعلاه لمزيد من التفاصيل.
بعد هذه الخطوة ، يمكنك إضافة معلومات مسار الحزمة إلى pi ومحاولة استخدام برنامج python المقدم في النهاية. لكنني لم أتمكن من إضافة المسار بنجاح ، وبالتالي اضطررت إلى تنزيل المكتبة يدويًا واستخدامه مباشرة لبرامجي. لذلك كان علي المضي قدمًا في الخطوات التالية
الخطوة 6: قم بتنزيل وتثبيت حزمة python-rpi.gpio وحزمة spidev باستخدام الأمر أدناه.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
يجب أن تعرض نافذة المحطة الطرفية شيئًا كهذا بعد التثبيتين.
الخطوة 7: قم أيضًا بتثبيت git ثم استخدامه لاستنساخ دليل python لـ Raspberry Pi الخاص بنا. يمكنك القيام بذلك باستخدام الأوامر التالية.
sudo apt-get install git sudo git clone
بمجرد اكتمال هذه الخطوة ، يجب أن تجد الدليل الفرعي SX127x في المجلد الرئيسي Raspberry Pi. سيحتوي هذا على جميع الملفات المطلوبة المرتبطة بالمكتبة.
برمجة Raspberry Pi لـ LoRa
في اتصال نظير إلى نظير LoRa ، تسمى الوحدة التي تنقل المعلومات خادمًا ، وتسمى الوحدة النمطية التي تتلقى المعلومات اسم العميل. في معظم الحالات ، سيتم استخدام Arduino في الحقل مع جهاز استشعار لقياس البيانات وسيتم استخدام Pi لتلقي هذه البيانات. لذلك ، قررت استخدام Raspberry Pi كعميل و Arduino كخادم في هذا البرنامج التعليمي. و يمكن الاطلاع على برنامج العميل التوت بي الكامل في الجزء السفلي من هذه الصفحة. سأحاول هنا شرح الخطوط المهمة في البرنامج.
تنبيه: تأكد من أن ملف البرنامج موجود في نفس الدليل حيث يوجد مجلد مكتبة SX127x. يمكنك نسخ هذا المجلد واستخدامه في أي مكان إذا كنت ترغب في نقل المشروع.
البرنامج بسيط جدًا ، يتعين علينا ضبط وحدة LoRa للعمل في 433 ميجا هرتز ثم الاستماع إلى الحزم الواردة. إذا تلقينا أي شيء ، فإننا نطبعه ببساطة على وحدة التحكم. كما هو الحال دائمًا نبدأ البرنامج عن طريق استيراد مكتبات Python المطلوبة.
من وقت استيراد السكون من SX127x.LoRa استيراد * من SX127x.board_config استيراد BOARD BOARD.setup ()
في هذه الحالة ، يتم استخدام حزمة الوقت لإنشاء تأخيرات ، يتم استخدام حزمة Lora لاتصال LoRa ويتم استخدام board_config لتعيين معلمات اللوحة و LoRa. نقوم أيضًا بإعداد اللوحة باستخدام وظيفة BOARD.setup () .
بعد ذلك ، أنشأنا فئة python LoRa بثلاثة تعريفات. نظرًا لأننا نضع مسافة بادئة فقط لجعل البرنامج يعمل كعميل raspberry ، فإن الفصل لديه ثلاث وظائف فقط وهي فئة init و start class و on_rx_done class. تقوم فئة init بتهيئة وحدة LoRa في 433 ميجاهرتز مع عرض نطاق 125 كيلو هرتز كما هو محدد في طريقة set_pa_config . ثم يضع الوحدة أيضًا في وضع السكون لتوفير استهلاك الطاقة.
# القيم الافتراضية للمدى المتوسط بعد التهيئة هي 434.0 ميجا هرتز ، Bw = 125 كيلو هرتز ، Cr = 4/5 ، Sf = 128 شريحة / رمز ، CRC على 13 ديسيبل lora.set_pa_config (pa_select = 1) def __init __ (self ، verbose = False): super (LoRaRcvCont، self).__ init __ (مطوّل) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
وظيفة البداية هي المكان الذي نقوم فيه بتكوين الوحدة كمستقبل والحصول على مثل RSSI (مؤشر قوة إشارة الاستقبال) ، والحالة ، وتردد التشغيل ، إلخ. قمنا بتعيين الوحدة النمطية للعمل في وضع المتلقي المستمر (RXCONT) من وضع السكون ثم استخدمنا حلقة while لقراءة قيم مثل RSSI وحالة المودم. نقوم أيضًا بمسح البيانات الموجودة في المخزن المؤقت التسلسلي على الجهاز.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) بينما True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
أخيرًا ، يتم تنفيذ وظيفة on_rx_done بعد قراءة الحزمة الواردة. في هذه الوظيفة ، يتم نقل القيم المستلمة إلى متغير يسمى الحمولة من المخزن المؤقت Rx بعد تعيين علامة الاستلام عالية. ثم يتم فك تشفير القيم المستلمة باستخدام utf-8 لطباعة بيانات يمكن للمستخدم قراءتها على الغلاف. نقوم أيضًا بإعادة الوحدة إلى وضع السكون حتى يتم استلام قيمة أخرى.
def on_rx_done (self): print ("\ n تم الاستلام:") self.clear_irq_flags (RxDone = 1) الحمولة = self.read_payload (nocheck = True) print (bytes (payload).decode ("utf-8"، "ignore"))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
الجزء المتبقي من البرنامج هو فقط طباعة القيم المستلمة على وحدة التحكم وإنهاء البرنامج باستخدام مقاطعة لوحة المفاتيح. قمنا مرة أخرى بتعيين اللوحة في وضع السكون حتى بعد إنهاء البرنامج لتوفير الطاقة.
جرب: lora.start () باستثناء KeyboardInterrupt: sys.stdout.flush () طباعة ("") sys.stderr.write ("KeyboardInterrupt \ n") أخيرًا: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
كود Arduino لـ LoRa للتواصل مع Raspberry Pi
كما ذكرت سابقًا ، يدعم كود rpsreal كلاً من Arduino و Pi وبالتالي فإن الاتصال بين Arduino و Pi ممكن. إنه يعمل على أساس مكتبة Radiohead من AirSpayce. لذلك عليك تثبيت مكتبة رأس الراديو أولاً على Arduino IDE.
للقيام بذلك ، قم بزيارة صفحة Github وتنزيل المكتبة في مجلد ZIP. ثم ضعه في مجلد مكتبة Arduino IDE الخاص بك. الآن ، أعد تشغيل Arduino IDE وستجد أمثلة لمكتبة Radio head. سنقوم هنا ببرمجة Arduino للعمل كخادم LoRa لإرسال حزم اختبار مثل 0 إلى 9. يمكن العثور على الكود الكامل للقيام بالشيء نفسه في أسفل هذه الصفحة كما هو الحال دائمًا. هنا ، سأشرح بعض الأسطر المهمة في البرنامج.
نبدأ البرنامج عن طريق استيراد مكتبة SPI (مثبتة افتراضيًا) لاستخدام بروتوكول SPI ثم مكتبة RH_RF95 من Radio head لإجراء اتصال LoRa. ثم نحدد أي دبوس من Arduino قمنا بتوصيل دبوس Chip select (CS) وإعادة الضبط (RST) والمقاطعة (INT) في LoRa مع Arduino. أخيرًا ، حددنا أيضًا أن الوحدة يجب أن تعمل بتردد 434 ميجا هرتز وتهيئة وحدة LoRa.
#تضمن
داخل وظيفة الإعداد ، سنقوم بإعادة ضبط وحدة LoRa عن طريق سحب دبوس إعادة الضبط إلى مستوى منخفض لمدة 10 مللي ثانية لبدء التشغيل من جديد. ثم نقوم بتهيئته باستخدام الوحدة التي أنشأناها مسبقًا باستخدام مكتبة رأس الراديو. بعد ذلك ، نقوم بتعيين التردد وقوة الإرسال لخادم LoRa. كلما زادت المسافة التي ستقطعها الحزم ، كلما زادت المسافة التي تقطعها الحزم ولكنها ستستهلك المزيد من الطاقة.
إعداد باطل () { // Initialize Serial Monitor Serial.begin (9600)؛ // إعادة تعيين وحدة لورا pinMode (RFM95_RST ، الإخراج) ؛ digitalWrite (RFM95_RST ، منخفض) ؛ تأخير (10) ؛ digitalWrite (RFM95_RST ، عالية) ؛ تأخير (10) ؛ // تهيئة وحدة LoRa أثناء (! rf95.init ()) { Serial.println ("فشل LoRa radio init") ؛ بينما (1) ؛ } // تعيين التردد الافتراضي 434.0 ميجا هرتز إذا (! rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency فشل") ؛ بينما (1) ؛ } rf95.setTxPower (18) ، // قوة الإرسال لوحدة لورا }
داخل وظيفة الحلقة اللانهائية ، علينا ببساطة إرسال حزمة البيانات من خلال وحدة LoRa. يمكن أن تكون هذه البيانات أي شيء مثل قيمة الاستشعار لأمر المستخدم. ولكن للتبسيط سنرسل قيمة char من 0 إلى 9 لكل فاصل زمني مدته ثانية ثم نعيد القيمة إلى 0 بعد الوصول إلى 9. لاحظ أنه لا يمكن إرسال القيم إلا في تنسيق مصفوفة char وأن نوع البيانات يجب أن يكون unit8_t ذلك 1 بايت في المرة الواحدة. يظهر رمز القيام بالشيء نفسه أدناه
حلقة باطلة () { Serial.print ("Send:") ؛ char radiopacket = char (value)} ؛ rf95.send ((uint8_t *) radiopacket ، 1) ؛ تأخير (1000) ؛ القيمة ++ ؛ إذا (القيمة> '9') القيمة = 48 ؛ }
اختبار اتصال LoRa بين Raspberry Pi و Arduino
الآن ، بعد أن أصبح كل من أجهزتنا وبرنامجنا جاهزين ، يتعين علينا ببساطة تحميل كود Arduino على لوحة UNO ويجب إطلاق رسم Python على pi. يبدو إعداد الاختبار الخاص بي مع كل من الأجهزة المتصلة ، مثل هذا أدناه
بمجرد تشغيل رسم عميل Python على Pi (استخدم python 3 فقط) ، إذا كان كل شيء يعمل بشكل صحيح ، يجب أن ترى حزم Arduino المستلمة في pi من خلال نافذة shell. يجب أن تلاحظ "تم الاستلام: 0" إلى 9 كما هو موضح في الصورة أدناه.
يمكن تنزيل كود Raspberry Pi الكامل مع جميع المكتبات المطلوبة من هنا.
يمكنك الآن نقل خادم Arduino والتحقق من نطاق الوحدة ؛ من الممكن أيضًا عرض قيمة RSSI على shell إذا لزم الأمر. و يمكن الاطلاع على استكمال العمل في المشروع في الفيديو مرتبطة أدناه. الآن ، بعد أن عرفنا كيفية إنشاء اتصال LoRa منخفض الطاقة لمسافات طويلة بين Arduino و Raspberry pi ، يمكننا المضي قدمًا في إضافة مستشعر على جانب Arduino ومنصة سحابية على جانب Pi لإنشاء حزمة IoT كاملة.
أتمنى أن تكون قد فهمت المشروع واستمتعت ببنائه. إذا كانت لديك مشكلة في تشغيله ، فاستخدم قسم التعليقات أدناه أو المنتديات للاستفسارات الفنية الأخرى.