آموزش آردوینوپروژه های آردوینو

راه اندازی ماژول LoRa HPD13A – SX1276 با آردوینو

در این پروژه، ما از HPD13A که یک ماژول LoRa مبتنی بر IC SX1276 است برای برقراری ارتباط با شبکه The Things Network استفاده خواهیم کرد و می‌توانیم از این ماژول برای پروژه های مرتبط با اینترنت اشیا استفاده کنیم. گیف زیر عملکرد ماژول LoRa را نشان می دهد. ما کد را طوری نوشته‌ایم که وقتی شمارنده افزایش می‌یابد، مقدار شمارنده روی پنجره سریال مانیتور چاپ می‌شود و همچنین می‌توانیم آن مقدار را که در صفحه TTN نشان داده شده است، ببینیم.

ماژول LoRa HPD13A – SX1276

برای این آموزش از ماژول 868MHZ lora که توسط SEMTECH طراحی و تولید شده است استفاده خواهیم کرد. این ماژول بسیار آسان برای استفاده، کم هزینه و با کارایی بالا است که می تواند در بسیاری از پروژه های کاربردی استفاده شود. فرستنده‌ SX1276/77/78/79 دارای مودم دوربرد LoRaTM است که مصرف جریان را به حداقل می‌رساند. گفته می شود که با استفاده از SX1276 می توان به حساسیت بیش از -148dBm دست یافت.

پایه های ماژول LoRa HPD13A – SX1276 در زیر نشان داده شده است. برای این آموزش، ما از ماژول HDP13A V1.1 LoRa استفاده خواهیم کرد که توسط HPDTeK یک سازنده مشهور در چین طراحی و توسعه یافته است. پین اوت ماژول در زیر نشان داده شده است.

توضیحات پین های ماژول SX1276 LoRa

  • GND این پایه زمین ماژول است که باید به پایه GND برد ESP32 ،Arduino یا هر میکروکنترلری که استفاده می کنید وصل شود. در مجموع سه پایه GND روی برد وجود دارد که همه آنها به صورت داخلی به هم متصل شده اند.
  • SDO(MISO) پین SDO پین سریال خروجی داده میکروکنترلر است. یک سیگنال خروجی که در آن داده ها به دستگاه SPI دیگری ارسال می شود.
  • SDI (MOSI) پین SDI ورودی داده سریال برای میکروکنترلر است. یک سیگنال ورودی که داده ها از یک دستگاه SPI دیگر دریافت می شود.
  • SCKIt پین ساعت سریال ماژول است. ساعت سریال توسط میکروکنترلر تولید می شود.
  • SEL پین Chip Select ماژول است. توسط کنترل کننده برای شروع ارتباط با یک دستگاه مشخص فعال می شود.
  • RST این پین Reset برد ماژول است که برای تنظیم مجدد میکروکنترلر به مقادیر اولیه آن استفاده می شود.
  • IO(2-5) این پین های GPIO ماژول LoRa است. این را می توان روی High یا Low تنظیم کرد.
  • ANT این پینی است که آنتن باید به آن وصل شود. طبق دیتاشیت باید یک آنتن مناسب وصل کنید.
  • VCC این پایه پاور ماژول است، می توانید آن را به 3.3 ولت متصل کنید. حداکثر سطح ولتاژ ماژول 3.3 ولت است.

اتصال ماژول HPD13A LoRa به آردوینو

اتصال ماژول LoRa به برد آردوینو تقریبا ساده است. نحوه اتصال سنسور DHT22 و ماژول LoRa HPD13A به برد آردوینو پرو مینی در تصویر زیر نمایش داده شده است.

اتصال ماژول HPD13A LoRa به آردوینو

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

