معرفی و راه‌اندازی ماژول GSM با آردوینو

دوشنبه, 24 اسفند 1394 16:14
این مورد را ارزیابی کنید
(17 رای‌ها)

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

قطعات مورد نیاز

 

برد آردوینو و کابل رابط 

1 عدد

ماژول SIM800

1 عدد

رگولاتور LM2596

1 عدد

منبع تغذیه

1 عدد

مقاومت 10KΩ

3 عدد

خازن 1000µF

1 عدد

خازن 100nF

1 عدد

باتری LiPo

1 عدد

بردبورد

1 عدد

سیم جامپر

1 بسته

 


معرفی ماژول GSM

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

راه اندازی ماژول GSM با آردوینو

این ماژول از سیستم GSM برای برقراری ارتباط استفاده می‌کند. GSM یا Global System for Mobile Communication یک استاندارد مخابراتی است که از پروتکل نسل دوم موبایل یا 2G استفاده می‌کند. این استاندارد برای اولین بار امکان برقراری ارتباط موبایل به روش دیجیتال را معرفی کرد. از طریق GSM اتصال به اینترنت با موبایل به روش‌های GPRS و EDGE فراهم شد. سیستم نسل دوم گسترده‌ترین روش مخابراتی موجود برای موبایل در جهان است. به همین دلیل امکان دسترسی به شبکه از طریق آن بسیار بیشتر از نسل‌های بعدی است.

ماژول SIM800 قابلیت‌های زیر را دارد:

  • برقراری و دریافت تماس صوتی
  • دریافت و ارسال پیامک
  • قابلیت کار در تمام شبکه‌های GSM بر پایه 2G
  • استفاده از ۴ باند فرکانسی 800، 900، 1800 و 1900 مگاهرتز
  • امکان برقراری ارتباط GPRS
  • امکان برقراری ارتباط FM
  • ارتباط سریال با میکروکنترلر با سرعت 1200bps تا 115200bp
  • پشتیبانی از دستورات AT
  • پشتیبانی از سیم‌کارت‌های ابعاد میکرو

ماژول SIM800 از چند بخش کلی تشکیل شده است. این ماژول یک برد ١ اینچی است که بر روی آن یک تراشه GSM قرار گرفته است. در دو طرف ماژول تعدادی جای پین قرار دارد که تغذیه، برقراری ارتباط با میکروکنترلر، ارتباط با اجزای جانبی و آنتن به این قسمت متصل می‌شود. زمانی که ماژول را تهیه می‌کنید معمولا قسمتهای آن جدا از هم است و احتمالا لازم دارید تا پین‌های هدر و آنتن را به آن لحیم کنید.

راه اندازی ماژول GSM با آردوینو

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

راه اندازی ماژول GSM با آردوینو

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

راه اندازی ماژول GSM با آردوینو

تغذیه ماژول SIM800 اهمیت زیادی دارد. ولتاژ کاری برای این ماژول 3.4V تا 4.4V است و بنابراین باتری LiPo گزینه مناسبی برای تغذیه آن است. اگر تغذیه ماژول به طور مناسبی تامین نشود، ممکن است کار نکند یا باعث شود که آردوینو آسیب ببیند. ماژول GSM در شرایط مختلف مصرف برق متفاوتی دارد. برای مثال در حالت Stand By حدود 18mA و در حالت تماس صوتی حدود 216mA جریان مصرف می‌کند. با این وجود این ماژول می‌تواند در شرایط خاص به صورت لحظه‌ای تا 2A جریان بکشد.

 

شرایط کاری

جریان مصرفی

Sleep Mode

1mA

Stand by

18mA

Call

216mA

GPRS

453mA

 

