راه اندازی ماژول زیگبی توسط رزبری پای

الکترونیک و رباتیک -> ماژول ها و سنسور ها 1376 4 کاربر آکادمی پارتینه

در آموزش قبلی نحوه‌ی را اندازی ماژول زیگبی توسط آردوینو UNO مورد بررسی قرارگرفت. در این آموزش به راه اندازی این ماژول توسط رزبری پای پرداخته می شود. در اینجا رزبری پای به عنوان گیرنده عمل کرده و با ماژول زیگبی که به صورت سری به لپ‌تاپ متصل است، ارتباط بی سیم برقرار می‌کند.

فرض بر  این است که سیستم عامل رزبین (Raspbian) بر روی رزبری پای نصب شده است.  در اینجا یک مانیتور خارجی با استفاده از یک کابل HDMI به عنوان نمایشگر به رزبری پای متصل می‌شود. در صورت در دسترس نبودن مانیتور خارجی ، می‌توانید توسط کلاینت SSH (PuTTY) به سرور لینوکس ودر نهایت رزبری پای متصل شده و اطلاعات را بر روی لپ‌تاپ یا کامپیوتر نمایش دهید.

مرحله 1 : پیکربندی ماژول زیگبی

یک ماژول زیگبی می‌تواند به عنوان یک هماهنگ‌کننده (Coordinator) ، مسیریاب (Router) یا پایان‌افزار (End Device) عمل کند. برای کار در حالت دلخواه نیز باید تنظیماتی روی آن اعمال شود. بنابراین قبل از استفاده از ماژول‌های زیگبی به رزبری پای باید این ماژول توسط نرم‌افزار XCTU تنظیم شود. نرم‌افزار XCTU یک نرم‌افزار چند منظوره برای ارتباط با ماژول‌های شرکت دیجی (Digi RF modules) می‌باشد. با استفاده از این نرم‌افزار می‌توان با ماژول‌های زیگبی این شرکت توسط کامپیوتر ارتباط برقرار کرده و علاوه بر انجام تنظیمات، با ماژول ارتباط سریال برقرار کرد و آن را تست کرد.

تنظیم ماژول زیگبی توسط  XCTU

برای اتصال ماژول به کامپیوتر از مبدل USB به سریال FT232 استفاده می‌شود. نرم‌افزار XCTU را از این لینک دانلود و نصب کنید. پس از دانلود و نصب، آن را باز کرده و از اتصال صحیح ماژول به لپ‌تاپ یا کامپیوتر مطمئن شوید.

 گام اول: بر روی گزینه search کلیک کنید. در این مرحله تمامی دستگاه‌های RF متصل شده به لپ تاپ شناسایی می‌شوند که در اینجا باید یک ماژول XBee شناسایی شود.

 گام دوم: پورت سریالی که ماژول به آن متصل شده است انتخاب کرده و بر روی Next کلیک کنید.

 گام سوم: در این گام، پارامترهای مربوط به پورت USB را مطابق شکل تنظیم کرده و بر روی Finish کلیک کنید.

 گام چهارم: دستگاه شناسایی شده را انتخاب کرده و روی گزینه Add selected device کلیک کنید. با این کار ماژول XBee به پنل XCTU اضافه می‌شود.

 گام پنجم: در این گام باید تنظیمات لازم را بر روی ماژول XBee پیاده کنید. برای این کار می‌توانید از دستورات AT استفاده کنید یا داده‌ها را به صورت دستی وارد نمایید. همانطور که در تصویر مشاهده می‌کنید، حرف R که در مشخصات ماژول در سمت چپ نرم‌افزار مشاهده می‌شود، به معنی قرار دادن Xbee در حالت مسیریاب (Router) است. در این پروژه ماژول را برای قسمت فرستنده در حالت هماهنگ‌کننده (Coordinator) قرار می‌دهیم.

 گام ششم: در این مرحله به منظور ارتباط با سایر ماژول های XBee ، باید داده‌های ID ، MY و DL را تنظیم کنید. شناسه (ID) برای تمامی ماژول‌های متصل به هم یکسان است. تنها پارامترهای MY و DL تغییر می‌کنند. به عبارت دیگر پارامتر MY برای گیرنده XBee تبدیل به DL و برای ماژول فرستنده (coordinator) تبدیل به MY می‌شود. پارامتر CE در حالت هماهنگ‌کننده (coordinator) تنظیم کرده و روی گزینه Write کلیک کنید.

 گام هفتم: بعد ازتنظیم داده های فوق در قسمت فرستنده ، ماژول زیگبی اول را جدا کرده و دومین ماژول زیگبی را متصل کنید. همان فرآیند قبلی را تکرار کنید. تنها تغییراتی که ذکر شد را برای  DL ، MYو CE انجام دهید. دومین زیگبی باید به عنوان دستگاه پایان‌افزار (End Device) تنظیم شود.. بنابراین در منوی CE ،End Device را انتخاب کرده و بر روی Write کلیک کنید. 

 گام هشتم: در این مرحله ماژول‌های زیگبی آماده هستند تا با رزبری پای ارتباط برقرار کنند.  فرستنده  زیگبی  به لپ‌تاپ و گیرنده زیگبی به رزبری پای متصل می شود. سپس با استفاده از لپ تاپ دستوراتی به قسمت گیرنده ارسال می‌شوند.

