سخت افزار سیم کارت GSM - GPRS میکروکنترلر AVR

ارسال پیامک فارسی با استفاده از ماژول Sim800L و میکروکنترلر AVR

sim800l-farsi-sms-digispark-
نوشته شده توسط علی زاهدی

پیش از این آموزش راه اندازی ماژول Sim800L را در پست پروژه SMS کنترل با Sim800L و میکروکنترلر Atmega8 کنترل با پیامک، توضیح داده‌ایم. در این پست قصد داریم تا ارسال پیامک فارسی با استفاده از ماژول Sim800 و میکروکنترلر AVR را آموزش دهیم.

 


حالت های کاری ماژول Sim800L


برای ارسال و دریافت پیامک در ماژول Sim800L دو حالت کاری مشخص شده است که عبارتند از حالت Text و حالت PDU) PDU مخفف Protocol Data Unit می باشد). برای تعیین حالت کاری ماژول از دستور (AT+CMGF=(0 or 1 استفاده می شود. اگر برابر یک قرار بگیرد ماژول در حالت Text عمل میکند و اگر برابر با صفر قرار بگیرد ماژول در حالت PDU عمل خواهد کرد. در مدل های قدیمی ماژول های GSM برای ارسال پیامک فارسی باید ماژول در حالت PDU راه اندازی می شد. اما سری جدید ماژول هی شرکت SIMCOM مانند ماژول Sim800L این قابلیت را دارند که پیام های یونیکد یا UCS2 را بدون رمز گذاری PUD ارسال کنند و برای ارسال پیامک فارسی فقط کافی است Unicode ها را به رشته HEX تبدیل  کرده و سپس ارسال نمایید.

برای ترجمه ی متن مورد نظر خود به Unicode  می توانید از جدول زیر استفاده نموده و یا از برنامه موجود در لینک استفاده کنید.

farsi-unicode

 

اتصالات مدار

  • پایه ۷ میکروکنترلر به قطب مثبت ولتاژ ۵ ولت.
  • پایه ۸ میکروکنترلر به قطب منفی ولتاژ ۵ ولت.
  • پایه ۱۴ میکروکنترلر با استفاده از یک مقاومت به قطب مثبت و همچنین همانند تصویر به کلید متصل می شود.
  • پایه شماره ۲ میکروکنترلر به پایه TX ماژول.
  • پایه شماره ۳ میکروکنترلر به پایه RX ماژول.
  •  پایه VCC ماژول به قطب مثبت و همچنین پایه GND به قطب منفی متصل میشود.

اتصالات ماژول Sim800l ارسال پیامک فارسی - دیجی اسپارک

پیشنهاد می شود برای تامین ولتاژ میکروکنترلر و ماژول Sim800L  از ماژول مبدل تغذیه LM2596 استفاده نمایید. توجه داشته باشید که قبل از متصل کردن ولتاژ خروجی تغذیه به مدار آن را روی ۵ ولت تنظیم کنید.

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

  1. میکروکنترلر ATmega8
  2. ماژول GSM Sim800L
  3. ماژول مبدل تغذیه LM2596
  4. مقاومت ۱۰ کیلو اهم
  5. کلید فشاری Push Button

 


کد AVR در CodeVision


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

 

 


ارسال پیامک فارسی ماژول Sim800L


کتابخانه ها:

در ابتدا کتابخانه های مورد نیاز را به برنامه اضافه می کنیم.این کتابخانه ها عبارتند از:

mega8.h : برای دسترسی به رجیستر های میکروکنترلر Atmega8 باید این کتابخانه را به برنامه اضافه نمایید.

delay.h : این کتابخانه برای استفاده از تاخیر ها است که دو تابع ()delay_ms و ()delay_us داخل این کتابخانه قرار دارد.

stdio.h : تابع sprintf در این کتابخانه موجود است و برای پیکربندی رشته‌ها مورد استفاده قرار می‌گیرد.

در ادامه پایه شماره ۱۴ میکروکنترلر را با نام key معرفی شده است. سپس کد اسکی کاراکتر های enter ، ” و ctrl+z را با نام های مناسب تعریف شده. رشته ای با نام send برای ارسال دستورات از درگاه USART به ماژول Sim800L تعریف شده است.

 

تابع main

در تابع اصلی برنامه (main) ابتدا پایه شماره ۱۴ میکروکنترلر بعنوان ورودی معرفی شده است و درگاه USART میکرو فقط به صورت فرستنده فعال شده است. یک تاخیر ۱۲ ثانیه (برای مدت زمانی که نیاز است تا ماژول Sim800L وارد شبکه شود) بکار رفته است. سپس در حلقه بینهایت شرطی قرار داده شده که در زمان وصل بودن کلید متصل به پایه ۱۴ میکروکنترلر ، پیامک ارسال شود.

 

تنظیمات ماژول Sim800L

داخل شرط ابتدا با استفاده از دستور AT+CMGF=1 ماژول Sim800L را در حالت Text قرار داده و سپس با استفاده از دستور “AT+CSCS=”HEX نوع داده های ارسالی را به صورت HEX تعریف می کنیم. در ادامه با استفاده از دستور AT+CSMP=49,167,0,8 مقدار DCS صحیح (Schedule Data Coding) را برای پیام های Unicode مشخص می کنیم که مقدار ۰x08 می باشد. می توان این مقدار را با تغییر پارامتر چهارم دستور AT+CSMP به ‘۸’ تنظیم کنیم. با استفاده از دستور “*********AT+CMGS=“09 شماره ای که باید پیام برای آن ارسال شود را مشخص کرده و  با استفاده از دستور ()puts پیام تبدیل شده به مقدار HEX را به ماژول ارسال می کنیم و پس از آن برای ارسال شدن پیام، کد اسکی ۲۶ که معادل ctrl+z است را ارسال میکنیم. دستور (while(key==0 به این منظور نوشته شده است، که اگر کلید به صورت مداوم وصل باشد فقط یک بار دستورات داخل شرط اجرا شود و چند پیام متوالی ارسال نشود. توجه داشته باشید درهنگام پروگرام کردن کد روی میکروکنترلر AVR، فیوزبیت‌ها بر روی ۸ مگاهرتز تنظیم شود.

 

عملکرد مدار

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

ارسال SMS فارسی با ماژول SIm800l - دیجی اسپارک

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک و دانشجوکیت  و digispark  و  daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید. در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

علی زاهدی

دانشجو ی رشته الکترونیک،
عاشق یادگیری و به اشتراک گذاشتن اطلاعاتم هستم.

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

۱۰ دیدگاه

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

    • سلام،باتشکر از توجه شما
      بله چون باودریت ۹۶۰۰ هست این قابلیت هست که با کریستال داخلی راه اندازی بشه،و این که اگر با دقت متن رو مطالعه کنید، لینک اموزش دیگری داخل متن هست که در آن تنظیم کریستال موقع پروگرام کردن توضیح داده شده است.
      درخصوص بخش انتهایی هم، دقت داشته باشید که تمامی موارد در دیجی اسپارک به صورت کامل طی دو مرحله تست میشوند و زیر نظر تیم تحریریه منتشر می‌شوند. طبیعی است اگر جایی مشکلی مشاهده میکنید، به عنوان کاربری که از خدمات دیجی اسپارک استفاده می‌کند، در راستای رفع آن اطلاع رسانی کنید. اگر اینطور نیست، پس از حاشیه سازی خودداری کنید.

  • با سلام و احترام ممنون از برنامه ارسال اس ام اس میخاستم ۳۰ ثانیه بعد با شماره مورد نظر تماس بگیره ولی خیلی تلاش کردم متاسفانه نمیتونم جواب بگیرم ماژول سیم sim800l هست لطفا راهنماییم کنید sprintf(send,”ATD912XXXXXXX”,enter );
    اینرو ارسال میکنم اس میاد ولی تماس برقرار نمیشه
    میخاستم یه جوری باشه بتونم شماره تماسهای دیگری رو بدون وارد شدن داخل برنامه یا از طریق اس ام اس یا کی پد وارد کنم برای این برنامه خاصی ندارید ممنون از راهنماییهاتون

    • سلام، با تشکر از توجه شما
      فکر میکنم علت این که تماس برقرار نمی شود این است که، ابتدای شماره از ۰ یا +۹۸ را استفاده نکرده اید.
      و درخصوص این که شماره موبایل رو داخل برنامه وارد نکنید، میتونید زمانی که پیام را دریافت کردید داخل رشته ای ذخیره کنید، داخل این رشته از خانه ۲۳ تا ۳۶ شماره موبایل ارسال کننده ی پیام ذخیره می شود با استفاده از حلقه ی for شماره موبایل رو از رشته استخراج کنید و داخل رشته ی دیگری ذخیره کنید. با این روش هم میتوانید هم شماره موبایل رو شرط قرار بدین و هم میتونید با شماره ی ذخیزه شده تماس بگیرین.
      ;[for(i=23;i<36;i++)num[i-23]=receive[i