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

آموزش ارسال sms با شیلد sim800c آردوینو Arduino

آموزش ارسال sms با شیلد sim800c آردوینو Arduino
نوشته شده توسط علیرضا قربانی

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

تجهیزات مورد نیاز

آردوینو UNO

شیلد sim800c (خرید از فروشگاه)

منبع تغذیه یا آداپتور ۵ولت

سیم‌کارت میکرو

خصوصیات شیلد sim800c آردوینو

شیلد Sim800c  یک شیلد GSM/GPRS با قابلیت پشتیبانی از ۴ کانال ۸۵۰/۹۰۰/۱۸۰۰/۱۹۰۰ MHz  برای ارسال دیتا ، SMS,MMS  و برقرای تماس صوتی می‌باشد. این ماژول مخابراتی را می‌توان به عنوان یک تلفن همراه هوشمند در نظر گرفت که کاربران به وسیله‌ی آن می‌توانند دیتا را به درستی ارسال و دریافت کنند. این ماژول قابلیت پشتیبانی از تمام اپراتورهای مخابراتی را دارا می‌باشد.ارتباط سریال در سطح TTL  قابلیت راه‌اندازی این ماژول را با آردوینو و سایر سیستم‌های ۵ , ۳٫۳ , ۲٫۸۵  ولت DC  را امکان‌پذیر می‌کند. به وسیله تغییر وضعیت جامپر (D1 D0)  می‌توان ماژول را در وضعیت ارتباط سریال سخت افزاری و یا با تغییر جامپر (D8 D7)   می‌توان ماژول را در وضعیت ارتباط سریال نرم‌افزاری قرار داد. این شیلد قابلیت بروز شدن فریم ور  را توسط پورت USB  و پورت سریال دارا می‌باشد.از ویژگی‌های این شیلد می‌توان به موراد زیر اشاره نمود:

  • پشتیبانی از چهار باند ۸۵۰/۹۰۰/۱۸۰۰/۱۹۰۰ مگاهرتز
  • پروتکل ارتباطی سریال (UART)
  • کنترل از طریق AT Command و لایبرری
  • دارای جک هدست
  • اسلات سیم‌کارت میکرو
  • تغذیه ۵ ولت DC
  • جربان مصرفی حداکثر ۲ آمپر
  • دمای کاری منفی ۴۰ الی ۸۵ درجه سانتی‌گراد

قبل از شروع به کار باید شیلد Sim800C را برای کار با برد آردوینو Arduino Uno آماده کنید که در پست قبلی آموزش آن داده شده است. کتابخانه‌ای که توسط تیم فنی دانشجوکیت آماده شده است را از لینک زیر دانلود کنید و توسط آموزش زیر آن را  به نرم‌افزار آردوینو خود اضافه کنید.

*توجه داشته باشید در صورتی کتابخانه‌ دیگیری به نام GSM درون پوشه‌ی libraries نرم‌افزار آردینو وجود داشت حتما آن را حذف کنید و بعد از آن اقدام به نصب این کتابخانه کنید.

دانلود کتابخانه شیلد Sim800c برای آردوینو

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

این کتابخانه از پین ۷ و ۸ آردوینو به منظور برقراری ارتباط سریال نرم‌افزار با آردوینو استفاده می‌کند. همچنین از پین ۶ آردوینو به منظور ریست شیلد استفاده می‌شود . که می‌توانید با اتصال پین ۶ به یک کلید و GND ، امکان ریست کردن را به شیلد sim800c خود اضافه کنید.

معرفی توابع و کلاس‌های مربوط به ارسال اس ام اس

در ابتدای کار قبل از هر کاری میبایست کتابخانه GSM را به برنامه خود فراخوانی کنیم:

این کتابخانه پایه و  در برگیرنده‌ی تمامی کلاس‌ها و توابعی می‌باشد که برای راه‌اندازی یک ماژول یا شیلد GSM مورد نیاز است.شیلد sim800c دارای یک عدد مودم داخلی می‌باشد که به وسیله‌ی پورت  سریال و  AT command ها می‌توان آن را به سامانه‌ی جهانی ارتباطات همراه متصل نمود. این کتابخانه دستورات و کدنویسی‌های سطح پایین بین سیم کارت و مودم داخلی sim800 را از بین می‌برد و کدنویسی پیشرفته و سطح بالا را در اختیار شما قرار می‌دهد.کتابخانه GSM از ارتباط سریال نرم‌افزاری با  پین‌های شماره ۷ و ۸ آردوینو به منظور برقرای ارتباط بین شیلد (مودم ) و آردوینو استفاده می‌کند.

ممکن است سیم‌کارت شما دارای پین باشد (pin number) برای این منظور یک Preprocessor به نام PINNUMBER معرفی می‌کنیم و اگر سیم‌کارت دارای پین بود ،  شماره پین آن را داخل کوتیشن می‌نویسم و اگر هم دارای شماره پین نبود داخل کوتیشن چیزی نمی‌نویسیم و داخل آن را خالی میزاریم:

برای دسترسی به توابع  راه‌انداز شیلد sim800c و ارسال sms  باید از دو کلاس GSM و GSM_SMS دو آبجکت با نام‌های دلخواه بسازیم( ما از gsmAccess برای کلاس مربوط به راه‌اندازی شیلد و از نام sms  برای کلاس مربوط به GSM_SMS استفاده می‌کنیم).

یک آرایه از جنس char به اندازه‌ی ۱۳خانه به منظور نگه‌داری شماره‌‌ای که sms را ارسال می‌کند تعریف می‌کنیم( علت استفاده از سایز ۱۳به این منظور است که قرمت استاندار شماره‌ی کشور ایران دارای ۱۳ کاراکتر است مانند: ۹۸۹۱۳۶۹۸۷۱۲۱+) :

در Setup برنامه به منظور نمایش داده‌ها و وضعیت ماژول پورت سریال را باز می‌کنیم.

سپس یک متغیر از جنس  boolean به نام notConnected به منظور قرار دادن وضعیت اتصال درست شیلد به آردوینو ایجاد می‌کنیم و مقدار پیش‌فرض آن را برابر true  قرار می‌دهیم.تا زمانی که اتصال بین مودم و آردوینو به درستی برقرار نشده باشد این متغیر دارای مقدار true است و پس از برقراری اربتاط و شناختن سیم کارت و مودم  توسط آردوینو مقدار آن را به false تغییر می‌دهیم:

اکنون با فراخوانی  gsmAccess.begin()  و با وارد کردن PINNUMBER به عنوان آرگمان ورودی به شکل gsmAccess.begin(PINNUMBER)  به شبکه متصل می‌شویم.

تابع begin پس از فراخوانی مقادیر  ERROR, IDLE, CONNECTING, GSM_READY, GPRS_READY,TRANSPARENT_CONNECTED  را برمی‌گرداند.برای اصولی تر شدن کد نویسی و جلوگیری از خطاهای احتمالی درون برنامه تابع gsmAccess.begin(PINNUMBER)  را درون یک while می‌نویسیم و مرتبا ارتباط بین مودم و آردوینو را  تا زمانی که تابع begin مقدار GSM_READY  را برنگردانده باشد چک می‌کنیم:

بعد از برقرای ارتباط صحیح بین ماژول و سیم‌کارت ییغام‌ زیر را بر روی سریال مانیتور نرم‌افزار آردوینو نمایش می‌دهیم.

اکنون وارد loop برنامه می‌شویم و به طبق مطالب گفته شده در پایین شروع به کدنویسی می‌کنیم:

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

متغیری برای شمردن تعداد شمارش تعداد مقادیر دریافتی از بافر سریال تعریف می‌کنیم سپس وارد یک حلقه می‌شویم که به طور مداوم تکرار می‌شود.

سپس در صورتی که دیتایی در بافر سریال وجود داشته باشید ، آن را می‌خوانیم و درون متغیری از جنس char به نام inChar  میریزیم.

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

هنگامی که شما دکمه ENTER را فشار می‌دهید ، کاراکتر  ‘n’ ارسال می‌شود.پس باید برنامه را به گونه‌ای بنویسیم که پس از ارسال ‘n’ ،برنامه از حلقه دریافت شماره  یا متن پیام خارج شود و وارد مرحله‌ی بعدی شود،  پس کد زیر را می‌نویسیم:

هرگاه کاراکتر ENTER تشخیص داده شود ، مرحله‌ی پرکردن آرایه result به پایان می‌رسد و برنامه از تابع readSerial خارج می‌شود.

و هرگاه کاراکتری به غیر از ENTER وارد شد ، آن کاراکتر را به خانه‌های آرایه اضافه کند:

در loop برنامه آرایه‌ای از جنس char به نام remoteNumber  برای ذخیره شماره مقصد تعری می‌کینم.با صدا کردن تابع readSerial و دادن remoteNumber به عنوان آرگمان ورودی به آن ،هنگامی که تابع readSerial اجرا شود ، شماره مقصد دریافت می‌شود و درون remoteNumber ذخیره میشود.

اکنون یک آرایه از جنس  به  char به نام txtMsg برای ذخیره سازی متن پیام تعریف می‌کنیم که هر گاه تابع readSerial صدا زده شود  و آرایه‌ی txtMsg به عنوان آرگمان ورودی به آن داده شود ، متن پیام از کاربر دریافت می‌شود و درون txtMsg ذخیره می‌شود.

با صدا کردن sms.beginSMS() و  دادن remoteNumber  به عنوا آرگمان ورودی به آن ، شیلد را برای ارسال sms آماده می‌کنیم و  با صدا کردن تابع  sms.print()  و دادن متن پیام به عنوان آرگمان ورودی به آن ، پیام را ارسال می‌کنیم و با استفاده از تابع sms.endSMS() به عملیات ارسال خاتمه می‌بخشیم.

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

sim800c آردوینو

کلید فعال سازی شیلد Sim800C آردوینو

بعد از فشردن کلید نشان داده در تصویر فوق ،  باید LED نشان داده در تصویر زیر روشن شود.

شیلد sim800c آردوینو

اکنون سریال مانیتور نرم افزار را باز کنید و آن را بر روی Newline تنظیم کنید. سپس منتظر بمانید نا بر روی سریال مانیتور عبارت Enter a mobile number نمایش داده شود.شماره را وراد کنید و enter را بزنید. بعد از آن پیام Now, enter SMS content نمایش داده می‌شود که شما باید متن پیام را وارد کنید و enter را بزنید. که ما عبارت hi !this is a test را وارد می‌کنیم. اکنون پیام شما ارسال شده است و  بر روی گوشی شخص مقابل به نمایش در می‌آید.

کدهای برنامه:

 

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

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

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

۹ دیدگاه

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

  • باسلام
    ممنون بابت آموزشهایی که در سایتتون قرارمیدید.
    لطفا اگر امکانش هست، آموزش کامل کار با ماژول جی پی اس NEO-6M را هم در سایت قرار بدید. با تشکر

  • سلام.
    سپاس به خاطر وقتی که میزاری و این مطالب آموزنده رو قرار میدی.
    کارمونو راه میندازی خدا کارتو راه بندازه.
    if (inChar == ‘n’)
    {
    result[i] = ‘�’;
    Serial.flush();
    return 0;
    }
    این قسمت از کد برا من خطا میده. میگه result[i] خالیه…
    ممنون میشم راهنمایی کنی.

  • سلام امکانش هست این اموزش رو برای رزبری پای ۳ قرار بدین
    چون تو یک فروشگاه اینترنتی این کیت رو برای رزبری پای قرار داده بود

  • با سلام دوستان عزیز . من یک سوالی داشتم که ذهنم رو درگیر کرده و از دوستان اهل فن درخواست پاسخ دارم و آن اینکه آیا با در دست داشتن فقط و فقط سریال نامبر دستگاه گیرنده اس ام اس اعم از تلفن همراه ساعت هوشمند انگشتر هوشمند و .. میتوان از فوروارد دوباره همان اس ام اس از دستگاه دریافت کننده باخبر شد یا خیر . شدیدا نیاز به یاری و کمک اساتید اهل فن هستم ممنون

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

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

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