مرحله 2 : اتصالات و دیاگرام مداری برای قسمت گیرنده

 Tx (pin2) XBee -->Tx pin pin Raspberry Pi     
Rx (pin3) XBee --> Rx pin pin Raspberry Pi      
 Gnd (pin10) XBee --> Gnd pin Raspberry Pi
 Vcc (Pin1) XBee --> 3.3v pin pin Raspberry Pi          
 Led --> GPIO 23   

 

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

 به طور پیش فرض ، پورت سریال سخت افزاری رزبری پای غیرفعال است. بنابراین قبل از اتصال باید فعال شود.

1.      در ترمینال ، دستور raspi-config را اجرا کنید.

2 . گزینه‌ی 5 (Interfacing options) را انتخاب کنید. اکنون گزینه P6 Serial را انتخاب و فعال کرده ، سپس ذخیره کرده و از ترمینال خارج شوید.

  GPIO14 و GPIO15 به ترتیب به عنوان Tx و Rx عمل می‌کنند.

مرحله 4 : کدنویسی و تنظیمات نرم‌افزاری

در پایان آموزش کد کامل پایتون نیز برای ارتباط ماژول زیگبی و رزبری پای ارائه شده است.

ابتدا باید کتابخانه‌های زمان ، سریال و RPi.GPIO را با استفاده از دستور زیر فراخوانی کنید.

import time
import serial
import RPi.GPIO as GPIO
…

در این مرحله تنظیمات مربوط به ارتباط سریال را مطابق با دستور زیر اعمال کنید.

ser = serial.Serial(
    port='/dev/ttyS0',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1            
 )

تمام عناصر ارسال و دریافت را در حلقه while بنویسید.

while 1:

برای ارسال پیام به سمت فرستنده  از تابع ser.write استفاده می‌شود. خطوط زیر را برای ارسال شمارش از حالت کامنت خارج کنید.

 #ser.write(str.encode('Write counter: %d 
'%(counter)))
    #time.sleep(1)
    #counter += 1

برای دریافت پیام‌ها نیز از تابع  ()  ser.readlineاستفاده می‌شود. پیام ورودی را در یک متغیر ذخیره کرده و شرایط را بررسی کنید. اگر پیام دریافتی "a" است ، 3 ثانیه LED را روشن و سپس خاموش کنید.

    x=ser.readline().strip()
    print(x)
    if x == 'a':
        GPIO.output(23,GPIO.HIGH)
        time.sleep(3)
..
..

کد کامل پایتون همراه با ویدیو در انتهای آموزش قرار داده شده است. کد را در یک ویرایشگر متنی پایتون وارد و ذخیره کنید. با استفاده از دستور sudo python script_name.py اسکریپت را اجرا کنید. می توانید برای اجرای اسکریپت از Python IDE و Shell استفاده کنید.

آزمایش ارتباط بی سیم XBee توسط رزبری پای

حال لازم است درستی عملکرد قسمت گیرنده و فرستنده تست شود.برای فرمان دادن به قسمت فرستنده ، از ترمینال کنسول XCTU استفاده می‌شود. بر روی نماد Console در نزدیکی گزینه تنظیمات کلیک کنید. سپس بر روی Open کلیک کرده تا XBee به لپ تاپ متصل شود. "a"را در سیاهه کنسول وارد کنید. خواهید دید که LED به مدت 3 ثانیه روشن و سپس خاموش می‌شود.

کد:

#!/usr/bin/env python
import time
import serial
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(23,GPIO.OUT)
ser = serial.Serial(
    port='/dev/ttyS0',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1             
 )
counter=0       
      
while 1:
    #ser.write(str.encode('Write counter: %d \n'%(counter)))
    #time.sleep(1)
    #counter += 1
    x=ser.readline().strip()
    print(x)
    if x == 'a':
        GPIO.output(23,GPIO.HIGH)
        time.sleep(3)
    else:
        GPIO.output(23,GPIO.LOW)