پروژه الکترونیکپروژه های آردوینوپروژه های پایتونپروژه های رزبری پای

آموزش ارتباط رادیویی آردوینو و رزبری پای با nRF24L01

مهندسین برای برقراری ارتباط بین دو مجموعه از روش های مختلفی بنا بر نیاز استفاده میکنند. مثلا ارتباطات سیمی و سریالی برای مواردی که محدودیتی در زمینه اتصال وجود ندارد، بلوتوث برای فواصل نزدیک، ارتباط وایفای برای مسافت کمی بیشتر و ارتباط رادیویی برای مسافت بیشتر استفاده میشود.  در این میان ارتباط رادیویی از گذشته تا به امروز بسیار محبوب است. ما در این پروژه از ماژول رادیویی nRF24L01 استفاده میکنیم که با استفاده از فرکانس 2.4 مگاهرتز و با سرعت 250 کیلوبایت تا 2 مگابایت بر ثانیه کار میکند. در صورت استفاده از آنتن مناسب میتوانید سیگنال ها را تا فاصله 100 متری رد و بدل کنید. ما در این پروژه از رزبری پای اطلاعات را به سمت آردوینو میفرستیم.

اتصال Raspberry pi و Arduino با ماژول رادیویی

آموزش به دو بخش تقسیم می شود. بخش اول شامل ارتباط nRF24L01 با Arduino برای عمل کردن به عنوان گیرنده خواهد بود و بخش دوم شامل اربتاط nRF24L01 با Raspberry Pi است تا به عنوان فرستنده عمل کند. کد کامل و فیلم عملکرد در انتهای صفحه قرار داده شده است.

همچنین ما قبلا روش های دیگری را برای ارتباط رزبری پای با آردوینو قرار داده ایم :

ماژول رادیویی nRF24L01 چیست؟

بررسی قابلیت BLE ماژول رادیویی nRF24L01
بررسی قابلیت BLE ماژول رادیویی nRF24L01

BLE از باند ISM 2.4 گیگاهرتز با نرخ baud از 250Kbps تا 2Mbps استفاده می کند که در بسیاری از کشورها مجاز است و می تواند در کاربردهای صنعتی و پزشکی کاربرد داشته باشد. باند از 2400 مگاهرتز تا 2483.5 مگاهرتز شروع می شود و به 40 کانال تقسیم می شود. سه مورد از این کانال ها به عنوان “Advertising” شناخته شده اند و توسط دستگاه ها برای ارسال آیتم های تبلیغاتی به سایر دستگاه های BLE باستفاده میشوند.

ماژول های nRF24L01 ماژول های فرستنده گیرنده هستند ، به این معنی که هر ماژول می تواند داده را ارسال و دریافت کند. یعنی می توانند داده ها را بطور همزمان ارسال یا دریافت کنند. این ماژول با استفاده از پروتکل SPI ارتباط برقرار می کند و از این رو می توان به راحتی با هر میکروکنترلر آن را ارتباط داد.

دیتاشیت پین های ماژول nRF24L01
دیتاشیت پین های ماژول nRF24L01

ماژول nRF24L01  دارای ولتاژ کاری از 1.9 ولت تا 3.6 ولت است (به طور معمول 3.3 ولت) و در جریان کار عادی آن تنها 12 میلی آمپر است و از این رو می تواند با باتری های سکه ای نیز کار کند. گرچه ولتاژ کار 3.3 ولت است اما بیشتر پین ها 5 ولت تحمل دارند و از این رو می توانند به طور مستقیم با میکروکنترلرهای 5 ولت مانند آردوینو در ارتباط باشند. مزیت دیگر استفاده از این ماژول این است که ، هر ماژول دارای 6 کانال است. یعنی هر ماژول می تواند با 6 ماژول دیگر برای ارسال یا دریافت داده ارتباط برقرار کند.

مدار اتصال Raspberry pi و Arduino با ماژول رادیویی

مدار این پروژه را به دو قسمت تقسیم میکنیم. یک قسمت برای آردوینو و یک قسمت برای رزبری پای.

اتصال nRF24L01 به آردوینو

اتصال nRF24L01 به آردوینو

شماتیک مدار برای اتصال nRF24L01 به آردوینو آسان است و اجزای زیادی ندارد. nRF24l01 توسط رابط SPI متصل خواهد شد و ال سی دی 16×2 با پروتکل I2C که فقط از دو سیم استفاده می کند متصل میشود. تصویر زیر مدار را پس از اتصال نمایش میدهد.

