با پیشرفت اینترنت اشیا، ارتباط ماشین به ماشین و خودروهای هوشمند، شبکه لورا نیز درحال رشد و فراگیر شدن است. این شبکه علاوه بر فراهم کردن امکان اتصال در مسافتهای طولانی، مصرف انرژی بسیار کمی هم دارد. به نحوی که میتوان اغلب از یک باتری برای تغذیه سخت افزارهای لورا استفاده کرد. در این آموزش یاد میگیریم که چطور اطلاعات را از برد آردوینو به برد رزبری پای در بستر شبکه رادیویی لورا Lora ارسال کنیم. در این آموزش فرض بر این است که برد رزبری پای، کاملا راه اندازی شده و آخرین نسخه سیستم عامل رزبین روی آن نصب است. پیش از ورود به یخش نرم افزاری، تنظیمات سخت افزاری را انجام میدهیم. در ادامه با مرجع تخصصی رزبری پای به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول لورا Ra02
Ra02 یا همان SX1278 یک ماژول ترنسیور وایرلس ۱۶ پایه ای لورا است. از طریق پروتکل SPI به سایر سخت افزارها از جمله آردوینو و رزبری پای متصل میشود. امکان انتقال دیتا به صورت wireless را برا ی آنها فراهم میکند. از آنجا که تغذیه این ماژول ۳٫۳ ولت است و رزبری پای هم خروجی ۳٫۳ ولت دارد. امکان ارتباط فراهم است. بنابراین می توانیم بدون هیچ مشکلی این دو را ازطریق پروتکل SPI به یکدیگر متصل کنیم. قابلیت ارسال اطلاعات در باند رادیویی با مصرف انرزی کم و برد مسافتی زیادی را دارا میباشد.
اتصالات ماژول لورا LoRa
اتصال ماژول لورا ra02 به رزبری پای Raspberry pi
نحوه اتصال ماژول لورا به رزبری پای ساده است، فقط با توجه به اندازه ماژول ممکن است که به دو عدد برد برد احتیاج داشته باشید. یا اینکه از سیم های مادگی به مادگی استفاده کنید.
اتصال ماژول لورا به برد آردوینو Arduino
بعد از این مراحل آنتن ۴۳۳Mhz یا سیم مسی به طول ۱۷ سانتی متر را به محل نصب آنتن لحیم میکنیم. سیم مسی به طول ۱۷ سانتی متر کار آنتن ۴۳۳ مگاهرتز را میکند. البته به این نکته توجه داشته باشید که لاک دوسر سیم را با سمباده یا وسیلهای دیگر بسابید که بتوانید لحیم کاری را انجام دهید. اگر در خصوص آنتن و روش انتخاب آن سوالی دارید، از طریق بخش نظرات همین آموزش مطرح کنید.
پکیج pylora و رزبری پای
پکیجهای پایتون زیادی با رزبری پای استفاده میشوند. به ویژه برای ایجاد (LPWAN (low power wide area network که تعداد زیادی نود به یک گیت وی از جمله رزبری پای متصل میشوند. اما در این آموزش فقط ارتباط یک نود و گیت وی Gateway را توضیح میدهیم. در این پست تصمیم به استفاده از pylora package گرفتیم. ماژولهای rpsreal LoRa Arduino و rpsreal LoRa Raspberry pi را دارد که در محیطهای رزبری و آردوینو به کار می روند.
تنظیم محیط رزبری پای
همانطور که گفتیم ماژول لورا با پروتکل SPI به رزبری متصل میشود. برای همین قبل از نصب پکیج pylora package لازم است که SPI را به ترتیب زیر روی برد رزبری پای به حالت enable تبدیل کنیم. با putty به رزبری متصل میشویم و با دستور زیر وارد پنجره configuration میشویم. اگر روش برقراری این نوع ارتباط را نمیدانید، کافیست از طریق بخش نظرات همین آموزش سوالتان را مطرح بفرمایید.
sudo raspi-config
سپس گزینه Interfacing option را انتخاب کنید و SPI را فعال میکنیم. با این روش رابط SPi در برد رزبری پای Raspberry pi فعال میشود.
تغییرات را ذخیره میکنیم و اگر pip و python را روی رزبری نصب داشتیم؛ پکیج RPI GPIO را با دستور زیر نصب میکنیم.
pip install RPi.GPIO
همینطور پکیج SPI dev را نصب می کنیم spi dev برای راه اندازی پروتکل spi استفاده می شود.
pip install spidev
حالا پکیج pylora را نصب می کنیم. این پکیج ماژولهای رادیویی مرتبط با Lora را به همراه دارد.
pip install pyLoRa
با دستورات زیر پکیجهای python rpi gpio و spidev را دانلود و نصب میکنیم.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
ترمینال در محیط رزبری پای مانند تصویر زیر خواهد بود.
همچنین از ادرس git زیر کتابخانه pysx127 را clone میکنیم.
sudo apt-get install git sudo git clone https://github.com/rpsreal/pySX127x
پروگرم کردن رزبری پای
برنامه پایتون ۳ را باز میکنیم. در IDE کدهای زیر را وارد میکنیم. به این نکته توجه کنید کتابخانهها حتما در همان فابل کد پایتون، قرار گرفته باشند. برای سادگی کار فایل zip در کد پایتون به همراه کتابخانههای لازم را در پایان آموزش قرار دادهام. برنامه بسیار ساده است ابتدا باید ماژول لورا Lora را به نحوی تنظیم کنیم که در فرکانس ۴۳۳ مگاهرتز کار کند. سپس پکتهای packet ارسال شده از نود را دریافت کند. طبق معمول ابتدا کتابخانهها را import میکنیم.
from time import sleep from SX127x.LoRa import * from SX127x.board_config import BOARD BOARD.setup()
کتابخانه time برای ایجاد delay به کار میرود. کتابخانه لورا برای ایجاد تنظیمات رادیویی و کتابخانه board.setup برای تنظیم برد است. در مرحله بعد یک کلاس پایتون به نام لورا ایجاد میکنیم، که دارای سه تابع init classs, start class و on_rx_done میباشد. حال تابع init ماژول لورا را در فرکانس ۴۳۳ مگاهرتز با پهنای باند ۱۲۵ کیلو هرتز و همچنین ماژول را در مود sleep تنظیم میکند. در این صورت مصرف انرژی کاهش پیدا میکند.
# Medium Range Defaults after init are 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on 13 dBm lora.set_pa_config(pa_select=1) def __init__(self, verbose=False): super(LoRaRcvCont, self).__init__(verbose) self.set_mode(MODE.SLEEP) self.set_dio_mapping([0] * 6)
تابع start جایی است که ماژول را به عنوان تنظیم و RSSI و STATE و فرکانس کاری را مشخص میکنیم.
def start(self): self.reset_ptr_rx() self.set_mode(MODE.RXCONT) while True: sleep(.5) rssi_value = self.get_rssi_value() status = self.get_modem_status() sys.stdout.flush()
در تابع on_rx_done پکتهایی که دریافت کردیم را در متغیر payload ذخیره میکنیم. سپس از بافر rx عبور داده و flag را High میکنیم. سپس مقادیر دریافت شده را با utf_8 دیکد کرده تا برای کاربر قابل خواندن شوند.
def on_rx_done(self): print("\nReceived: ") self.clear_irq_flags(RxDone=1) payload = self.read_payload(nocheck=True) print(bytes(payload).decode("utf-8",'ignore')) self.set_mode(MODE.SLEEP) self.reset_ptr_rx() self.set_mode(MODE.RXCONT)
و ادامه کدها به شرح زیر میباشد.
try: lora.start() except KeyboardInterrupt: sys.stdout.flush() print("") sys.stderr.write("KeyboardInterrupt\n") finally: sys.stdout.flush() print("") lora.set_mode(MODE.SLEEP) BOARD.teardown()
کدهای آردوینو ماژول Lora
کد کامل آردوینو برای ارتباط با رزبری پای با استفاده از ماژول لورا و کتابخانه
#include <SPI.h> //Import SPI librarey #include <RH_RF95.h> // RF95 from RadioHead Librarey #define RFM95_CS 10 //CS if Lora connected to pin 10 #define RFM95_RST 9 //RST of Lora connected to pin 9 #define RFM95_INT 2 //INT of Lora connected to pin 2 // Change to 434.0 or other frequency, must match RX's freq! #define RF95_FREQ 434.0 char value='0'; // Singleton instance of the radio driver RH_RF95 rf95(RFM95_CS, RFM95_INT); void setup() { //Initialize Serial Monitor Serial.begin(9600); // Reset LoRa Module pinMode(RFM95_RST, OUTPUT); digitalWrite(RFM95_RST, LOW); delay(10); digitalWrite(RFM95_RST, HIGH); delay(10); //Initialize LoRa Module while (!rf95.init()) { Serial.println("LoRa radio init failed"); while (1); } //Set the default frequency 434.0MHz if (!rf95.setFrequency(RF95_FREQ)) { Serial.println("setFrequency failed"); while (1); } rf95.setTxPower(18); //Transmission power of the Lora Module } void loop() { Serial.print("Send: "); char radiopacket[1] = {char(value)}; rf95.send((uint8_t *)radiopacket, sizeof((uint8_t *)radiopacket)); delay(1000); value++; if (value > '9'){ value = 48; } }
بخش کدهای آردوینو در فایلهای zip به نامهای radio_head_master و arduino code قرار گرفتهاند.
کدهای پایتون در رزبری پای ماژول Lora
کد کامل رزبری پای برای ارتباط با آردوینو با استفاده از ماژول لورا به شرح زیر است.
from time import sleep from SX127x.LoRa import * from SX127x.board_config import BOARD BOARD.setup() class LoRaRcvCont(LoRa): def __init__(self, verbose=False): super(LoRaRcvCont, self).__init__(verbose) self.set_mode(MODE.SLEEP) self.set_dio_mapping([0] * 6) def start(self): self.reset_ptr_rx() self.set_mode(MODE.RXCONT) while True: sleep(.5) rssi_value = self.get_rssi_value() status = self.get_modem_status() sys.stdout.flush() def on_rx_done(self): print("\nReceived: ") self.clear_irq_flags(RxDone=1) payload = self.read_payload(nocheck=True) print(bytes(payload).decode("utf-8",'ignore')) self.set_mode(MODE.SLEEP) self.reset_ptr_rx() self.set_mode(MODE.RXCONT) lora = LoRaRcvCont(verbose=False) lora.set_mode(MODE.STDBY) # Medium Range Defaults after init are 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on 13 dBm lora.set_pa_config(pa_select=1) try: lora.start() except KeyboardInterrupt: sys.stdout.flush() print("") sys.stderr.write("KeyboardInterrupt\n") finally: sys.stdout.flush() print("") lora.set_mode(MODE.SLEEP) BOARD.teardown()
بخش کدهای پایتون رزبری پای در فایل زیپ با عنوان raspberry pi lora code قرار گرفتهاند. دانلود کدها
خروجی نرم افزار پایتون پس از اجرای پروژه ارتباط لورا Lora مانند تصویر زیر خواهد بود.
لوازم مورد نیاز
ماژول ترنسیور وایرلس LORA-RA02 با برد کمکی
آنتن۴۳۳MHz یا سیم مسی به طول ۱۷ سانتی متر
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام و خسته نباشید
با تشکر از آموزش شما سوال من این است که کتابخانه Sx127x چیست و چه نقشی ایفا میکند؟
سلام وقتتون بخیر ,در کد پایتون که برای رزبری پای نوشتم یک سری توابع از کتابخونه sx127 اضافه شده اند(import شده) . کلا کتابخونه ها برای سادگی کار و کاهش حجم کد ها همه جا استفاده می شوند
سلام
با این پرتکل lora فاصله ی بین اردوینو و رزبری حداکثر چه قدر میتونه باشه؟
در این مثال رزبری و اردوینو در چه فاصله ای به طور ماکزیمم تبادل داده میتونن بکنن؟
سلام من بررسی نکردم اما با این انتن حداقل یک کیلومتر باید بتونه ساپورت کنه
سلام
بار اول که کد را روی آردوینو آپلود کردم بدون مشکل Send می فرستاد.اما وقتی آردوینو را یکبار قطع و وصل کردم ،از اون به بعد فقط یکبار Send می فرسته و لوپ متوقف میشه !!!
هر تعداد بار که آردوینو را ریست می کنم همین اتفاق می افتد و توی رزبری هم همون یک Send دریافت میشه.
علت از کار افتادن لوپ آردوینو چیست ؟؟؟
سلام، به نظر می رسد که در لحظه اول، بین فرستنده و گیرنده عمل همگام سازی(هم زمان سازی یا synchronization) می بایست صورت گیرد. بنابراین، با قطع ارتباط به هر دلیل، عمل ارسال و دریافت داده با اختلال مواجه خواهد شد.
سلام
آیا امکان ساخت گیت وی لورا برای ارسال و دریافت اطلاعات تعداد حدود ۱۰ نود که همگی از برد آردوینو اونو استفاده می کنند به یک گیت وی که توسط رزبری پای ساخته شده، با استفاده از این ماژول Ra-02 وجود دارد؟ اگر اینطور نیست لطفا ماژول لورای مناسب را معرفی بفرمایید.
با سلام
بله این امر امکان پذیر است.
خسته نباشید پروژه عالی هستش. میخواستم بپرسم میشه گیرنده ( آردوینو ) و فرستنده (رزبری پای ) با فاصله یک کیلومتری از هم قرار بگیرند و یک رله رو کنترل کرد.؟؟؟؟؟؟؟؟؟ و یا فاصله ۳۰ متری..؟
با سلام
بستگی به ماژول رادیویی مورد استفاده و آنتنها آن دارد. در هر دو فاصله اعلام شده امکان پذیر است.
ایا با یک برد اردوینو و یک ماژول لورا میتوان هم اطلاعات را ارسال و هم دریافت کرد؟
با سلام
برای ارتباط بیسیم بایستی حداقل دو عدد ماژول فرستنده گیرنده و دو عدد برد میکروکنترل داشته باشید.
سلام و وقت بخیر، نحوه راه اندازی پروتکل lora wan در آردوینو به چه صورت هست؟
با سلام
سوالتان خیلی کلی است، امکان پیگیری این مورد در بخش نظرات فراهم نیست.
سلام ، من در چه بخشی میتونم سوالم رو بپرسم؟ بنده درخواست آموزش راه اندازی پروتکل lora wan و lora را در آردوینو و stm32 داشتم از مدرسین شما ، به صورت جلسات خصوصی اگر عمومی برگزار نمیشود . پیش نیازهای مربوطه را دارم .
با تشکر.
با سلام مجدد
سوالی که شما مطرح کرده بودید کلی بود به همین دلیل اون پاسخ تقدیمتان شد. در حال حاضر آموزشی برای درخواست شما نداریم. البته دقت داشته باشید که راه اندازی این موارد، پیشنیازهای بسیار مهمی لازم دارند.
میشه لطفا پیش نیازهای مربوطه رو بفرمایید؟
متدهای ارسال دیتا، پروتکلهای شکبه و کمی اطلاعات نسبت به وضعیت الکترونیک مخابرات
سلام ممنون از اشتراک دانشتون.
من متوجه نشدم که تنظیمات SPI برای آردوینو کجا انجام میشه و مقادیر پیش فرض چیه؟
احتمالا در کتابخانهRH_RF95.h باشه ولی من نتونستم پیداش کنم، چون میخوام از یک برد آردوینو دیگه استفاده کنم ممنون میشم راهنمایی بفرمایید چطور میتونم تنظیمات پیش فرض SPI رو تغییر بدم
با سلام و تشکر از شما
پایههای بردهای آردوینو مشخص هستند. پایههای SPI هم در متن آموزش دقیقا توضیح داده شده است که کدام پایهها هستند. خواهشمندم متن را با دقت بیشتر بررسی کنید.
با سلام
خیلی ممنون از سایت بی نظیری که دارید. به جرئت می تونم بگم تنها منبع فارسی موجود در این زمینه است.
من میخوام با استفاده از رزبری پای و ماژول لورا یه LoRa Gateway بسازم. ماژول های زیادی هستند. مثل:
IC880a LoRa concentrator board
Lora Shields v95-868
Libelium LoRa radio module
HopeRF RFM92W/HopeRF RFM95W (or RFM96W for 433MHz)
Modtronix inAir9/inAir9B (or inAir4 for 433MHz)
NiceRF LoRa1276
RAK833 Gateway
ولی متاسفانه هیچ کدوم در بازار ایران فعلا در دسترس نیستند.
ممکنه بفرمایید آیا شما سفارش خرید هر کدوم از ماژول های بالا رو قبول می کنید؟
واینکه ممکن هست که یه ماژول مناسب به غیر از Ra02 برای این کار معرفی کنید که در بازار قایل دسترس باشه (البته میخوام رنج ارتباط تا حداکثر ممکن بالا باشه برای مثال تا ۱۰ کیلومتر)
ممنون از وقتی که میذارید
با سلام و سپاس از همراهی شما
در خصوص خرید کالاها به لینک زیر مراجعه کنید. برخی از اقلای که مطرح کردهاید در فروشگاه موجود است. لطفا لینک زیر را بررسی کنید.
ماژول rfm
سلام خیلی ممنون از سایت خوبتون
سوالی که داشتم اینکه برای انواع کلاس های LoRaWAN (A,B,C) آیا نیازه برای هر کدوم از این کلاس ها یک ماژول مخصوص به خودش تهیه کرد یا اینکه با تهیه یک ماژول میتونیم هر کدوم از این کلاس هارو پیاده سازی کرد؟
اگر امکانش هست به این سوالم پاسخ دهید.
با سلام
داکیومنتهای لورا ون را باید بررسی کنید.
من قصد دارم یک سنسور دما رو با استفاده از ماژول لورا راه اندازی کنم
میخوام سنسور اطلاعات رو با استفاده از ماژول لورا (فرستنده) به یک ماژول لورای دیگه که به عنوان گیرنده هست بفرسته و بعد از طریق اردوینو روی نمایشگر نشون بده
میتونید بگید کدوم پایه هارو باید وصل کرد و مدارش چجوری میشه؟
با سلام
برای این منظور بایستی یک ماژول لورا در بخش فرستنده و یک ماژول لورا در بخش گیرنده داشته باشید. بسته به اینکه از کدام مدل استفاده میکنید، بایستی کتابخانه مناسب همان مدل را هم انتخاب کنید. ماژولهای لورا با تراشه SX1278 معمولا دارای رابط SPI هستند. اتصالا با میکروکنترلر برقرار کرده و سپس برای تبادل اطلاعات در کدنویسی پهنای باند و شدت توان را برای فرستنده و گیرنده مشخص کرده و اطلاعات مربوطه را در کدها قرار دهید.