برد STM سیم کارت GSM - GPRS قطعات الکترونیک

ارسال و دریافت پیامک با ماژول سیم کارت Sim800l و میکروکنترلر STM32

نوشته شده توسط علی زاهدی

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

 


معرفی ماژول SIM800L


ماژول SIM800L، یک ماژول مخابراتی از نوع سیم کارتی است. این ماژول یک اسلات سیم کارت داشته که سیم کارت از نوع mini درون آن قرار می گیرد. با اتصال سیم کارت، این ماژول قادر خواهد بود که همانند یک تلفن همراه، به شبکه مخابرات متصل شده و به ارسال دریافت پیامک، برقراری تماس تلفنی و اتصال به اینترنت بپردازد. ماژول SIM800L دارای دو پایه سریال، RX و TX جهت دریافت فرمان و ارسال داده است. این ماژول همچنین بر روی خود پایه های اتصال میکروفون و بلندگو جهت برقراری تماس تلفنی است.

ماژول سیم کارت Sim800L - دیجی اسپارک

این ماژول در محدوده فرکانسی ۸۵۰/۹۰۰/۱۸۰۰/۱۹۰۰ فعال است. بنابراین، بدون هیچ مشکلی در ایران قابل استفاده خواهد بود. از طرفی دیگر، این ماژول ها به هیچ عنوان وارد طرح رجیستری نشده و بدون نیاز به فعال سازی آن در سامانه همتا، می توان با خیالی آسوده در پروژه های کنترل از راه دور، از این ماژول استفاده نمود.

 


اتصالات Sim800l به برد STM32


برای راه اندازی ماژول Sim800l نیاز به ولتاژ بین ۳٫۷ تا ۴٫۲ ولت و جریان ۲ آمپر است. از این رو برای تغذیه Sim800l از ماژول کاهنده LM2596 به همراه یک آداپتور ۱۲ ولت ۲ آمپر استفاده شده است. توجه داشته باشید که بایستی قبل از اتصال ماژول کاهنده به Sim800l با استفاده از مولتی ترن موجود بر روی ماژول کاهنده، ولتاژ کاری آن را بین ۳٫۷ تا ۴٫۲ ولت تنظیم کنید.  اتصالات Sim800l به برد STM32 بصورت زیر است.

شماتیک اتصالات Sim800l به STM32 - دیجی اسپارک

 


پیکربندی میکروکنترلر STM32


پس از ساخت پروژه Sim800l به برد STM32 در نرم افزار STM32CubeMX مطابق بخش اول آموزش میکروکنترلر های STM32 بخش های RCC و SYS را تنظیم کنید. سپس یکی از USART ای میکروکنترلر را فعال کرده و باودریت آن را بر روی ۹۶۰۰ تنظیم کنید. سپس وارد بخش NVIC  Setting شد و وقفه USAR را فعال کنید. در صورتی ک با بخش USART میکروکنترلر های STM32 آشنایی ندارید. بخش سوم و بخش چهارم آموزش میکروکنترلر های STM32 را مطالعه کنید. سپس بایستی وارد بخش FREERTOS شده و گزینه interface را بر روی CMSS_V1 تنظیم کنید. پس از آن در بخش Config Parameter گزینه TOTAL_HEAP_SIZE را پیدا کنید. و مقدار آن را به ۸۱۹۲ Byes تغییر دهید. در آموزش آشنایی با سیستم های بلادرنگ مختصر توضیحاتی دربار سیستم عامل freeRTOS داد شد است. کتابخانه ای که جلوتر به شما معرفی خواهد شد. از ماژول های GSM هم خانواده Sim800l مانند Sim800c نیز پشتیبانی میکند. ب همین دلیل باید یکی از پایه های میکروکنترلر را بعنوان خروجی تعریف کنید. و لیبل “GSM_KEY” را  برای آن قرار دهید. برای درک بهتر این مطلب به تصویر زیر توجه کنید.