شماتیک اتصالات ماژول SX1276 با آردوینو در بالا نشان داده شده است، می بینید که آردوینو را به ماژول SX1276 با پایه های SPI آردوینو وصل کرده ایم و سنسور DHT22 را به پایه 5 آردوینو وصل کرده ایم. در این پروژه، ما از یک Arduino Pro Mini برای ارتباط با ماژول استفاده می کنیم، زیرا ماژول SX1276 تحمل 5 ولت را ندارد، بنابراین ما Arduino Pro Mini را با 3.3 ولت مبدل USB به Uart تغذیه می کنیم.

تفاوت فعال سازی TTN ABP و OTAA

قبل از ارسال و دریافت پیام، هر دستگاه نهایی باید در یک شبکه ثبت شود. این روش به عنوان فعال سازی شناخته می شود. دو روش فعال سازی موجود است:

  • فعال‌سازی از طریق هوا (OTAA) – ایمن‌ترین و توصیه‌شده‌ترین روش فعال‌سازی برای دستگاه‌های نهایی میباشد. دستگاه‌ها یک رویه اتصال با شبکه را انجام می‌دهند که طی آن یک آدرس پویا به دستگاه اختصاص داده می‌شود و کلیدهای امنیتی با دستگاه تعیین می‌شوند.
  • فعال سازی با شخصی سازی (ABP) – نیاز به کدگذاری آدرس دستگاه و همچنین کلیدهای امنیتی موجود در دستگاه دارد. ABP امنیت کمتری نسبت به OTAA دارد و همچنین دارای جنبه منفی است که دستگاه ها نمی توانند ارائه دهندگان شبکه را بدون تغییر دستی کلیدهای امنیتی دستگاه تغییر دهند.

روش اتصال برای LoRaWAN در نسخه 1.0 و 1.1 کمی متفاوت است. دو بخش زیر روند اتصال 1.0 و 1.1 را به طور جداگانه شرح می دهد. برای انتقال داده ها به شبکه TTN، ابتدا باید دروازه خود را راه اندازی کنید و پس از انجام این کار، باید گره های انتهایی خود را به درستی راه اندازی کنید تا دستگاه به درستی کار کند.

کد آردوینو برای ماژول لورا SX1276

کد آردوینو برای ماژول لورا مبتنی بر HPD13A SX1276 بسیار ساده و قابل درک است. تنها کاری که باید انجام دهیم این است که کتابخانه arduino-lmic را توسط mcci-catena نوشته شده است دانلود کرده و از کد نمونه آن برای برقراری ارتباط با ماژول SX1276 استفاده کنیم. اما در این مثال، ما کمی کار اضافی انجام می دهیم و داده های شمارنده را به شبکه TTN ارسال می کنیم تا به روز رسانی داده های زنده را مشاهده کنیم.

پس از نصب، باید کتابخانه را برای کار با SX1276 پیکربندی کنیم. برای اینکار، باید به محل کتابخانه نصب شده برویم.

برای ما در C:\Users\USER\Documents\Arduino\libraries\arduino-lmic-master\project_config است.

و ما باید CFG_eu868 1 و CFG_sx1276_radio 1 را از حالت کامنت برداریم. یعنی مثل زیر:

// project-specific definitions
// project-specific definitions
#define CFG_eu868 1
//#define CFG_us915 1
//#define CFG_au915 1
//#define CFG_as923 1
// #define LMIC_COUNTRY_CODE LMIC_COUNTRY_CODE_JP /* for as923-JP; also define CFG_as923 */
//#define CFG_kr920 1
//#define CFG_in866 1
#define CFG_sx1276_radio 1

در مرحله بعد، نمونه طرح TTN-OTAA را با رفتن به File > Examples > MCCI LoRaWAN LMIC Library > ttn-otaa-feather-us915-dht22 باز می کنیم و کد را کمی تغییر می دهیم تا با ماژول SX1276 سازگار شود.

