در پستهای آموزشی قبل دیدیم که چگونه میتوان با بردهای متفاوت ارتباط LoRa ایجاد کرد. همچنین چگونگی اتصال ماژول LoRa به این بردها و نحوه پیادهسازی کد بر روی آن را نیز یاد گرفتیم. در این پست قصد داریم تا ارتباط LoRa را با استفاده از هستههای دوگانه ESP32 شرح دهیم. برای مطالعه بیشتر و آشنایی با فناوری LoRa به پستهای راهاندازی ارتباط LoRa با استفاده از ESP32 و چگونگی راهاندازی ارتباط LoRa مراجعه کنید.
همانطور که میدانیم، میکروکنترلر ESP32 یک میکروکنترلر قدرتمند با کارایی بالاست که یکی از ویژگیهای آن برخورداری از دو هسته است که اصطلاحاً به آن Dual Core یا میکروکنترلر دو هسته ای نیز میگویند. این هستهها توانایی پیادهسازی تسکها را به صورت جداگانه دارند. تسک هریک از این هستهها توسط سیستمعاملی به نام freeRTOS کنترل و اجرا میشود که در پستهای پیشین به کتابخانهها و نحوه استفاده از آن اشاره کردیم. برای خواندن این پست بر روی این لینک کلیک کنید.
در ادامه به چگونگی راهاندازی ارتباط LoRa بر روی هستههای این میکروکنترلر توسط سیستمعامل freeRTOS میپردازیم.
اتصال ماژول RF96 به ESP32:
همانطور که در این پست دیدیم، میکروکنترلر ESP32 به صورت پیشفرض دارای ماژول LoRa نیست و برای راهاندازی این ارتباط نیاز داریم تا یک ماژول خارجی LoRa به آن متصل کنیم.
ماژول انتخابی در این پست، مانند قبل، RF96 است. همچنین مدل برد استفاده شده نیز Wemos D1 Mini ESP32 میباشد که نحوه اتصال این دو به هم بصورت زیر هست.[3]
- GND: GND
- 3.3v: 3.3v
- RESET: GPIO14
- DIO0: GPIO2
- NSS: GPIO5
- MOSI: GPIO23
- MISO: GPIO19
- SCK: GPIO18
برای ارسال و دریافت داده توسط این ماژول لازم هست تا یک آنتن نیز به پین ANA ماژول متصل شود. آنتن استفاده شده در اینجا یک سیم بود که همانند شکل زیر به این ماژول متصل شد. همچنین طول پیشنهادی آنتن برای فرکانسهای مختلف این ماژول نیز در این پست شرح داده شده که از آنجایی که فرکانس ماژول استفاده شده 868MHz است به آنتنی به طول 86mm نیاز خواهیم داشت.
آپلود کد ارسالکننده بر روی برد:
پس از اتصال ماژول به میکروکنترلر، نوبت به آپلود کد و تست آن است که در ادامه به تحلیل کد استفاده شده برای ESP32 میپردازیم.[1]
در قطعه کد زیر، همانطور که قابل مشاهده است، از کتابخانه freeRTOS و Task برای کنترل تسکها و واگذاری آنها به هستهها استفاده شده. همچنین کتابخانههای LoRa و SPI نیز برای ارسال داده الزامی هستند.
قطعه کد زیر، وظیفه setup کردن LoRa بین ماژول و میکروکنترلر را برعهده دارد.
در قسمت زیر، تابع ()xTaskCreatePinnedToCore
وطیفه محول کردن تسک مشخص شده در تابع ()Task0code
، که داده LoRa ارسال میکند، به هسته اول(هسته 0) را دارد. کارکرد کلی تابع ()xTaskCreatePinnedToCore
در پست استفاده از الگوهای خواب در کتابخانه freeRTOS شرح داده شده است.[2]
پارامتر آخر در تابع ()xTaskCreatePinnedToCore
که به آن عدد 0 نسبت داده شده را میتوان به 1 تغییر داد تا این ارتباط بر روی هسته دوم (هسته 1) صورت بگیرد.
درنهایت پس از آپلود کد بر روی ESP32، خروجیهای زیر را دریافت میکنیم.
ارتباط LoRa توسط هسته اول:
ارتباط LoRa توسط هسته دوم:
منابع:
[1]. Randomnerdtutorials. How to use ESP32 Dual Core with Arduino IDE. Randomnerdtutorials. Weblog. Available from: https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/ [accessed 14th April 2024]
[2]. John M. Wargo. Arduino ESP32 Running Tasks On Multiple Cores. Johnwargo. Weblog. Available from: https://johnwargo.com/posts/2023/arduino-running-tasks-on-multiple-cores/ [accessed 14th April 2024]
[3]. Tasmota. Wemos D1 Mini ESP32 Development Board. Blakadder. Weblog. Available from: https://templates.blakadder.com/wemos_D1_Mini_ESP32.html [accessed 14th April 2024]