مشروع التواصل اللاسلكي باستخدام Arduino + Nrf24l01

١٢ نوفمبر ٢٠٢٣
متمكن
مشروع التواصل اللاسلكي باستخدام Arduino + Nrf24l01

هذه التجربة تشرح استخدام وحدة nrf24l01 للتواصل اللاسلكي بين لوحتي اردوينو. تعد هذه الوحدة ثنائية الاتجاه في عملية التواصل حيث أنها قادرة على إرسال واستقبال البيانات في نفس الوقت.

وحدة nrf24l01 من أكثر وحدات التواصل اللاسلكي استخدامًا وسهولة لقلة استهلاكها للطاقة وبعد مداها في التواصل الذي قد يصل إلى 100 متر بتردد 2.4GHz 

لكي نفهم عملية التواصل بشكل أفضل سنقوم بتطبيق مثال بسيط وعمله القيام بإرسال كلمة "Hello World" من المرسل إلى المستقبل.


الأدوات المستخدمة



يمكن شراء الادوات بالضغط على الاداة: 👇🏼


2X اردوينو نانو

2X وحدة الاتصال اللاسلكي nrf24l01

اسلاك توصيل (انثى-انثى)



الجزء النظري




هذه الوحدة يمكنها استخدام 125 قناة للتواصل مما يمكننا للحصول على 125 جهاز اتصال منفصل في نفس المكان. 

كل قناة من الـ125 قناة لديها 6 عناوين للتواصل، أو يمكن القول ان كل وحدة يمكنها التواصل مع 6 وحدات أخرى في نفس الوقت.




الطاقة المستهلكة في هذه الوحدة 12mA فقط أثناء عملية التواصل، وهو أقل مما يستهلكه مصباح LED. الجهد التشغيلي لهذه الوحدة من 1.9 الى 3.6 فولت، لكن بقية المنافذ في الوحدة تستخدم 5 فولت الخارج من منافذ الأردوينو.

NRF24L01 Transceiver Module Pinouts Connections


ثلاثة من منافذ هذه الوحدة تستخدم للتواصل ببروتوكول SPI لذا يجب توصيلهم بمنافذ SPI في الأردوينو مع ملاحظة أن ارقام منافذ SPI تختلف من لوحة لأخرى.

المنفذ CSB و CE يتم توصيلهم مع منفذ رقمي من منافذ الأردوينو واستخدامهم للتحكم في الوحدة بين عملية إرسال المعلومات واستقبالها. المنفذ الأخير لا يستخدم.


خطوات التوصيل

اتبع الصورة التالية لتتمكن من توصيل الدائرة


شرح الكود البرمجي

نحتاج إلى تحميل المكتبة (NRF24.h) ليعمل الكود بدون أخطاء

الكود البرمجي

للمرسل:

/*

* Arduino Wireless Communication Tutorial

*  Example 1 - Transmitter Code

*                

* by Dejan Nedelkovski, www.HowToMechatronics.com

* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/

*/


#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>


RF24 radio(7, 8); // CE, CSN


const byte address[6] = "00001";



//بعد كتابة المكتبة وتحديد منافذ CE و CSN، يتم إنشاء مصفوفة لتمثل العنوان المستخدم للتواصل بين الوحدتين

//يمكن تغيير قيمة العنوان لاي 5 ارقام وهذا يستخدم لتحديد أي مستقبل ننقل له البيانات. في حالتنا، سنستخدم نفس العنوان في المرسل والمستقبل.



void setup() {

  radio.begin();

  radio.openWritingPipe(address);// العنوان المستخدم لعملية التواصل

  radio.setPALevel(RF24_PA_MIN);// تحديد مستوى الطاقة المستخدم في اللوحة

  radio.stopListening();// ضبط الوحدة كمرسل

}


void loop() {

  const char text[] = "Hello World";// تعريف متغير لتخزين النص

  radio.write(&text, sizeof(text));// ارسال المتغير الذي يحتوي على النص

  delay(1000);

}




للمستقبل:


/*

* Arduino Wireless Communication Tutorial

*   Example 1 - Receiver Code

*                

* by Dejan Nedelkovski, www.HowToMechatronics.com

* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/

*/


#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>


RF24 radio(7, 8); // CE, CSN


const byte address[6] = "00001";


void setup() {

  Serial.begin(9600);

  radio.begin();

  radio.openReadingPipe(0, address);

  radio.setPALevel(RF24_PA_MIN);

  radio.startListening();// ضبط الوحدة كمستقبل

}


void loop() {

  if (radio.available()) {

    char text[32] = ""; // تعريف متغير لتخزين النص

    radio.read(&text, sizeof(text)); // قراءة النص من المتغير المستقبل وحفظه في المتغير المعرف 

    Serial.println(text); // عرض النص في المراقب التسلسلي

  }

}


المصدر

مصدر التجربة