اگر میخواهید آردوینو را به صورت اصولی و پروژه محور (برنامه نویسی حرفه ای، ارتباط آردوینو با اندروید، ساخت ربات با آردوینو) یاد بگیرید، روی دوره آموزش آردوینو کلیک کنید.

مدار اتصال Arduino با ماژول رادیویی

اتصال nRF24L01 به رزبری پای

اتصال nRF24L01 به رزبری پای

شماتیک مدار برای اتصال nRF24L01 به Raspberry Pi نیز بسیار ساده است و فقط از رابط SPI برای اتصال Raspberry Pi و nRF24l01 استفاده می شود. تصویر زیر مدار را پس از اتصال قطعات نشان میدهد.

مدار اتصال Raspberry pi با ماژول رادیویی

برنامه نویسی رزبری پای برای ارسال پیام رادیویی

برنامه نویسی Raspberry Pi با استفاده از Python3 انجام می شود. همچنین می توانید از C / C ++ استفاده کنید. در حال حاضر یک کتابخانه برای nRF24l01 در python موجود است که میتوانید آن را در فایل دانلودی انتهای صفحه پیدا کنید. توجه داشته باشید که برنامه پایتون و کتابخانه باید در یک پوشه قرار داشته باشند. پس از بارگیری كتابخانه ، فقط پوشه را استخراج كنید و پوشه ای تهیه كنید كه تمام برنامه ها و فایلهای كتابخانه ای در آن ذخیره شوند. هنگامی که نصب کتابخانه انجام شد ، نوشتن برنامه را شروع کنید. این برنامه با گنجاندن كتابخانه هایی مانند كتابخانه GPIO برای دسترسی به Raspberry Pi GPIO و time برای دسترسی به توابع مربوط به زمان استفاده می شود ، آغاز می شود. اگر در زمینه رزبری پای تازه وارد هستید، آموزش های رزبری پای را بخوانید.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید
مطلب پیشنهادی :
ساخت فاصله سنج التراسونیک بی سیم با STM32 و آردوینو
کد کامل رزبری پای و آردوینو در انتهای صفحه در فایل دانلودی موجود است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
import RPi.GPIO as GPIO 
import time     
import spidev
from lib_nrf24 import NRF24 

ما می توانیم پین های GPIO رزبری پای یا شماره پین آن یا شماره GPIO آن ها وارد کنیم. به طور مثال پین 37 روی برد Raspberry pi، همان پین GPIO 26 است. بنابراین ما میتوانیم آن را با 26 کنیم.

GPIO.setmode(GPIO.BCM)  

سپس آدرس را تنظیم می کنیم. این آدرس برای برقراری ارتباط با گیرنده آردوینو از اهمیت بسیاری برخوردار است. آدرس در کد هگز قرار خواهد گرفت.

pipes = [[0xE0, 0xE0, 0xF1, 0xF1, 0xE0], [0xF1, 0xF1, 0xF0, 0xF0, 0xE0]]

کار رادیو را با استفاده از 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(pipes[0])     
radio.printDetails()

یک پیام را به شکل رشته آماده میکنیم. این پیام به Arduino UNO ارسال می شود.

sendMessage = list("Hi..Arduino UNO")  
while len(sendMessage) < 32:    
    sendMessage.append(0)

شروع به نوشتن به رادیو میکنیم و نوشتن رشته ها را ادامه میدهیم تا رادیو در دسترس باشد.

while True:
    start = time.time()      
    radio.write(sendMessage)   
    print("Sent the message: {}".format(sendMessage))  
send
    radio.startListening()  

اگر رشته تمام شود و پیپ بسته شود، پیام اشکال زدایی چاپ میشود.

while not radio.available(0):
        time.sleep(1/100)
        if time.time() - start > 2:
            print("Timed out.") 
            break

ارتباط را میبندیم و بعد از 3 ثانیه ارتباط را مجدداً راه اندازی میکنیم تا پیام دیگری ارسال شود.

  radio.stopListening()     # بستن رادیو
    time.sleep(3)  # تاخیر 3 ثانیه ای

اجرای برنامه پایتون در Raspberry Pi

