آردوینو سیم کارت GSM - GPRS پروژه های آردوینو

ارسال و دریافت 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

 

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

char DeleteSMS(byte position)

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

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

for(i=1;i<=20;i++)
       {
           sms.DeleteSMS(i);
       }

 

char SendSMS(byte *number_str, char *message_str)

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

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

if (sms.SendSMS("+9891369*****", "hi this is a test from gsm shield"))
   		{
   			Serial.println("nSMS sent OK.");
   		}
   		else
   		{
   			Serial.println("nError sending SMS.");
   		}

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

char SendSMS(byte sim_phonebook_position, char *message_str)

 

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

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

if (sms.SendSMS(1, “hi this is a test from gsm shield”))
   		{
   			Serial.println("nSMS sent OK.");
   		}
   		else
   		{
   			Serial.println("nError sending SMS.");
   		}

 

char IsSMSPresent(byte required_status)

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

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

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

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

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

char GetSMS(byte position, char *phone_number, char *SMS_text, byte max_SMS_len)

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

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

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

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

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

 

 

مثال:

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

GSM gsm;

char position;

char phone_num[20]; // array for the phone number string

char sms_text[100]; // array for the SMS text string

position = gsm.IsSMSPresent(SMS_UNREAD);

if (position) {

// there is new SMS => read it

gsm.GetGSM(position, phone_num, sms_text, 100);

Serial.println(“DEBUG SMS phone number: “, ۰);

Serial.println(phone_num, 0);

Serial.println(“rn SMS text: “);

Serial.println(sms_text);

}

 

پروژه

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

 

اتصالات شیلد Sim900a به آردوینو

شیلد gsm مستقیم بر روی برد آردوینو uno قرار می‌گیرد. یک عدد  تاج سوییچ به صورت پول‌آپ داخلی به پین شماره ۲ آردوینو  متصل می‌شود. تذکر: در این پروژه برای تشخیص فشرده شدن کلید از کتابخانه دیبانسینگ (Deboouncing) استفاده  شده است که می‌توانید آموزش آن را در لینک زیر مشاهده کنید. آموزش دیبانسنگ کلید در آردوینو

 

کد راه اندازی شیلد Sim900A

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

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

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

 

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

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

مکان LED

 

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

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

 

 

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

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

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

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

۷۱ دیدگاه

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

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

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

  • باسلم معلومه که واقعا کار کردی آفرین نه مثل حتی سایتهای خارجی که کپی می کنند.ممنون.

    • با سلام
      از توجه شما سپاسگزارم، تلاش ما در دیجی اسپارک ارتقاء سطح علمی کاربران است.

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

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

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

  • سلام،
    توابع این برنامه فقط برای شیلد کاربرد دارند؟
    نمی شه برای ماژول های جدا هم به کارشون برد؟

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

      • با سلام
        برای این موضوع باید At commandهای مربوط به ussd را در دیتاشیت مربوطه مطالعه کنید.

        • سلام
          دوست عزیز دستورات 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);

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

        • سلام مجدد، خواهش میکنم. لطفا متن خطا دریافتى در کامپایلر آردوینو را دقیقا کپى و ارسال کنید.

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

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

  • با عرض سلام و خسته نباشید، آیا امکان استفاده از این کتابخونه برای ماژول SIM908 وجود داره؟

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

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

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

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

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

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

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

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

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

    **************************************************************
    Arduino: 1.8.5 (Windows 10), Board: “Arduino/Genuino Uno”

    C:\Users\Amir\Documents\Arduino\sketch_oct22b\sketch_oct22b.ino: In function ‘void loop()’:

    C:\Users\Amir\Documents\Arduino\sketch_oct22b\sketch_oct22b.ino:78:70: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if (sms.SendSMS(“+9891317*****”, “hi this is a test from gsm shield”))

    ^

    C:\Users\Amir\Documents\Arduino\sketch_oct22b\sketch_oct22b.ino:78:70: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()’:

    (.text+0x0): multiple definition of `__vector_3′

    libraries\GSM\GSM3SoftSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()’:

    (.text+0x0): multiple definition of `__vector_5′

    libraries\GSM\GSM3SoftSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

    libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()’:

    (.text+0x0): multiple definition of `__vector_4′

    libraries\GSM\GSM3SoftSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    ********************************************

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

  • سلام: کد زیر رو برای پروژه ام نوشتم.منتها یهerorr میده نمیدونم بخاطر چیه؟
    لطفا اگر امکانش هست بگین مشکلش چیه؟خیلی هم عجله دارم.!!!
    باتشکر.
    email: m.ostovan95@gmail.com

    خطا:
    (((Arduino: 1.8.1 (Windows 10), Board: “Arduino/Genuino Uno”

    C:\Users\M.OSTO1\Desktop\GSM_GPRSLibrary_SMS\GSM_GPRSLibrary_SMS.ino:1:20: fatal error: SIM900.h: No such file or directory

    #include “SIM900.h”

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    )))
    برنامه:
    ((#include “SIM900.h”
    #include “Bounce2.h”
    #include
    #define BUTTON_PIN””
    #define BUTTON_PI””
    #define BUTTON_P””

    //If not used, is better to exclude the HTTP library,
    //for RAM saving.
    //If your sketch reboots itself proprably you have finished,
    //your memory available.
    //#include “inetGSM.h”

    //If you want to use the Arduino functions to manage SMS, uncomment the lines below.
    #include “sms.h”

    SMSGSM sms;
    Bounce debouncer=Bounce();
    Bounce debouncer1=Bounce();
    Bounce debouncer2=Bounce();
    int numdata;
    boolean started=false;
    char smsbuffer[160];
    char n[20];

    char sms_position;
    char phone_number[20];
    char sms_text[170];
    int i,k,j,l;
    int a ;

    void setup()
    {
    digitalWrite(9,HIGH);
    //sms_position == a;
    //ernal pull-up :
    pinMode(BUTTON_PIN,INPUT_PULLUP);
    pinMode(BUTTON_PI,INPUT_PULLUP);
    pinMode(BUTTON_P,INPUT_PULLUP);
    pinMode(4,OUTPUT);
    pinMode(9,OUTPUT);
    // After setting up the button, setup the Bounce instance :
    debouncer.attach(BUTTON_PIN);
    debouncer1.attach(BUTTON_PI);
    debouncer2.attach(BUTTON_P);
    debouncer.interval(50);

    // Setup the LED :

    Serial.begin(9600);

    if (gsm.begin(9600))
    {
    Serial.println(“nstatus=READY”);
    started=true;

    }

    else
    {

    Serial.println(“nstatus=IDLE”);
    }

    // if(started)
    // {
    //
    //}

    for(a=1;a<=20;a++)
    {
    sms.DeleteSMS(a);
    }
    // }

    };

    void loop()
    {
    //i == 0;
    debouncer.update();

    // Call code if Bounce fell (transition from HIGH to LOW) :
    if ( debouncer.fell() )
    {
    Serial.println("press");
    if(started)
    {
    if (sms.SendSMS("+989382666304", "no power"))
    {
    Serial.println("nSMS sent OK.");
    }
    else
    {
    Serial.println("nError sending SMS.");
    }
    }

    }
    debouncer1.update();
    if ( debouncer1.fell() )
    {
    Serial.println("press");
    if(started)
    {
    if (sms.SendSMS("+989382666304", "power"));

    {
    Serial.println("nSMS sent OK.");
    }
    }

    }

    if(started)
    {
    //Read if there are messages on SIM card and print them.
    sms_position=sms.IsSMSPresent(SMS_UNREAD);
    if (sms_position)
    {
    // read new SMS
    Serial.print("SMS postion:");
    Serial.println(sms_position,DEC);
    sms.GetSMS(sms_position, phone_number, sms_text, 100);
    // now we have phone number string in phone_num

    Serial.println(phone_number);
    // and SMS text in sms_text
    Serial.println(sms_text);
    if(!strcmp(sms_text,"on")){
    digitalWrite(4,HIGH);
    Serial.println("LED TURN ON");
    delay(5000);

    for(a=1;a<=5;a++)
    {
    sms.DeleteSMS(a);
    }
    // Serial.print("delete sam");

    //+ for(a=1;a<=5;a++)
    // {
    // sms.DeleteSMS(a);
    // }
    }

    if(!strcmp(sms_text,"of")){
    Serial.println("LED TURN OFF ");
    digitalWrite(4,LOW);
    delay(5000);

    //sms.DeleteSMS;
    Serial.print("delete sam");

    for(a=1;a<=5;a++)
    {
    sms.DeleteSMS(a);
    }
    // for(a=1;a<=5;a++)
    //{
    // sms.DeleteSMS(a);
    //}
    }
    else{
    digitalWrite(4,HIGH);

    for(a=1;a<=5;a++)
    {
    sms.DeleteSMS(a);
    }

    }
    // for(a=1;a<=50;a++)
    //{
    // sms.DeleteSMS(a);
    //}

    }

    //else
    {
    //Serial.println("NO NEW SMS,WAITTING");
    }
    debouncer2.update();
    if ( debouncer2.fell() ){
    Serial.println("press");
    i++;
    switch (i) {
    case 1:
    Serial.println("first");
    sms.SendSMS("+989382666304", " A");
    break;
    case 2:

    Serial.println("second");
    sms.SendSMS("+989382666304", " B");
    break;
    case 3:

    sms.SendSMS("+989382666304", "C ");
    // Serial.println("end");
    // delay(10000);
    // Serial.println("reset");
    break;
    case 4:
    sms.SendSMS("+989382666304", " D");
    break;
    case 5:
    sms.SendSMS("+989382666304", " E");
    digitalWrite(9,LOW);
    break;

    }
    i == 0;
    j == 0;
    k == 0;
    l == 0;
    }
    }
    //for(a=1;a<=10;a++)
    //{
    // sms.DeleteSMS(a);
    // }
    for(a=1;a<=10;a++)
    {
    sms.DeleteSMS(a);
    }
    }))

  • #include “SIM900.h”
    #include “Bounce2.h”
    #include
    #define BUTTON_PIN 3
    #define BUTTON_PI 1
    #define BUTTON_P 6

    //If not used, is better to exclude the HTTP library,
    //for RAM saving.
    //If your sketch reboots itself proprably you have finished,
    //your memory available.
    //#include “inetGSM.h”

    //If you want to use the Arduino functions to manage SMS, uncomment the lines below.
    #include “sms.h”

    SMSGSM sms;
    Bounce debouncer=Bounce();
    Bounce debouncer1=Bounce();
    Bounce debouncer2=Bounce();
    int numdata;
    boolean started=false;
    char smsbuffer[160];
    char n[20];

    char sms_position;
    char phone_number[20];
    char sms_text[170];
    int i,k,j,l;
    int a ;

    void setup()
    {
    digitalWrite(9,HIGH);
    //sms_position == a;
    //ernal pull-up :
    pinMode(BUTTON_PIN,INPUT_PULLUP);
    pinMode(BUTTON_PI,INPUT_PULLUP);
    pinMode(BUTTON_P,INPUT_PULLUP);
    pinMode(4,OUTPUT);
    pinMode(9,OUTPUT);
    // After setting up the button, setup the Bounce instance :
    debouncer.attach(BUTTON_PIN);
    debouncer1.attach(BUTTON_PI);
    debouncer2.attach(BUTTON_P);
    debouncer.interval(50);

    // Setup the LED :

    Serial.begin(9600);

    if (gsm.begin(9600))
    {
    Serial.println(“nstatus=READY”);
    started=true;

    }

    else
    {

    Serial.println(“nstatus=IDLE”);
    }

    // if(started)
    // {
    //
    //}

    for(a=1;a<=20;a++)
    {
    sms.DeleteSMS(a);
    }
    // }

    };

    void loop()
    {
    //i == 0;
    debouncer.update();

    // Call code if Bounce fell (transition from HIGH to LOW) :
    if ( debouncer.fell() )
    {
    Serial.println("press");
    if(started)
    {
    if (sms.SendSMS("+989382666304", "no power"))
    {
    Serial.println("nSMS sent OK.");
    }
    else
    {
    Serial.println("nError sending SMS.");
    }
    }

    }
    debouncer1.update();
    if ( debouncer1.fell() )
    {
    Serial.println("press");
    if(started)
    {
    if (sms.SendSMS("+989382666304", "power"));

    {
    Serial.println("nSMS sent OK.");
    }
    }

    }

    if(started)
    {
    //Read if there are messages on SIM card and print them.
    sms_position=sms.IsSMSPresent(SMS_UNREAD);
    if (sms_position)
    {
    // read new SMS
    Serial.print("SMS postion:");
    Serial.println(sms_position,DEC);
    sms.GetSMS(sms_position, phone_number, sms_text, 100);
    // now we have phone number string in phone_num

    Serial.println(phone_number);
    // and SMS text in sms_text
    Serial.println(sms_text);
    if(!strcmp(sms_text,"on")){
    digitalWrite(4,HIGH);
    Serial.println("LED TURN ON");
    delay(5000);

    for(a=1;a<=5;a++)
    {
    sms.DeleteSMS(a);
    }
    // Serial.print("delete sam");

    //+ for(a=1;a<=5;a++)
    // {
    // sms.DeleteSMS(a);
    // }
    }

    if(!strcmp(sms_text,"of")){
    Serial.println("LED TURN OFF ");
    digitalWrite(4,LOW);
    delay(5000);

    //sms.DeleteSMS;
    Serial.print("delete sam");

    for(a=1;a<=5;a++)
    {
    sms.DeleteSMS(a);
    }
    // for(a=1;a<=5;a++)
    //{
    // sms.DeleteSMS(a);
    //}
    }
    else{
    digitalWrite(4,HIGH);

    for(a=1;a<=5;a++)
    {
    sms.DeleteSMS(a);
    }

    }
    // for(a=1;a<=50;a++)
    //{
    // sms.DeleteSMS(a);
    //}

    }

    //else
    {
    //Serial.println("NO NEW SMS,WAITTING");
    }
    debouncer2.update();
    if ( debouncer2.fell() ){
    Serial.println("press");
    i++;
    switch (i) {
    case 1:
    Serial.println("first");
    sms.SendSMS("+989382666304", " A");
    break;
    case 2:

    Serial.println("second");
    sms.SendSMS("+989382666304", " B");
    break;
    case 3:

    sms.SendSMS("+989382666304", "C ");
    // Serial.println("end");
    // delay(10000);
    // Serial.println("reset");
    break;
    case 4:
    sms.SendSMS("+989382666304", " D");
    break;
    case 5:
    sms.SendSMS("+989382666304", " E");
    digitalWrite(9,LOW);
    break;

    }
    i == 0;
    j == 0;
    k == 0;
    l == 0;
    }
    }
    //for(a=1;a<=10;a++)
    //{
    // sms.DeleteSMS(a);
    // }
    for(a=1;a<=10;a++)
    {
    sms.DeleteSMS(a);
    }
    }

  • با سلام
    من همین چیزایی که توی سایت فرمودین انجام دادم و بعد از فشرده شدن کلید nstatus=READY ظاهر میشه اما هیچ اسمسی ارسال نمیشه و SMS postion:-2 رو همش می نویسه مشکل کجاست ؟ لطفا راهنمایی کنید
    باتشکر فراوان بابت زحماتتون و سایت عالیتون

    • با سلام و تشکر ازشما
      عددهای position در محدوده ۱ تا ۲۰ هستند و عدد منفی وجود ندارد. ممکن است مواردی را اشتباه انجام داده باشید. از دیگر کاربران که در این زمینه تجربه عملی دارند، تقاضا دارم تا در این بحث شرکت کنند.

  • اگه ممکنه برای ارسال صدا یا تصویر از طریق ماژول هایی مثل nrf یا esp راهنمایی کنید. یا از هر طریق دیگری بدون استفاده از سیمکارت.

  • این پیغام چیه که موقع کامپایل برای من اومد؟
    خیلی ممنون میشم جواب بدید
    C:\Users\rad&beh\Desktop\Documents\Arduino\Gsmsh\Gsmsh.ino: In function ‘void loop()’:

    C:\Users\rad&beh\Desktop\Documents\Arduino\Gsmsh\Gsmsh.ino:78:70: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if (sms.SendSMS(“+9891317*****”, “hi this is a test from gsm shield”))

    ^

    C:\Users\rad&beh\Desktop\Documents\Arduino\Gsmsh\Gsmsh.ino:78:70: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:148:41: warning: character constant too long for its type

    p_char = strchr((char *)(gsm.comm_buf),’+CMGL’);

    ^

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp: In member function ‘boolean SIMCOM900::readCall(char*, int)’:

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:220:42: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    _tf.getString(“”, “\””, number, nlength);

    ^

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:220:42: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp: In member function ‘int SIMCOM900::getCCI(char*)’:

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:304:49: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    _tf.getString(“AT+QCCID\r\r\r\n”,”\r\n”,cci, 21);

    ^

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:304:49: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp: In member function ‘int SIMCOM900::getIMEI(char*)’:

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:329:38: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    _tf.getString(“\r\n”,”\r\n”,imei, 16);

    ^

    C:\Users\rad&beh\Desktop\Documents\Arduino\libraries\GSMSHIELD\SIM900.cpp:329:38: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

  • سلام
    من از شیلد اردینو سیم ۹۰۰ استفاده می کنیم ولی به سیم کارتم وصل نمیشه ومیشه راجع به اتصالات این مدار بیشتر توضیح بدید ممنون

  • سلام
    ممنون از سایت خوبتون
    من چند بار برنامه رو تست کردم و جواب گرفتم ولی الان LEDهای روی شیلد روشن نمیشه status&netlight میشه بگید مشکل از کجاست