از آنجا که ماژول GSM مصرف بالایی دارد نمی‌توانید از تغذیه آردوینو استفاده کنید و نیاز به یک منبع تغذیه خارجی دارید. این منبع باید بتواند ولتاژی بین 3.4V تا 4.4V و جریانی تا 2A را تامین کند. برای این کار دو راه وجود دارد. اولین حالت همان طور که گفتیم استفاده از یک باتری LiPo است. هر سلول باتری‌ LiPo ولتاژی در حدود 3.7V داشته و جریان‌های بالا را به راحتی تامین کرده و بنابراین برای این کار بسیار مناسب است.

راه اندازی ماژول GSM با آردوینو

انتخاب دوم استفاده از یک منبع تغذیه متغیر یا یک منبع تغذیه ثابت به همراه رگولاتور ولتاژ است. رگولاتور LM2596 توانایی تامین ولتاژ و جریان مورد نظر را دارد و به خوبی با ماژول SIM800 کار می‌کند.

راه اندازی ماژول GSM با آردوینو

توجه داشته باشید که همیشه قبل از اتصال سیم VCC سیم GND را وصل کنید و قبل از سیم GND سیم VCC را جدا کنید.

ماژول SIM800 ١٢ پین اتصال دارد اما برای استفاده ساده از آن نیاز به همه آنها ندارید. برای استفاده از ماژول حداقل ۴ پین آن را باید وصل کنید: پین‌های تغذیه یعنی VCC و GND و پین‌های ارتباط سریال یعنی Tx و Rx. توجه داشته باشید که این ماژول در محدوده ولتاژ گفته شده کار می‌کند و بنابراین نمی‌توانید پایه‌های دیجیتال آردوینو که ولتاژ 5V دارند را به آن وصل کنید. برای اینکه به ماژول آسیب نرسد، پایه Rx ماژول را از طریق دو مقاومت تقسیم‌کننده ولتاژ به Tx آردوینو وصل کنید. پایه Tx ماژول را به Rx آردوینو، VCC را به منبع تغذیه و تمام GND ها را به هم وصل کنید. علاوه بر آن یکی از دو نوع آنتن گفته شده را به ماژول وصل کنید. اگر از آنتن مارپیچی استفاده می‌کنید باید آن را نیز به ماژول لحیم کنید. ماژول GSM جریان‌های لحظه‌ای زیادی می‌کشد، به همین دلیل برای پایدار کردن عملکرد آن می‌توانید دو خازن با ظرفیت 1000µF و 100nF به پایه‌های تغذیه ماژول وصل کنید.

سایر پایه‌های ماژول شامل دو پایه برای میکروفون، دو پایه برای بلندگو، پایه زنگ تماس، پایه حالت Sleep و پایه ریست سخت‌افزاری است که در صورت نیاز می‌توانید از آنها استفاده کنید.   


آماده‌سازی اولیه ماژول GSM

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

دانلود راهنمای دستورات AT برای SIM800

برای اینکه بفهمید که ماژول درست کار می‌کند یا نه می‌توانید برنامه زیر را بر روی آردوینو آپلود کرده و نتیجه را ببینید.

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3); //SIM800L Tx >> 2 & Rx >> 3

void serialReadWrite()
{
  delay(500);
  while (Serial.available())
    SIM800.write(Serial.read());
  while (SIM800.available())
    Serial.write(SIM800.read());
}

void setup()
{
  Serial.begin(9600);
  SIM800.begin(9600);
  Serial.println("Initializing...");
  delay(1000);
  SIM800.println("AT");
  serialReadWrite();
  SIM800.println("AT+CSQ");
  serialReadWrite();
  SIM800.println("AT+CCID");
  serialReadWrite();
  SIM800.println("AT+CREG?"); 
  serialReadWrite();
  SIM800.println("AT+COPS?");
  serialReadWrite();
}

void loop()
{
  serialReadWrite();
}

در این برنامه از کتابخانه SoftwareSerial استفاده شده است:

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3); //SIM800L Tx >> 2 & Rx >> 3

برای ساده‌تر شدن کد، یک برنامه به نام()serialReadWriteتعریف شده است که پاسخ ماژول را روی سریال مانیتور نوشته و اگر دستوری در سریال مانیتور وارد کنید، به ماژول ارسال می‌شود.