اجرای برنامه پس از طی کردن مراحل زیر بسیار آسان است :

  1. فایل های برنامه Python و Library را در یک پوشه ذخیره کنید.
  2. نام پرونده برنامه من برای Sender nrfsend.py است.
  3. به ترمینال دستورات رزبری پای بروید. و با استفاده از دستور “cd” فایل برنامه Python را پیدا کنید.
  4. سپس پوشه را باز کرده و دستور “sudo python3 your_program.py” را بنویسید و Enter را بزنید. شما قادر خواهید بود جزئیات اصلی nRf24 را ببینید و رادیو پس از هر 3 ثانیه ارسال پیام ها را آغاز می کند.

برنامه نویسی آردوینو برای ارسال پیام رادیویی

برنامه نویسی Arduino UNO شبیه به برنامه نویسی Raspberry Pi است. ما روش های مشابه اما با زبان برنامه نویسی و مراحل مختلف را دنبال خواهیم کرد. کتابخانه nRF24l01 برای Arduino در انتهای صفحه در فایل دانلودی قرار داده شده است. کد کامل در انتهای صفحه در فایل دانلودی قرار داده شده است در اینجا بعضی از قسمت های کد را بررسی میکنیم.

برای ارتباط SPI با ماژول رادیویی کتابخانه SPI.h را فراخوانی میکنیم و برای ارتباط I2C با ال سی دی از کتابخانه Wire.h استفاده میکنیم. شما میتوانید از ارتباط معمولی برای ارسال اطلاعات از آردوینو به ال سی دی استفاده کنید.

#include <SPI.h>                   
#include <Wire.h>

برای دسترسی به توابع RF24 و LCD از کتابخانه RF24 و LCD استفاده میکنیم.

#include<RF24.h>                  
#include <LiquidCrystal_I2C.h>

آدرس LCD برای I2C عدد 27 استو بنابراین آن را مینویسیم.

LiquidCrystal_I2C lcd(0x27, 16, 2);

RF24 با پین های استاندارد SPI به CE در پین 9 و CSN در پین 10 وصل شده است.

RF24 radio(9, 10) ;  

کار رادیو را شروع کنید ، سطح قدرت را تنظیم کرده و کانال را روی 76 تنظیم کنید. همچنین آدرس پیپ را همانند رزبری پای تنظیم کنید و لوله را برای خواندن باز کنید.

radio.begin();        
  radio.setPALevel(RF24_PA_MAX) ;   
  radio.setChannel(0x76) ;            
  const uint64_t pipe = 0xE0E0F1F1E0LL ;    
  radio.openReadingPipe(1, pipe) ;

ارتباط I2C را شروع کرده و صفحه LCD را پیکربندی کنید.

Wire.begin();                 
  lcd.begin();                    
  lcd.home();                       
  lcd.print("Ready to Receive");

شروع به گوش دادن به رادیو برای پیام های دریافتی کنید و طول پیام را 32 بایت تنظیم کنید.

radio.startListening() ;        
  char receivedMessage[32] = {0}

اگر رادیو متصل است ، خواندن پیام را شروع کرده و آن را ذخیره کنید. پیام را در مانیتور سریال چاپ کنید و همچنین تا رسیدن پیام بعدی رادیو را متوقف کنید تا بعد از مدتی گوش دادن و دوباره امتحان کنید.

if (radio.available()) {       
   radio.read(receivedMessage, sizeof(receivedMessage));  Serial.println(receivedMessage) ;    
   Serial.println("Turning off the radio.") ;   
   radio.stopListening() ;   
   String stringMessage(receivedMessage) ;     
   lcd.clear();    
   delay(1000);    
   lcd.print(stringMessage);   
  }

کد کامل داده شده در انتها را در آردوینو Uno بارگذاری کنید و منتظر دریافت پیام باشید.

فیلم عملکرد ارتباط RF رزبری پای و آردوینو

به این ترتیب میتوانیم پیام ها و اطلاعات را از رزبری پای به آردوینو از طریق ارتباط رادیویی با ماژول nRF24L01 منتقل کنیم. فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

دانلود فیلم پروژه ارتباط RF رزبری پای و آردوینو

موارد موجود در فایل : سورس کامل ، شماتیک ، کتابخانه های مورد نیاز

دانلود فایل های پروژه

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید
امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. مالکیتی بر مطالب ارائه شده ندارم. اکثر فعالیت بنده در زمینه ترجمه است. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *