آردوینو پروژه های آردوینو

ارسال و دریافت sms با شیلد sim900a آردوینو Arduino

آموزش راه اندازی شیلد Sim800C برد آردوینو - دیجی اسپارک
نوشته شده توسط علیرضا قربانی

آموزش ارسال و دریافت sms با استفاده از شیلد sim900a  آردوینو

ماژول sim900a یکی از معروف‌ترین ماژول‌های gsm/gprs با هسته پردازشی بسیار قوی AMR926EJ-S می‌باشد. توسط این ماژول میتوان عمیات برقرای تماس،ارسال و دریافت اس‌ام‌اس ، ارسال فکس و هچنین نبادل اطلاعات با اینترنت را انجام داد.از طریق کنترل این ماژول می توانید در هر جای کره زمین که امواج موبایل موجود می باشد دستگاه های خود را کنترل و به تبادل اطلاعات بپردازید.در ادامه این مطلب با مرجع تخصصی آردوینو ،دیجی اسپارک همراه باشید.

شیلد sim900a با تمامی آردوینوهای استانداز سازگار بوده و می‌توان آن راه بر روی آردوینوهای استتاندار قرار داد. این شیلد را می‌توان به وسیله‌ی‌ پروتکل سریال به آردوینو متصل نمود و  توسط دستورات AT Command  کنترل نمود.

نمایی از شیلد sim900a

ویژگی شیلد sim900a

  •          پشتیبانی از دو باند ۹۰۰ و ۱۸۰۰ مگاهرتز
  •          GPRS  کلاس ۸/۱۰
  •          ایستگاه موبایل  GPRS  کلاس B
  •          مطابق با GSM phase 2/2+
  •          دارای جک اسپیکر و میکروفون
  •          کنترل از طریق AT Command
  •          جریان مصرفی بسیار پایین در حدود ۱٫۵ میلی‌آمپر در حالت خواب
  •          کد کننده‌های صدا Half rate (HR) ,Full rate (FR) ,Enhanced Full rate (EFR)
  •          عمل کرد هندس فری AMR ,Half rate (HR),Full rate (FR)
  • ۱۲ عدد  GPIO  به همراه ۲عدد pwm و ۱ عدد

 

قطعات به کار برده شده شیلد sim900a

aaaa

  • Power select –انتخاب تغذیه ماژول که از ولتاژ آردوینو استفاده کند یا ولتاژ خارجی
  • Power jack – جک تغدیه اتصال به ۴٫۸ الی ۵ ولت
  • Antenna interface – اتصال به آنتن خارجی
  • Serial port select – تنظیم استفاده از پورت سریال نرم‌افزاری یا سخت افزاری
  • Hardware Serial – D0/D1 of Arduino/Seeeduino (منظور همان ارتباط سریال معمولی است که به وسیله پین شماره ۰ و ۱ انجام می‌شود.)
  • Software serial – D7/D8 of Arduino/Seeeduino only (منظور ارتباط سریالی است که به وسیله سایر پین‌های دیجیتال آردوینو انجام می‌شود)
  • Status LED – هنگام روشن بودن بودن ماژول این چراغ روشن می‌شود
  • Net light – هنگامی که ماژول به اینترنت متصل شود این چراغ روشن می‌شود
  • UART of SIM900 – UART پین‌های
  • Microphone – میکروفون
  • Speaker اسپیکر-
  • GPIO,PWM and ADC of SIM900 – GPIO,PWM and ADC pins breakout of SIM900
  • Power key – سوئیچ تغذیه

 

سخت افزار مورد نیاز

آردوینو Uno
شیلد sim900a

پین‌هدر نری

LED

 

آماده‌سازی شیلد sim900a

در ابتدا پین‌هدر را بر روی شیلد sim900a آردوینو لحیم کنید و سپس شیلد را بر روی آردوینو Uno قرار دهید.

نمایی از شیلد sim900a قرار گرفته بر روی آردوینو Uno

نمایی از شیلد sim900a قرار گرفته بر روی آردوینو Uno

 

در هنگامی که شما  shield sim900a را خریداری می‌کنید ، جامپر مربوط به  تنظیم سریال سخت افزاری یا نرم‌افزاری همانند حالت زیر می‌باشد:

آموزش ماژول sim900a آردوینو

وضعیت جامپر در هنگام خرید

 

اکنون میابست جامپر را جدا کرده و در وضعیت زیر قرار دهید:

آموزش ماژول sim900a آردوینو

وضعیت جامپر بعد از تغییرات

 

هم اکنون کتابخانه‌ی شیلد sim900a  را از لینک زیر دانلود کنید.این کتابخانه توسط تیم تخصصی دیجی اسپارک اصلاح شده است و  فقط برای این شیلد تست شده است .این کتابخانه از دو پین شماره ۷ و ۸  به منظور ارتباط سریال نرم‌افزاری با آردوینو استفاده می‌کند.

دانلود کتابخانه shiled GSM sim900a arduino

 

معرفی توابع به کار  رفته شده در این پروژه

برای اینکه‌ بتوانید پیام‌ها را در این ماژول دریافت کنید باید حافظه اس‌ام‌اس سیم‌ کارت خود را خالی کنید‌ ، زیرا سیم‌کارت شما قابلیت ذخیره ۲۰ اس‌ام‌اس را دارد ، پس باید حافظه سیم‌کارت خود را خالی کنید.برای دیلیت اس‌ام‌اس ها باید از تابع فوق استفاده کنید. position شماره‌‌ی خانه‌ی حافظه سیم کارت می‌باشد که عددی بین ۱ الی ۲۰ می‌باشد.این تابع در صورتی که با موفقیت اس‌ام‌اس مورد نظر را حذف کند مقدار ۱ و در غیر این صورت مقدار ۰ را بر می‌گرداند.

مثال: در این مثال تمام حافظه  ‌اس‌ام‌اس‌های سیم کارت را پاک می‌کند.

 

به وسیله‌ی این تابع می‌توان پیامکی به شماره مورد نظر ارسال کنیم. به جای آرگمان اول شماره تلفنی که میخواهیم به آن اس‌ام‌اس ارسال کنیم و به جای آرگمان دوم متن ‌اس‌ام‌اس قرار می‌گیرد.این تابع در صورتی که عملیات ارسال موفقیت‌آمیز بود مقدار ۱ و در غیر‌اینصورت مقدار ۰ را برمی‌گرداند.

مثال:در این مثال  به شماره +۹۸۹۱۳۶۹***** یک پیام حاوی متن hi this is a test from gsm shield  ارسال می‌شود.

تابع فوق دارای یک اورلود دیگر می‌باشد که به وسیله‌ی آن می‌توانید به شماره‌ی ذخیره شده در حافظه سیم‌کارت یک پیامک ارسال کنید . این تابع به صورت زیر می‌باشد:

 

به جای آرگمان sim_phonebook_position موقعیت شماره موردنظر موجود د حافظه سیم‌کارت قرار می‌گیرد.( این عدد بین ۱ الی ۲۰ می‌باشد). همچنین به‌جای آرگمان دوم متن پیام قرار می‌گیرد.

مثال: در این مثال به شماره‌ای که در خانه‌ی شماره ۱ سیم‌کارت ذخیره شده ، پیامی حاوی متن hi this is a test from gsm shield ارسال می‌کنیم.

 

به وسیله‌ی این تابع متوجه می‌شویم که ‌اس‌ام‌اسی با وضعیت مورد نظر ما وجود دارد یا نه. required_statusمی‌تواند دارای مقادیر زیر باشد:

SMS_UNREAD – اس‌ام‌اس خوانده نشده

SMS_READ – اس‌ام‌‌اس خوانده شده

SMS_ALL – تمام اس‌ام‌اس‌های خوانده شده

این تابع در صورتی که اس‌ام‌اسی با وضعیت مورد نظر نا وجود نداشته باشد مقدار ۰ را  برمی‌گرداند.همچنین در صورتی که ‌اس‌ام‌اسی با وضعیت مورد نظر ما وجود داشته باشد مقداری بین ۱ الی ۲۰ ( این مقدار مشخص کننده موقعیت ‌اس‌ام‌اس در سیم‌کارت می‌باشد) بر می‌گرداند. اگر قبل از رسیدن به این تابع پیامکی دریافت شود ، پیام در وضعیت SMS_UNREAD قرار می‌گیرد ولی به محض این‌که این تابع  فراخوانی شود پیامک دریافت شده در وضعیت خوانده شده قرار می‌گیرد.

به وسیله‌ی این تابع می‌توان ‌اس‌ام‌اسی را در حافظه‌ی مشخص سیم‌کارت بخوانیم.

position:شماره خانه‌ی حافظه‌ی سیم کارت (عددی بین ۱ الی ۲۰)

phone_number: اشاره گری است که شماره فردی که اس‌ام‌اس ارسال کرده است در آن ریخته می‌شود.

SMS_text :اشاره‌گری است که متن پیام در آن ریخته می‌شود.

max_SMS_len :حداکثر تعدادی کاراکتری از اس‌ام ‌اس است که درون SMS_text ریخته می‌شود.

 

مثال:

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

 

پروژه

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

 

اتصالات:

شیلد gsm مستقیم بر روی برد آردوینو uno قرار می‌گیرد

یک عدد  تاج سوییچ به صورت پول‌آپ داخلی به پین شماره ۲ آردوینو  متصل می‌شود.

تذکر: در این پروژه برای تشخیص فشرده شدن کلید از کتابخانه دیبانسینگ (Deboouncing) استفاده  شده است که می‌توانید آموزش آن را در لینک زیر مشاهده کنید:

آموزش دیبانسنگ کلید در آردوینو

 

کدهای پروژه

کد‌های زیر را بر روی آردوینو آپلود کنید سپس پس از آپلود شدن کد کلیدی که در تصویر زیر مشخص شده است فشار دهید:

 

آموزش ماژول sim900a آردوینو

کلیدی که پس از آپلود برنامه باید فشرده شود

 

پس ازفشرده شدن کلید باید LED بر روی شیلد روشن شود.

آموزش ماژول sim900a آردوینو

مکان LED

 

پس از عملیات فوق حدود یک دقیقه زمان می‌برد که شیلد sim900 فعال شود  .در صورتی که مراحل را به درستی انجام داده باشید ، بر روی سریال مانیتور عبارت زیر را مشاهده می‌کنید:

آموزش ماژول sim900a آردوینو

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

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

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

۵۱ دیدگاه

  • با سلام
    من داخل این پروژه به یه مشکل بر خوردم
    من از این شید برای راه اندازی رله استفاده میکنم ولی نمی تونم از تابع DeleteSMS استفاده کنم میشه داخل پروژه از این تابع هم استفاده کنید

  • سلام
    یه سوال داشتم من از این پروژه برای کنترل وسایل برقی استفاده می کنم فقط مشکل اینجاست که وقتی آردوینو از طریق پورت USB به لپتاپ وصل هست و داخل نرم افزار آردوینو هستم و سریال مانیتور هم بازه برنامه به خوبی کار میکنه و SMS دریافت میکنه و سایل را کنترل می کنه ولی وقتی از طریق آدابتور وصل میکنم هیچ عکس العملی نشون نمیده
    جامپر را هم به حالت سخت افزاری و نرم افزاری تغیر دادم

  • با سلام و سپاس از آموزش بسیار خوبی که ارائه کردید فقط یه سئوالی داشتم ،
    برای بستن تابع ، مثل قطع ارتباط یا ارسال ۱ بار sms از چه دستوری باید استفاده کنیم؟
    در کلاس اصلی که در آردوئینو مطرح شده از تابع end استفاده شده.
    ممنونم از شما

  • سلام
    من از آردینو مگا استفاده می کنم.
    می خواستم بدونم که اگر من در این شیلد، پین ۲ رو به پین ۱۰ وصل کنم. و شاخه پین ۲ رو کج کنم که به آردینو وصل نشه، میتونم این شیلد رو وصل کنم و ازش استفاده کنم؟

  • سلام
    برای من متن های فارسی اصلا معلوم نیستن و عکسا خیلی بزرگن هر چی صفحه رو کوچیک بزرگ می کنم. میشه لطفا صفحه رو درست کنید؟ مرسی

  • سلام مرسی از سایتتون این مطلبتون بد نمایش داده میشه اگه میشه درستش کنید فکر کنم عکساتون بزگن
    مرسی

    • سلام
      خواستم بدونم اگه بخوایم از AT Command های دیگه مثلا چک کردن شارژ سیم کارت استفاده کنیم کجای کتابخانه های sim900 باید فراخوانیشون کنیم یا باید کل برنامه رو تغییر بدیم ممنون میشم جواب بدید.

        • سلام
          دوست عزیز دستورات AT مشخصه ولی من پروژه ام رو با کتابخانه های GSM.Zip بالا نوشته ام حالا این دستورات AT رو کجا باید اضافه کرد …GSM.h,SMS.h,SIM900.h ممنون میشم کمک بدید.

  • سلام
    من هنگامی که شیلد رو روی برد Arduino Uno نصب می کنم، و دکمه ی powerkey را به مدت یک یا دو ثانیه هم فشار می دم، ولی چراغ status LED بعد از چند بار چشمک زدن خاموش میشه.
    میشه راهنماییم کنید؟؟؟

    • با سلام
      ضمن تشکر از توجه شما، لطفا سیم کارت مورد استفاده با سیم کارت اپراتور دیگر جابجا کنید. سپس بررسی کنید.

  • سلام
    ببخشید امکانش هست کد فعال سازی gprs یا پروژه کاملش رو هم بزارید هر جا گشتم دنبال پروژش چیزی پیدا نکردم

    • با سلام
      ضمن تشکر از توجه شما، بررسی خواهیم کرد و در صورتی که نیاز عمده کاربران باشد، اقدام خواهیم کرد. شما میتوانید سوال‌هایی را که به هنگام کار با آن روبرو میشوید را از همین طریق اعلام کنید.

  • با سلام و سپاس از آموزش بسیار خوبی که ارائه کردید فقط یه سئوالی داشتم ،
    برای بستن تابع ، مثل قطع ارتباط یا ارسال ۱ بار sms از چه دستوری باید استفاده کنیم؟
    در کلاس اصلی که در آردوئینو مطرح شده از تابع end استفاده شده.
    ممنونم از شما

    • با سلام
      ضمن تشکر از توجه شما برای این منظور میتوانید از دستورات AT در کدها استفاده کنید. مانند این نمونه کد:
      void sendSMS(String number, String mess) {
      SIM900.print(“AT+CMGF=1\r”);
      delay(100);
      SIM900.println(“AT + CMGS = \”” + number + “\””);
      delay(100);
      SIM900.println(mess);
      delay(100);
      SIM900.println((char)26);
      delay(100);
      SIM900.println();
      delay(5000);
      }

  • if (v==”salam”){

    (sms.SendSMS(“09389817833”, “Arduino SMS”));

    }

    اینجا من یه چیزی تعریف کردم که هروقت یه پیام فرستادم به شیلد
    “salam”
    جواب رو arduino sma
    میفرسته
    حالا من یه سلام که میفرستم
    پشت سر هم جواب رو arduino sma برام میفرسته
    در صورتی که من میخوام یه بار برام جواب رو بفرسته
    به نظر شما با چه دستوری میتونم این کارو انجام بدم؟
    توی setupهم گذاشتم نشد
    توی loopهم میزارم پشت سر هم این پیام رو میفرستهarduino sma
    اگه امکان داره کمکم کنید

    با تشکر🌸🌸🌸

    • با سلام
      ضمن تشکر از توجه شما، برای این منظور از کد دستوری زیر استفاده کنید.
      void sendSMS(String number, String mess) {
      SIM900.print(“AT+CMGF=1\r”);
      delay(100);
      }

  • سلام با تشکر از سایت خوبتون
    من میخوام مقدار دمارو با سنسورlm35اندازه بگیرم بعد مقدار دمارو باsmsارسال کنم چطور میتونم این کارو انجام بدم
    متغیردما من از نوعfloatاست من توی متن پیام مجاز نیستم متغیر floatبزارم باید بریزم توی یه متغیر دگه از نوعcharبعد مقدار رو ارسال کنم
    چطور میتونم این کارو انجام بدم
    از تابعsprintfهم استفاده کردم نشد
    اگه امکانش هست راهنماییم کنید یک هفته است که چشام درومد انقد کد تست کردمدجواب نداد
    من این پروژه رو برای دانشگاه میخوام ترو خدا راهنماییم

    • با سلام
      ضمن تشکر از توجه شما، کاربر گرامی قبل از اینکه زمان را از دست بدهید، به دیجی اسپارک مراجعه کنید. پاسخ گویی و رفع عیب شما کاربران از خدمات دیجی اسپارک است. برای این منظور از کد زیر استفاده کنید
      char buffer[64];
      snprintf(buffer, sizeof buffer, “%f”, myFloat);

  • با سلام
    dtostrf(tempc,4,2,matn);
    مشکل من با این کد حل شد
    داخلhelpاردوینو خوندم که از توابع sprintfنمیشه برای متقیرfloatاستفاده کرد
    باید از dtostrfاین کد استفاده کنیم
    با تشکر از راهنمایی خوبتون 🌸🌸🌸🌷
    فقط یه سوال دیگه داشتم خدمت شما این کتاب خونه ای که شما دادیت فقط برای sim900است؟
    نمیش از sim800استفاده کنیم؟

    • سلام مجدد
      خواهش میکنم. در پاسخ به سوال شما، خیر نمیتوانید از این کتابخانه براى sim800 استفاده کنید. ماژول sim800 کتابخانه خاص خودش را دارد.

    • با سلام
      ضمن تشکر از توجه شما، به طور معمول کتابخانه‌های Sim900 و Sim908 یکسان هستند. برای اطلاع دقیق‌تر بایستی که این موضوع را تست کنید. سپس نتیجه را از همین طریق اعلام کنید تا دیگر کاربران هم استفاده کنند.

      • ممنون. فقط یه سوال دیگه داشتم. من از Arduino mega استفاده میکنم. پایه های rx , tx ماژول sim رو باید به کدوم پایه های arduino وصل کنم؟

        • سلام مجدد، خواهش می‌کنم. اگر از شیلد استفاده می‌کنید، نیازی به اتصال مجزا ندارید، شیلد را روی برد قرار دهید. اگر از ماژول استفاده می‌کنید، پایه tx ماژول به پین RX برد و پایه rx ماژول به پین TX برد باید متصل شوند.

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

    • با سلام
      ضمن تشکر از توجه شما، برای این منظور دستور AT را از طریق سریال مانیتور ارسال کنید. اگر پیغامی برگرداند، نشانه سالم بودن است.

  • وقتی وقفه خارجی آردینو رو به پایه RI شیلد وصل میکنم به محض دریافت اس ام اس با تماس فعال می شه ولی نمیشه از دستورات کتابخونه sim900 تو حلقه وقفه استفاده کرد چون عملا اجرا نمیشن و آردینو هنگ میکنه و دیگه بر نمی گرده به حلقه loop برنامه.

  • سلام.من با sim 800c وuno پیام فرستادم به این شکل که کد برنامه رو آپلود بعد سریال مانیتور میزدم و شماره در com میزدم وبه همین شکل متنی که میخواستم بفرستم و پیام ارسال میشد.
    حالا میخوام بدون نوشتن چیزی ازطرف من درcom این پیام ارسال شود.مثلا سنسور دما(lm35) قرار بدم وقتی دما از حد مشخص شده بالا رفت یه پیام به شماره من ارسال کند.راه اندازی سنسور دما رو هم بلدم .ممنون میشم اگر کمک کنید .پاسخ اینجا دنبال کنم ؟
    @meysam18888 تلگرام بنده

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