void serialReadWrite()
{
  delay(500);
  while (Serial.available())
    SIM800.write(Serial.read());
  while (SIM800.available())
    Serial.write(SIM800.read());
}

دستورات AT که در این برنامه استفاده شده‌اند، وضعیت ماژول و اتصال آن به شبکه را نشان می‌دهند. پس از ارسال این دستور، اگر اتصال ماژول به آردوینو برقرار باشد، پاسخ OK داده می‌شود:

SIM800.println("AT");

دستور زیر قدرت سیگنال دریافتی را می‌دهد. قدرت سیگنال عددی بین ٠ تا ۳۱ است:

SIM800.println("AT+CSQ");

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

SIM800.println("AT+CCID");

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

SIM800.println("AT+CREG?");
SIM800.println("AT+COPS?");

بر روی ماژول یک LED وجود دارد که نوع چشمک زدن آن وضعیت ماژول را نشان می‌دهد. بر این اساس سه حالت وجود دارد:

هر ثانیه یک بار: اتصال ماژول به شبکه برقرار نیست

هر دو ثانیه یک بار: ارتباط GPRS برقرار است

هر سه ثانیه یک بار: ماژول آماده دریافت و ارسال پیام و برقراری مکالمه است


ارسال و دریافت پیامک با آردوینو

شاید کاربردی‌ترین مورد استفاده از ماژول GSM ارسال و دریافت SMS با استفاده از آن باشد. برای استفاده از این قابلیت تنها کافیست که دستورهای مربوط به آن را بدانید. برنامه زیر یک پیامک را به شماره شما ارسال می‌کند:

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3); //SIM800L Tx >> 2 & Rx >> 3
String number = "+98xxxxxxxxxx";

void sendSMS()
{
  SIM800.println("AT+CMGF=1");
  delay(1000);
  SIM800.println("AT+CMGS=\"" + number + "\"\r");
  delay(1000);
  String SMS = "Hello! I am Arduino.\nNice to meet you";
  SIM800.println(SMS);
  delay(100);
  SIM800.println((char)26);
  delay(1000);
}

void setup()
{
  delay(5000);
  Serial.begin(9600);
  SIM800.begin(9600);
  Serial.println("Initializing Successful !");
  delay(1000);
  sendSMS();
}
void loop()
{
}

قبل از استفاده از این برنامه شماره تلفن همراه خود را در کد جایگزین کنید

String number = "+98xxxxxxxxxx";

در حلقه setup سریال مانیتور و ماژول را فعال می‌کنیم. برای جلوگیری از ارسال مکرر پیام، تابع()sendSMSرا در اینجا و نه در حلقه loop فراخوانی می‌کنیم:

Serial.begin(9600);
SIM800.begin(9600);
Serial.println("Initializing Successful !");
delay(1000);
sendSMS();

تابع()sendSMSیک پیامک به شماره مورد نظر شما ارسال می‌کند. برای ارسال پیام باید دستورات زیر را به ترتیب اجرا کنید. دستورات زیر ابتدا ماژول را در حالت متنی قرار داده، سپس پیام ارسال شده و در نهایت اتمام ارسال پیام با ارسال مقدار ۲۶ به ماژول تعیین می‌شود:

void sendSMS()
{
  SIM800.println("AT+CMGF=1");
  delay(1000);
  SIM800.println("AT+CMGS=\"" + number + "\"\r");
  delay(1000);
  String SMS = "Hello! I am Arduino.\nNice to meet you";
  SIM800.println(SMS);
  delay(100);
  SIM800.println((char)26);
  delay(1000);
}

برای دریافت پیام از طریق ماژول نیز می‌توانید برنامه زیر را اجرا کنید:

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3);

void getSMS()
{
  Serial.println("Switching to SMS read mode");
  delay(1000);
  SIM800.println("AT+CNMI=2,2,0,0,0"); 
  delay(1000);
}

void setup()
{
  delay(7000); 
  Serial.begin(9600);
  SIM800.begin(9600);
  Serial.println("Initializing ...");
  delay(1000);
  getSMS();
}
void loop()
{

  if (SIM800.available() > 0)
    Serial.write(SIM800.read());
}

در این برنامه تابع()getSMSبرای فعال کردن حالت دریافت پیام تعریف شده است. این کار با استفاده از دستور AT+CNMI=2,2,0,0,0 انجام می‌شود:

SIM800.println("AT+CNMI=2,2,0,0,0"); 

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

if (SIM800.available() > 0)
  Serial.write(SIM800.read());

برقراری تماس صوتی با آردوینو

از کارهای جالبی که می‌توانید با ماژول GSM انجام دهید برقراری تماس صوتی است. اگر می‌خواهید از این امکان استفاده کنید، باید یک میکروفون و یک بلندگوی مناسب به پین‌های MIC و SPK وصل کنید. همچنین می‌توانید یک بازر به پین Ring ماژول وصل کنید. با برنامه زیر می‌توانید یک تماس صوتی برقرار کنید:

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3);
String myNumber = "+98xxxxxxxxxx"; 

void callMe()
{
  SIM800.print(F("ATD"));
  SIM800.print(myNumber);
  SIM800.print(F(";\r\n"));
}

void setup()
{
  delay(7000);
  Serial.begin(9600);
  SIM800.begin(9600);
  Serial.println("Initializing ...");
  delay(1000);
  callMe();
}
void loop()
{
  if (SIM800.available() > 0)
    Serial.write(SIM800.read());
}

در این برنامه تابع()callMeبرای برقراری تماس تعریف شده است:

void callMe()
{
  SIM800.print(F("ATD"));
  SIM800.print(myNumber);
  SIM800.print(F(";\r\n"));
}

سیستم نظارت هوشمند با آردوینو

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

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3); //SIM800L Tx >> 2 & Rx >> 3
String number = "+98xxxxxxxxxx";
int pirPin = 8;
int lastState = LOW;

void sendSMS()
{
  SIM800.println("AT+CMGF=1");
  delay(1000);
  SIM800.println("AT+CMGS=\"" + number + "\"\r");
  delay(1000);
  String SMS = "Something is moving.\nMaybe someone is here!\nI will call you now";
  SIM800.println(SMS);
  delay(100);
  SIM800.println((char)26);
  delay(1000);
}

void callMe()
{
  SIM800.print(F("ATD"));
  SIM800.print(number);
  SIM800.print(F(";\r\n"));
}

void setup()
{
  pinMode(pirPin, INPUT);
  digitalWrite(pirPin, LOW);
  delay(5000);
  SIM800.begin(9600);
  delay(1000);
}
void loop()
{
  if (digitalRead(pirPin))
  {
    if (!lastState)
    {
      sendSMS();
      delay(15000);
      callMe();
      lastState = !lastState;
    }
  }
  else
  {
    if (lastState)
    {
      lastState = !lastState;
    }
  }
}

توابع ارسال پیام و برقراری تماس مانند قبل است. پین ٨ را به یک سنسور PIR وصل کنید و آنرا در حلقه setup تعریف کنید:

#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3); //SIM800L Tx >> 2 & Rx >> 3
String number = "+98xxxxxxxxxx";
int pirPin = 8;
int lastState = LOW;

در حلقه loop اگر سنسور PIR حرکتی را حس کند، به شماره تلفن همراه شما پیام داده شده و سپس ماژول با شما تماس می‌گیرد:

if (digitalRead(pirPin))
{
  if (!lastState)
  {
    sendSMS();
    delay(15000);
    callMe();
    lastState = !lastState;
  }
}
else
{
  if (lastState)
  {
    lastState = !lastState;
  }
}

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

دانلود کتابخانه SIM800

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

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#include <Sim800l.h>
Sim800l SIM800;
char *myNumber = "+98xxxxxxxxxx";
char *SMS = "Hello, I am Arduino Uno.\nNice to meet you!";

void setup()
{
  SIM800.begin();
  delay(8000);
  SIM800.sendSms(myNumber, SMS);
  delay(3000);
  SIM800.callNumber(myNumber);
}

void loop()
{
}

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

#include <Sim800l.h>
Sim800l SIM800;
char *myNumber = "+98xxxxxxxxxx";
char *SMS = "Hello, I am Arduino Uno.\nNice to meet you!";

در حلقه setup کافیست که ماژول را راه‌اندازی کرده و دستورهای()sendSmsو()callNumberرا فراخوانی کنید:

SIM800.begin();
delay(8000);
SIM800.sendSms(myNumber, SMS);
delay(3000);
SIM800.callNumber(myNumber);

راه اندازی ماژول GSM با آردوینو

راه اندازی ماژول GSM با آردوینو


نتیجه‌گیری

در این آموزش با ماژول GSM و نحوه کار با آن آشنا شدید. این ماژول به خصوص در مواردی که سایر روشهای ارتباطی مثل وایرلس امکان‌پذیر نیست، یک روش کارآمد و مطمئن است.

در آموزش بعدی نحوه راه‌اندازی ماژول‌های وایرلس را توضیح خواهیم داد.

نظرات شما باعث بهبود محتوای آموزشی ما می‌شود. اگر این آموزش را دوست داشتید، همین‌طور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.

خواندن 21853 دفعه
داوود درستکار

داوود درستکار دانش‌آموخته کارشناسی مهندسی مکانیک از دانشگاه صنعتی اصفهان و کارشناسی ارشد از دانشگاه تهران است. وی همچنین عضو تیم تحقیقاتی مرکز سیستمها و فناوریهای پیشرفته دانشگاه تهران (CAST) است. داود مسلط به طراحی و تحلیل سیستم‌های دینامیکی، طراحی و ساخت ربات، کنترل سیستم‌های غیرخطی و پیاده‌سازی سیستم‌های هوشمند با استفاده از آردوینو است. مهمترین علاقه او در حوزه رباتیک، پرنده‌های بدون سرنشین، رباتهای توانبخشی و ساخت تجهیزات هوشمندسازی و کنترل می‌باشد.

کاربرانی که در این گفتگو شرکت کرده اند

نظرات (63)

  1. Mohammad

عالی بود. متشکرم.

 
  1. محمد حسین

سلام ایا ماژول sim800a همان ماژول sim800 یا sim808 است؟؟

 
  1. پشتیبانی    محمد حسین

سلام دوست عزیز
باید به طور کامل دیتاشیت محصولات رو باهم مقایسه کنید. به عنوان مثال لینک های زیر تا حدی می تونن شما رو راهنمایی کنند:
https://b2n.ir/135601
https://b2n.ir/341600
موفق باشید

 
  1. Ahmad

سلام آیا میشه با دستورات at شماره اس ام اس دریافتی رو مانیتور کرد

 
  1. پشتیبانی    Ahmad

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

 
  1. Ali

با سلام
من از کتابخونه sim800l.h استفاده کردم اما نمیدونم چرا این خط کد ارور میگیره ;(Sim800l.sendSms(numberSms,mstat در صورتی که هر دو پارامتر ورودی هم از نوع Stringهستش ولی این خط کد بدون مشکل اجرا میشه ("",Sim800l.sendSms("123234

 
  1. پشتیبانی    Ali

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

 
  1. Ali    پشتیبانی

با سلام
ممنون که اینقدر سریع جواب میدین من واقعا کارم گیره و اینکه من از همین کتابخون ای که روی سایت قرار دادین استفاده کردم و دستورات رو هم توی exampel و هم توی گیت هاب چک کردم و هم کتابخونه رو ابدیت کردم اما برام خیلی عجیبه که چرا این دستور...

با سلام
ممنون که اینقدر سریع جواب میدین من واقعا کارم گیره و اینکه من از همین کتابخون ای که روی سایت قرار دادین استفاده کردم و دستورات رو هم توی exampel و هم توی گیت هاب چک کردم و هم کتابخونه رو ابدیت کردم اما برام خیلی عجیبه که چرا این دستور متغیر String نمیپذیره و توی exampel کتابخونه شماره مورد نظر رو توی متغیر char* ذخیره کرده که برام خیلی عجیبه و وقتی سعی میکنم منم این کار رو توی بدنه کد انجام بد مثلا میخوام شماره فردی که از اون sms دریافت شده روی توی این جنس از متغیر قرار بدم ارور میخوره

ادامه مطلب
 
  1. پشتیبانی    Ali

علی عزیز بررسی شد و اگر به صورت زیر برای ارسال پیامک کد زنی کنید صحیح هست:

استفاده از دستور زیر:

SIM800.sendSms(myNumber, SMS)


در صورتی که myNumber و SMS از قبل به صورت زیر تعریف شده باشند:

char *myNumber = "+98xxxxxxxxxx";
char *SMS =...

علی عزیز بررسی شد و اگر به صورت زیر برای ارسال پیامک کد زنی کنید صحیح هست:

استفاده از دستور زیر:

SIM800.sendSms(myNumber, SMS)


در صورتی که myNumber و SMS از قبل به صورت زیر تعریف شده باشند:

char *myNumber = "+98xxxxxxxxxx";
char *SMS = "Hello, I am Arduino Uno.\nNice to meet you!";


موفق باشید

ادامه مطلب
 

سلام خسته نباشی دوست عزیز من قدرت سیگنال دریافتیم 0 هست . کد اولیه برای تست گیری رو ران کردم جواب گرفتم .اما کد ارسال بیامک و یا تماس رو ران میکنم ارور میگیرم چطور یمیتونم مشکلم رو رفع کنم؟؟ با تشکراز لطف فراوانتون

 

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

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

ادامه مطلب
 

سلام امکان داره ال ای دی ماژول روشن بشه اما ماژول درست نباشه ؟؟ چون من کد رو ران میکنم جوابی نمیگیرم

 

سلام امیرحسین عزیز
به این شکل نمیشه گفت که ماژول سالم باشه یا خیر. ولی به احتمال زیاد مشکل از ماژول نباشد و سیم بندی ها و یا برنامه رو دقیق تر بررسی کنید.
موفق باشید

 
  1. عبدالهی

مرررررررسی آقا مرررسی

 
  1. احسان

سلام و خسته نباشین
خواستم بپرسم که آیا میشه ماژول سیم 800l رو با آردوینو DUE راه اندازی کرد؟؟ اگه میشه چطور و چگونه ؟؟؟ لطفا توضیح بدین.

 
  1. پشتیبانی    احسان

سلام احسان عزیز
باید کتابخانه SIM800 رو برای آردوینو مدنظر هم دانلود. همچنین] کتابخانه سریال برای برد هم مورد نیاز است که در غیر این صورت باید از خود پایه های rx و tx برد استفاده کنید. مابقی کار استفاده از همین کدهای آموزش است.
موفق باشید

 
  1. محمد

سلام اگه امکانش هست لطفا به این کد توجه کنید مشکل از کجاست که بعد از فراخوانی send sms پیام ارسال نمیشه

#include <SoftwareSerial.h>
SoftwareSerial sim800l(3,2);
int ldr = A0;
int laser = 13;
const int buzzer = 9;
float maxFrequency=4000;
float...

سلام اگه امکانش هست لطفا به این کد توجه کنید مشکل از کجاست که بعد از فراخوانی send sms پیام ارسال نمیشه

#include <SoftwareSerial.h>
SoftwareSerial sim800l(3,2);
int ldr = A0;
int laser = 13;
const int buzzer = 9;
float maxFrequency=4000;
float minFrequency=150;
float duration=10000;
float timeStep=1;
int rest=100;
#define frequencydelta (maxFrequency-minFrequency)
#define frequencyStep timeStep*frequencydelta/(duration/2)
int pir = 4;
int smoke = A1;
String number = "+98**********";
char incomingByte; 
String inputString;

void sendSMS1() { sim800l.println("AT+CMGF=1"); delay(1000); sim800l.println("AT+CMGS=\"" + number + "\"\r"); delay(1000); String SMS = "Hello! I am Arduino Laser detected "; sim800l.println(SMS); delay(100); sim800l.println((char)26); delay(1000); }

void sendSMS2() { sim800l.println("AT+CMGF=1"); delay(1000); sim800l.println("AT+CMGS=\"" + number + "\"\r"); delay(1000); String SMS = "Hello! I am Arduino motion detected"; sim800l.println(SMS); delay(100); sim800l.println((char)26); delay(1000); }

void sendSMS3() { sim800l.println("AT+CMGF=1"); delay(1000); sim800l.println("AT+CMGS=\"" + number + "\"\r"); delay(1000); String SMS = "Hello! I am Arduino Smoke & gas detected"; sim800l.println(SMS); delay(100); sim800l.println((char)26); delay(1000); }

void setup() { Serial.begin(9600); sim800l.begin(9600); pinMode (laser, OUTPUT); pinMode(buzzer, OUTPUT); pinMode(pir, INPUT); pinMode(smoke, INPUT); pinMode(ldr, INPUT); digitalWrite (laser, HIGH); while(!sim800l.available()){ sim800l.println("AT"); delay(1000); Serial.println("Connecting..."); } Serial.println("Connected!"); sim800l.println("AT+CMGF=1"); delay(1000); sim800l.println("AT+CNMI=1,2,0,0,0"); delay(1000); sim800l.println("AT+CMGL=\"REC UNREAD\""); }

void loop() { if(sim800l.available()){ delay(100); while(sim800l.available()){ incomingByte = sim800l.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); while (inputString.indexOf("ON") > -1){ if (digitalRead(pir) == HIGH){ delay(100); sim800l.println("ATD+98**********;"); delay(1000); sendSMS2(); delay(1000); Serial.println("motion detected"); for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } }

else { noTone(buzzer); delay(rest); Serial.println("scanning"); }

ldr = analogRead(A0); Serial.print("ldr= "); Serial.println(ldr); if (ldr<600){ delay(100); sim800l.println("ATD+98**********;"); delay(1000); sendSMS1(); delay(1000); for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } } else { noTone(buzzer); delay(rest); } smoke = analogRead(A1); Serial.print("smoke: "); Serial.println(smoke); if (smoke > 400){ delay(100); sim800l.println("ATD+98**********;"); delay(1000); sendSMS3(); delay(1000); for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } } else { noTone(buzzer); delay(rest); } if(sim800l.available()){ delay(100); while(sim800l.available()){ incomingByte = sim800l.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); if (inputString.indexOf("STOP") > -1){ break; sim800l.println("AT+CMGDA=\"DEL ALL\""); delay(1000); } } } while (inputString.indexOf("OFF") > -1){ ldr = analogRead(A0); Serial.print("ldr= "); Serial.println(ldr); if (ldr<600){ delay(100); sim800l.println("ATD+98**********;"); delay(1000); sendSMS1; delay(1000); for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } } else { noTone(buzzer); delay(rest); } smoke = analogRead(A1); Serial.print("smoke: "); Serial.println(smoke); if (smoke > 400){ delay(100); sim800l.println("ATD+98**********;"); delay(1000); sendSMS3(); delay(1000); for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=minFrequency;i<maxFrequency;i+=frequencyStep) { tone(buzzer,i); delay(timeStep); } for(float i=maxFrequency;i>minFrequency;i-=frequencyStep) { tone(buzzer,i); delay(timeStep); } } else { noTone(buzzer); delay(rest); } if(sim800l.available()){ delay(100); while(sim800l.available()){ incomingByte = sim800l.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); if (inputString.indexOf("STOP") > -1){ break; sim800l.println("AT+CMGDA=\"DEL ALL\""); delay(1000); } } } if (inputString.indexOf("OK") == -1){ sim800l.println("AT+CMGDA=\"DEL ALL\""); delay(1000);} inputString = ""; } }

ادامه مطلب
 
  1. پشتیبانی    محمد

سلام محمد عزیز
ابتدا سعی کنید دقیقا برنامه عهای نوشته شده همین آموزش رو پیش برید تا از درستی ماژولتون مطمئن بشید. در برنامه شما در انتها شما نوشتید void sensSMS1, در صورتی که اگراین تابع رو قبلا نوشتید و حالا می خواید فراخوانی بشه دیگه void لازم...

سلام محمد عزیز
ابتدا سعی کنید دقیقا برنامه عهای نوشته شده همین آموزش رو پیش برید تا از درستی ماژولتون مطمئن بشید. در برنامه شما در انتها شما نوشتید void sensSMS1, در صورتی که اگراین تابع رو قبلا نوشتید و حالا می خواید فراخوانی بشه دیگه void لازم نیست نوشته بشه چون با این کار دیگه تابع فراخوانی نمیشه, بلکه تابع داره نوشته میشه و یک تابع خالی بدون خروجی تعریف میشه! پس شما باید تابع Void SendSMS1 رو تعریف و در ابتدای تابع برنامه زیر رو هم اضافه کنید و سپس برای فراخوانی فقط SendSMS1() رو بنویسید:

GPSmodule.println("AT+CSMP=17,167,2,25\r");  // set this parameter if empty SMS received
  delay(100);


موفق باشید

ادامه مطلب
 
  1. محمد    پشتیبانی

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

 
  1. پشتیبانی    محمد

ممنون محمد عزیز از به اشتراک گذاری راه حل مشکلتون.
موفق باشید

 
  1. محمدرضا

سلام خسته نباشید . این ماژول رو راه اندازی کردم و led روی ماژول هر سه ثانیه یکبار چشمک زن شد و میزان انتن دهی هم 31,0 هستش ولی بهد از آپلود کد مربوطه نه پیامی رد و بدل شد و نه تماسی از LM2596 هم استفاده کردم ولی باز تغییری نکرد سیم کارت هم عوض...

سلام خسته نباشید . این ماژول رو راه اندازی کردم و led روی ماژول هر سه ثانیه یکبار چشمک زن شد و میزان انتن دهی هم 31,0 هستش ولی بهد از آپلود کد مربوطه نه پیامی رد و بدل شد و نه تماسی از LM2596 هم استفاده کردم ولی باز تغییری نکرد سیم کارت هم عوض کردم ولی باز درست نشد.نظر شما چیه ؟

ادامه مطلب
 
  1. پشتیبانی    محمدرضا

سلام محمدرضا عزیز
به احتمال زیاد مشکل از کدهای شما و یا سیم کارت هست. بهتره ابتدا سیم کارت رو روی گوشی بررسی کنید که پیام ارسال و دریافت می کنه. سپس برنامه ای بنویسید که دستورات AT رو بتونید به ماژول از طریق serial monitor بفرستید تا تک به تک...

سلام محمدرضا عزیز
به احتمال زیاد مشکل از کدهای شما و یا سیم کارت هست. بهتره ابتدا سیم کارت رو روی گوشی بررسی کنید که پیام ارسال و دریافت می کنه. سپس برنامه ای بنویسید که دستورات AT رو بتونید به ماژول از طریق serial monitor بفرستید تا تک به تک بررسی کنید که مشکل پیدا شه.
موفق باشید

ادامه مطلب
 
هیچ نظری در اینجا وجود ندارد
بارگذاری بیشتر ...

نظر خود را اضافه کنید.

ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید
عبارت تصویر زیر را بازنویسی کنید. واضح نیست؟

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

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

Copyright © 2017-2018 | Sanatbazar.com