هذه التجربة تشرح استخدام وحدة nrf24l01 للتواصل اللاسلكي بين لوحتي اردوينو. تعد هذه الوحدة ثنائية الاتجاه في عملية التواصل حيث أنها قادرة على إرسال واستقبال البيانات في نفس الوقت.
وحدة nrf24l01 من أكثر وحدات التواصل اللاسلكي استخدامًا وسهولة لقلة استهلاكها للطاقة وبعد مداها في التواصل الذي قد يصل إلى 100 متر بتردد 2.4GHz
لكي نفهم عملية التواصل بشكل أفضل سنقوم بتطبيق مثال بسيط وعمله القيام بإرسال كلمة "Hello World" من المرسل إلى المستقبل.
الأدوات المستخدمة
يمكن شراء الادوات بالضغط على الاداة: 👇🏼
2X وحدة الاتصال اللاسلكي nrf24l01
الجزء النظري
هذه الوحدة يمكنها استخدام 125 قناة للتواصل مما يمكننا للحصول على 125 جهاز اتصال منفصل في نفس المكان.
كل قناة من الـ125 قناة لديها 6 عناوين للتواصل، أو يمكن القول ان كل وحدة يمكنها التواصل مع 6 وحدات أخرى في نفس الوقت.
الطاقة المستهلكة في هذه الوحدة 12mA فقط أثناء عملية التواصل، وهو أقل مما يستهلكه مصباح LED. الجهد التشغيلي لهذه الوحدة من 1.9 الى 3.6 فولت، لكن بقية المنافذ في الوحدة تستخدم 5 فولت الخارج من منافذ الأردوينو.
ثلاثة من منافذ هذه الوحدة تستخدم للتواصل ببروتوكول 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); // عرض النص في المراقب التسلسلي
}
}
المصدر