- وحدة الترددات اللاسلكية nRF24L01
- مخطط الرسم البياني
- برمجة Raspberry Pi لإرسال رسالة باستخدام nRF24l01
- برمجة Arduino UNO لتلقي الرسائل باستخدام nRF24l01
يستخدم المصممون العديد من أنظمة الاتصالات اللاسلكية مثل Bluetooth Low Energy (BLE 4.0) و Zigbee و ESP8266 Wi-Fi Modules و 433MHz RF و Lora و nRF وما إلى ذلك ، ويعتمد اختيار الوسيط على نوع التطبيق الذي يتم استخدامه فيه. الكل ، أحد الوسائط اللاسلكية الشائعة للاتصال بالشبكة المحلية هو nRF24L01. تعمل هذه الوحدات على 2.4 جيجا هرتز (نطاق ISM) بمعدل باود من 250 كيلو بت في الثانية إلى 2 ميجا بت في الثانية وهو أمر قانوني في العديد من البلدان ويمكن استخدامه في التطبيقات الصناعية والطبية. يُزعم أيضًا أنه باستخدام الهوائيات المناسبة ، يمكن لهذه الوحدات إرسال واستقبال الإشارات حتى مسافة 100 متر بينها. استخدمنا سابقًا nRF24L01 مع Arduino للتحكم في محرك سيرفو وإنشاء غرفة دردشة.
هنا سوف نستخدم وحدة جهاز الإرسال والاستقبال nRF24L01 - 2.4 جيجا هرتز مع Arduino UNO و Raspberry Pi لإنشاء اتصال لاسلكي بينهما. سيعمل Raspberry Pi كجهاز إرسال وسوف يستمع Arduino Uno إلى Raspberry Pi ويطبع الرسالة التي أرسلها Raspberry Pi باستخدام nRF24L01 على شاشة LCD مقاس 16x2 يحتوي nRF24L01 أيضًا على إمكانيات BLE مضمنة ويمكنه أيضًا الاتصال لاسلكيًا باستخدام BLE.
ينقسم البرنامج التعليمي إلى قسمين. سيتضمن القسم الأول واجهة nRF24L01 مع Arduino للعمل كجهاز استقبال ، وسيشمل القسم الثاني واجهة nRF24L01 مع Raspberry Pi للعمل كجهاز إرسال. سيتم إرفاق الكود الكامل لكل من القسمين مع فيديو العمل في نهاية هذا البرنامج التعليمي.
وحدة الترددات اللاسلكية nRF24L01
و حدات NRF24L01 هي جهاز الإرسال والاستقبال وحدات ، وهذا يعني كل وحدة يمكن كلا إرسال واستقبال البيانات ولكن لأنها نصف مزدوج يمكنهم إما إرسال أو استقبال البيانات في وقت واحد. تحتوي الوحدة على nRF24L01 IC العام من أشباه الموصلات الاسكندنافية المسؤولة عن إرسال واستقبال البيانات. يتصل IC باستخدام بروتوكول SPI وبالتالي يمكن توصيله بسهولة بأي متحكمات دقيقة. يصبح الأمر أسهل مع Arduino نظرًا لأن المكتبات متاحة بسهولة. يتم عرض pinouts للوحدة القياسية nRF24L01 أدناه
تتميز الوحدة بجهد تشغيل من 1.9 فولت إلى 3.6 فولت (عادةً 3.3 فولت) وتستهلك تيارًا أقل بكثير من 12 مللي أمبير فقط أثناء التشغيل العادي مما يجعلها فعالة في البطارية وبالتالي يمكن تشغيلها على خلايا العملة. على الرغم من أن جهد التشغيل يبلغ 3.3 فولت ، فإن معظم المسامير تتحمل 5 فولت ، وبالتالي يمكن توصيلها مباشرة بوحدات تحكم دقيقة 5 فولت مثل Arduino. ميزة أخرى لاستخدام هذه الوحدات هي أن كل وحدة بها 6 خطوط أنابيب. بمعنى ، يمكن لكل وحدة التواصل مع 6 وحدات أخرى لنقل البيانات أو استقبالها. هذا يجعل الوحدة مناسبة لإنشاء شبكات نجمية أو متداخلة في تطبيقات إنترنت الأشياء. كما أن لديهم نطاقًا واسعًا من العناوين يبلغ 125 معرّفًا فريدًا ، وبالتالي في منطقة مغلقة يمكننا استخدام 125 من هذه الوحدات دون التدخل مع بعضها البعض.
مخطط الرسم البياني
nRF24L01 مع اردوينو:
مخطط الدائرة لتوصيل nRF24L01 مع Arduino سهل ولا يحتوي على الكثير من المكونات. و سيتم ربط NRF24L01 من قبل واجهة SPI وربطه على LCD 16X2 مع بروتوكول I2C الذي يستخدم سوى اثنين من الأسلاك.
nRF24L01 مع Raspberry Pi:
مخطط الدائرة لتوصيل nRF24L01 بـ Raspberry Pi هو أيضًا بسيط جدًا ويتم استخدام واجهة SPI فقط لتوصيل Raspberry Pi و nRF24l01.
برمجة Raspberry Pi لإرسال رسالة باستخدام nRF24l01
ستتم برمجة Raspberry Pi باستخدام Python3. يمكنك أيضًا استخدام C / C ++ مثل Arduino. ولكن توجد بالفعل مكتبة متاحة لـ nRF24l01 في بيثون والتي يمكن تنزيلها من صفحة جيثب. لاحظ أن برنامج python والمكتبة يجب أن يكونا في نفس المجلد وإلا فلن يتمكن برنامج python من العثور على المكتبة. بعد تنزيل المكتبة ، ما عليك سوى استخراج وإنشاء مجلد حيث سيتم تخزين جميع البرامج وملفات المكتبة. عند الانتهاء من تثبيت المكتبة ، فقط ابدأ في كتابة البرنامج. يبدأ البرنامج بإدراج المكتبات التي سيتم استخدامها في كود مثل مكتبة استيراد GPIO للوصول إلى Raspberry Pi GPIOs ووقت الاستيراد للوصول إلى الوظائف المتعلقة بالوقت. إذا كنت جديدًا على Raspberry Pi ، فارجع إلى البدء مع Raspberry Pi.
استيراد RPi.GPIO كما GPIO الوقت استيراد spidev استيراد من lib_nrf24 NRF24 استيراد
اضبط وضع GPIO في " قناة Broadcom SOC". هذا يعني أنك تشير إلى المسامير برقم "قناة Broadcom SOC" ، هذه هي الأرقام بعد "GPIO" (على سبيل المثال ، GPIO01 ، GPIO02…). هذه ليست أرقام المجلس.
GPIO.setmode (GPIO.BCM)
بعد ذلك سنقوم بإعداد عنوان الأنبوب. هذا العنوان مهم للتواصل مع مستقبل Arduino. سيكون العنوان في الكود السداسي.
الأنابيب = ،]
ابدأ الراديو باستخدام GPIO08 كـ CE و GPIO25 كدبابيس CSN.
radio.begin (0، 25)
قم بتعيين حجم الحمولة على 32 بت ، وعنوان القناة 76 ، ومعدل البيانات 1 ميغابت في الثانية ومستويات الطاقة كحد أدنى.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
افتح الأنابيب لبدء كتابة البيانات وطباعة التفاصيل الأساسية لـ nRF24l01.
radio.openWritingPipe (مواسير) radio.printDetails ()
تحضير رسالة في شكل سلسلة. سيتم إرسال هذه الرسالة إلى Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") بينما len (sendMessage) <32: sendMessage.append (0)
ابدأ الكتابة إلى الراديو واستمر في كتابة السلسلة الكاملة حتى يصبح الراديو متاحًا. إلى جانب ذلك ، قم بتدوين الوقت وطباعة بيان تصحيح تسليم الرسالة.
بينما صحيح: start = time.time () radio.write (sendMessage) print (" Send the message: {}". format (sendMessage)) send radio.startListening ()
إذا اكتملت السلسلة وتم إغلاق الأنبوب ، فقم بطباعة رسالة تصحيح انتهاء المهلة.
في حين لا radio.available (0): time.sleep (1/100) إذا time.time () - بداية> 2: طباعة ("انقضت بها.") رسالة خطأ # طباعة إذا الراديو قطع أو لا تعمل بعد الآن كسر
توقف عن الاستماع إلى الراديو وأغلق الاتصال وأعد تشغيل الاتصال بعد 3 ثوانٍ لإرسال رسالة أخرى.
radio.stopListening () # close radio time.sleep (3) # إعطاء تأخير لمدة 3 ثوان
برنامج Raspberry سهل الفهم إذا كنت تعرف أساسيات بيثون. يتم تقديم برنامج Python الكامل في نهاية البرنامج التعليمي.
تنفيذ برنامج بايثون في Raspberry Pi:
تنفيذ البرنامج سهل للغاية بعد اتباع الخطوات التالية:
- احفظ ملفات برنامج Python وملفات المكتبة في نفس المجلد.
- اسم ملف البرنامج الخاص بي لـ Sender هو nrfsend.py وأيضًا كل الملفات موجودة في نفس المجلد
- اذهب إلى محطة الأوامر في Raspberry Pi. وحدد موقع ملف برنامج python باستخدام الأمر “cd”.
- ثم افتح المجلد واكتب الأمر " sudo python3 your_program.py " واضغط على Enter. ستتمكن من رؤية التفاصيل الأساسية لـ nRf24 وسيبدأ الراديو في إرسال الرسائل بعد كل 3 ثوانٍ. سيتم عرض رسالة التصحيح بعد الانتهاء من إرسال جميع الأحرف.
الآن سنرى نفس البرنامج مثل المتلقي في Arduino UNO.
برمجة Arduino UNO لتلقي الرسائل باستخدام nRF24l01
تشبه برمجة Arduino UNO برمجة Raspberry Pi. سنتبع طرقًا مماثلة ولكن بلغة وخطوات برمجة مختلفة. ستتضمن الخطوات جزء القراءة من nRF24l01. يمكن تنزيل مكتبة nRF24l01 لـ Arduino من صفحة جيثب. ابدأ بتضمين المكتبات الضرورية. نحن نستخدم شاشة LCD مقاس 16 × 2 باستخدام I2C Shield ، لذا قم بتضمين مكتبة Wire.h وأيضًا تم توصيل nRF24l01 مع SPI لذا قم بتضمين مكتبة SPI.
#تضمن
قم بتضمين مكتبة RF24 و LCD للوصول إلى وظائف RF24 و LCD.
#تضمن
عنوان LCD لـ I2C هو 27 وهو شاشة 16x2 LCD ، لذا اكتب هذا في الوظيفة.
LiquidCrystal_I2C lcd (0x27، 16، 2) ؛
يتم توصيل RF24 بدبابيس SPI قياسية جنبًا إلى جنب مع CE في الطرف 9 و CSN في الطرف 10.
راديو RF24 (9 ، 10) ؛
ابدأ الراديو واضبط مستوى الطاقة وقم بتعيين القناة على 76. قم أيضًا بتعيين عنوان الأنبوب مثل Raspberry Pi وافتح الأنبوب للقراءة.
radio.begin () ، radio.setPALevel (RF24_PA_MAX) ، radio.setChannel (0x76) ؛ أنبوب uint64_t = 0xE0E0F1F1E0LL ؛ radio.openReadingPipe (1 ، أنبوب) ؛
ابدأ اتصال I2C وقم بتهيئة شاشة LCD.
Wire.begin () ؛ lcd.begin () ، lcd.home () ، lcd.print ("جاهز للاستلام") ؛
ابدأ في الاستماع إلى الراديو للرسائل الواردة واضبط طول الرسالة على 32 بايت.
radio.startListening () ، تم استلام حرف الرسالة = {0}
إذا تم توصيل الراديو ، فابدأ في قراءة الرسالة وحفظها. اطبع الرسالة إلى جهاز العرض التسلسلي واطبع أيضًا على الشاشة حتى تصل الرسالة التالية. أوقف الراديو للاستماع ثم أعد المحاولة بعد فترة. ها هي 10 ثوانٍ دقيقة.
if (radio.available ()) { radio.read (ReceivedMessage، sizeof (ReceivedMessage)) ؛ Serial.println (ReceivedMessage) ؛ Serial.println ("إيقاف تشغيل الراديو") ؛ radio.stopListening () ، String stringMessage (ReceivedMessage) ؛ lcd.clear () ؛ تأخير (1000) ؛ lcd.print (stringMessage) ؛ }
قم بتحميل الكود الكامل المعطى في النهاية إلى Arduino UNO وانتظر حتى يتم استلام الرسالة.
هذا ينهي البرنامج التعليمي الكامل حول إرسال رسالة باستخدام Raspberry Pi & nRf24l01 واستلامها باستخدام Arduino UNO & nRF24l01. ستتم طباعة الرسالة على شاشة LCD مقاس 16 × 2. تعتبر عناوين الأنابيب مهمة جدًا في كل من Arduino UNO و Raspberry Pi. إذا واجهت أي صعوبة أثناء القيام بهذا المشروع ، فيرجى التعليق أدناه أو التواصل مع المنتدى لمزيد من المناقشة التفصيلية.
تحقق أيضًا من الفيديو التوضيحي أدناه.