پیکربندی میکروکنترلر STM32 - دیجی اسپارک

 

سپس از صفحه Clock Configuration فرکانس کاری میکروکنترلر را بر روی ۷۲ مگاهرتز تنظیم کنید. سپس وارد صفحه ی Project Manager شوید. پس از انتخاب نام و IDE برای پروژه مقدار گزینه های Minimum Heap Size و Maximum Stack Size را بر روی ۰x400 تنظیم کنید. سپس در بخش Code Generator در قسمت Generated files تیک مربوط به گزینه Generate peripheral initialization as a pair of ‘.c/.h’ files per pripheral را بزنید.

stm32cubemx Setting

 

سپس وارد قسمت Advanced Settings شده و در بخش Driver Selector بر روی گزینه USART کلیک کرده و آن را از HAL به LL تغییر دهید. و سپس بر روی گزینه GENERATE CODE کلیک کرده و وارد نرم افزار KEIL شوید.

STM32 Cube Mx Advanced settingg

 


کدنویسی در نرم افزار KEIL


ابتدا از GSM را از این لینک دانلود کنید. سپس کتابخانه را به پروژه اضافه کنید. در صورتی که با نحوه اضافه کردن کتابخانه به پروژه آشنا نیستید. آموزش اضافه کردن کتابخانه به پروژه های STM32 را مطالعه کنید. سپس بایستی وارد فایل gsmConfig.h شده و شمار USART تعریف شده را همانند کد زیر در این فایل تعریف کنید.

سپس وارد فایل stm32f3xx_it.c شده ابتدا بایستی کتابخانه gsm.h را به ابتدای این فایل اضافه کنید. و تابع void USART1_IRQHandler(void) را پیدا کنید. سپس دستور gsm_at_rxCallback() را همانند کد زیر داخل این تابع بنویسید.

در این پروژه از freeRTOS استفاده شده است. به همین دلیل بجای برنامه نویسی در فایل main.c بایستی کد خود را داخل فایل freertos.c بنویسید. تابع زیر را در این فایل پیدا کنید.

برای راه اندازی ماژول Sim800l به برد STM32 ابتدا بایستی کتابخانه gsm.h را به ابتدای فایل freertos.c اضافه کنید. سپس دستورات زیر را به تابع بالا قبل از حلقه for اضافه کنید.

دستور اول برای تنظیمات مربوط به ماژول است. تنظیماتی از جمله Task بخش مربوط به freeRTOS و اولویت Task و … دستور بعدی مدت زمان مشخصی را برای وارد شبکه شدن ماژول صبر می‌کند. در ادامه کد زیر را قبل از تابع معرفی شده اضافه کنید.

در آخر بایستی برنامه را کامپایل کرده و بر روی برد Bluepill پروگرام کنید. در صورتی که با نحوه پروگرام کردن میکروکنترلر های Stm32 آشنا نیستید. لطفا بخش اول آموزش های میکروکنترلر Stm32 را مطالعه نمایید.

 


نحوه عملکرد پروژه 


زمانی که برق مآژول Sim800l متصل می‌شود. در صورتی که وضعیت تغذیه و آنتن دهی مناسب باشد. ماژول پس از گذشت ۵ تا ۱۰ ثانیه وارد شبکه شده و آماده کار می‌باشد. برای این که سیستم منتظر بماند تا ماژول وارد شبکه شود از دستور gsm_waitForRegister استاده شده است. اگر مدت زمان طولانی در این دستور تعریف کنید و ماژول قبل از به پایان رسیدن زمان مشخص شده وارد شبکه شود. برنامه از این دستور عبور می‌کند و زمانی بی مورد تلف نمی‌شود. در ادامه زمانی که ماژول پیامکی دریافت کند. برنامه وارد فایل gsmCallback.h شده و تابع void gsm_callback_newMsg(char *number, Gsm_Time_t time, char *msg) اجرا می‌کند. به دلیل این که این تابع از نوع __weak تعریف شده بود. قابلیت انتقال به فایل های دیگر پروژه را دارد. ما نیز این تابع را به فایل freertos.c منتقل کردیم. داخل این تابع ۴ شرط برای ۴ خروجی تعریف شده قرار دارد. برای مثال با پیامک کلمه “out1” به شماره سیمکارت داخل ماژول Sim800l خروجی مربوطه روشن شده و پیامکی حاوی متن “OUTPUT 1 status changed” برای شماره فرستنده ارسال می‌شود.

 