اکنون باید APPEUI (Application Extended Unique Identifier)، DEVEUI (Device Extended Unique Identifier)، APPKEY (Application Key) را اضافه کنیم. در کد زیر ما این کار را انجام دادیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
// This EUI must be in little-endian format, so least-significant-byte
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes. For TTN issued EUIs the last bytes should be 0xD5, 0xB3,
// 0x70.
static const u1_t PROGMEM APPEUI[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
void os_getArtEui (u1_t* buf) {
  memcpy_P(buf, APPEUI, 8);
}
// This should also be in little endian format, see above.
static const u1_t PROGMEM DEVEUI[8] = { 0xFF, 0x43, 0x45, 0xD0, 0xDE, 0xD5, 0xB3, 0x70 };
void os_getDevEui (u1_t* buf) {
  memcpy_P(buf, DEVEUI, 8);
}
static const u1_t PROGMEM APPKEY[16] = { 0xBB, 0xAB, 0xAA, 0xD6, 0x47, 0x5A, 0xAC, 0xBC, 0x36, 0xAC, 0x22, 0x4A, 0xF2, 0x78, 0x33, 0x72 };

اکنون باید پین های ماژول را تنظیم کنیم، در داخل کد ساختاری را مشاهده خواهید کرد که در زیر نشان داده شده است:

const lmic_pinmap lmic_pins = {
  .nss = 5,
  .rxtx = LMIC_UNUSED_PIN
  .rst = 4,
  .dio = {34, 35, LMIC_UNUSED_PIN},
};

در ساختار، باید پین های RST، IO0 و IO1 را اختصاص دهید. زمانی که این کار را انجام دادیم، پیکربندی انجام می شود و اکنون باید تعیین کنیم از کدام سنسور استفاده میکنیم و آن به کدام پایه متصل شده است.

// سنسور و پین دیجیتال DHT
#define DHTPIN 5
#define DHTTYPE DHT22

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

 LMIC_setLinkCheckMode(0);
    // Set the data rate to Spreading Factor 7.  This is the fastest supported rate for 125 kHz channels, and it
    // minimizes air time and battery power. Set the transmission power to 14 dBi (25 mW).
    LMIC_setDrTxpow(DR_SF7,14);
    // in the US, with TTN, it saves join time if we start on subband 1 (channels 8-15). This will
    // get overridden after the join by parameters from the network. If working with other
    // networks or in other regions, this will need to be changed.
    LMIC_selectSubBand(1);

پس از انجام این کار، می توانیم کد را کامپایل کرده و در آردوینو آپلود کنیم. اگر همه چیز درست کار کند، ابتدا می توانید فرآیند احراز هویت و سپس داده های دما را در پنجره نمایشگر سریال مشاهده کنید.

موارد موجود در فایل : فایل سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

6 نظر

  1. بله تهیه میکنم حتما ولی از محدودیت منظورتون چیه؟ مشکلش چیه و آیا مورد بهتری مد نظرتون هست؟ وکار این سنسور DHT22 چیه که وصل کردید و کارش چیه؟

    1. احتمالا در ارتفاع بالا دچار مشکل بشه بهتر هست خودتون توضیحات کامل در مورد LoRa رو مطالعه کنید. DHT22 یک سنسور محبوب و با دقت مناسب برای اندازه گیری دما و رطوبت هست

  2. سلام
    هر ماژول Lora شماره شناسه مشخصی داره؟مثل IMEI در gsm ?در جایی که تعداد زیادی نصب کنیم چجوری میشه تشخیص داد کدام پکت از سمت کدام سنسور میاد ؟

    1. سلام عزیز
      کد گذاری به صورت end to end هست

  3. سلام از این ماژول و برد میشه برای کنترول پهپاد از فاصله طولانی استفاده کرد و اگه میشه چه دوره باید تهیه کنم ممنون

    1. سلام عزیز
      بله میشه استفاده کرد اما محدودیت هایی داره. LoRa رو میتونید با آردوینو راه اندازی کنید بنابراین دوره آموزش آردوینو براتون مفید خواهد بود

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

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