جمع بندی


ماژول Sim800l از محبوب ترین ماژول های GSM موجود در بازار است. که به دلیل هزینه کم و امکانات زیاد، بسیار مورد توجه قرار گرفته است. در این آموزش پس از شناخت ماژول Sim800l به معرفی مداری کاربردی برای تغذیه ماژول Sim800l و اتصال آن به میکروکنترلر Stm32 پرداختیم. سپس نحوه پیکربندی پایه های میکروکنترلر Stm32 در نرم افزار STM32CubeMX توضیح داده شد. در ادامه کتابخانه ای بسیار کاربردی برای برقراری ارتباط بین میکروکنترلر Stm32 و ماژول Sm800l معرفی شد. سپس کد مربوط به دریافت و ارسال پیام با استفاده از کتابخانه معرفی شده، مورد بررسی قرار گرفت.

 


لوازم مورد نیاز


 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.

 

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

علی زاهدی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۸ دیدگاه

    • سلام
      بله، LED موجود بر روی ماژول Sim800l به میکروکنترلر کاری ندارد. در صورت دریافت ولتاژ و جریان و آنتن دهی مناسب وارد شبکه شده و وضعیت چشمک زدن LED متفاوت میشود.

  • سلام ممنون از پروژه خوبی که قرار دادین. برای خاموش کردن خروجی ها چیکار میشه کرد؟ و اینکه بخوایم مطلع شیم الان کدوم خروجی در چه وضعیت قرار داره چطور؟

    • با سلام از توجه شما سپاسگزارم.
      اگر به کد پروژه توجه کنید. دستور Toggle برای پایه ها نوشته شده است. پس با هر بار ارسال پیامک وضعیت خروجی تغییر میکند. در صورتی که روشن باشد خاموش میشود و در صورتی که خاموش باشد روشن میشود. برای خواندن وضعیت پایه ها میتوانید متغیری تعریف کنید و همزمان با تغییر وضعیت پایه مقدار متغیر را نیز تغییر دهید. سپس در زمان ارسال پاسخ به سمت موبایل مقدار آن متغیر را ارسال کنید.

  • با عرض سلام . بنده از کیل ورژن ۴ استفاده می کنم درتنظیمات کیوب در Advanced settings گزینه LL در usart1 وجود ندارد فقط hal می باشد. طبق گفته شما قسمت Advanced Settings شده و در بخش Driver Selector بر روی گزینه USART کلیک کرده و آن را از HAL به LL تغییر دهید.

    • باسلام
      ورژن نرم افزار KEIL مشکلی ایجاد نمی‌کند. در صورتی که مسیر گفته شده را به درستی طی کنید. و بر روی گزینه HAL جلوی بخش USART کلیک کنید. گزنیه LL را مشاهده خواهید کرد.

  • بسیار ممنونم درست شد. جناب مهندس امکانش هست یه توضیح مختصری راجع به اینکه اگر بخواهم یه تسک دیگه اضافه کنم مثلا خواندن دما باید در همین صفحه freertos یه تابع جدید درست کنم و مشابه دیفالت تسک انجام دهم؟

    • با سلام
      بزودی آموزش نحوه راه اندازی سیستم عامل FreeRTOS بر روی میکروکنترلر های STM32 را منتشر میکنم.