آموزش آردوینو

راه اندازی Sim800L با آردوینو (تماس و پیامک SMS)

ماژول SIM800L یکی از ارزان ترین ماژول های GSM/GPRS است که در ایران بسیار محبوب است. پروژه های مرتبط با این ماژول بسیار زیاد هستند و در اکثر کاربرد هایی که ما به ارسال و دریافت اس ام اس یا برقراری تماس نیاز داریم، این ماژول را استفاده میکنیم.

مدار اتصال Sim800l به آردوینو

مهم ترین مسئله در مورد راه اندازی سیم 800 با آردوینو، داشتن اطلاعات کافی در مورد ماژول است. بنابراین من به شما توصیه میکنیم ابتدا مقاله معرفی Sim800l را بخوانید.

آنتن را به ماژول متصل کنید. سیم کارت فعال را در سوکت ماژول قرار دهید. حالا پین Tx را به پین دیجیتال شماره 3 آردوینو متصل کنید.

ما نمی‌توانیم پین Rx روی ماژول را مستقیماً به پین ​​دیجیتال آردوینو وصل کنیم زیرا Arduino Uno دارای ولتاژ عملکرد 5 ولت است در حالی که ماژول SIM800L از منطق سطح 3.3 ولت استفاده می‌کند و توان تحمل 5 ولت ندارد. ما باید سیگنال Tx که از آردوینو می آید را از 5 ولت به 3.3 ولت کاهش دهیم تا به ماژول SIM800L آسیبی وارد نشود. راه های مختلفی برای انجام این کار وجود دارد اما ساده ترین راه استفاده از یک تقسیم ولتاژ مقاومتی ساده است. قرار دادن مقاومت 10K بین پین Rx ماژول و پین D2 آردوینو و مقاومت 20K بین پین Rx ماژول و GND به خوبی کار می کند.

اکنون فقط پین هایی که برای تامین برق ماژول استفاده می شوند باقی می مانند. از آنجایی که چندین گزینه برای روشن کردن ماژول دارید، ما دو نمونه شماتیک را ارائه کرده ایم. یکی از باتری 1200 میلی آمپر ساعتی لیتیوم پلیمری و دیگری از مبدل DC به DC مدل LM2596 استفاده می کند.

اتصال آردوینو به ماژول SIM800L با باتری
اتصال آردوینو به ماژول SIM800L با باتری لیتیوم پلیمری 3.7 ولتی
اتصال آردوینو به ماژول SIM800L با LM2596
اتصال آردوینو به ماژول SIM800L با LM2596

نکته: به یاد داشته باشید که باید GND ماژول به GND آردوینو متصل باشد.

کد آردوینو برای تست AT Command

برای ارسال دستورات AT و ارتباط با ماژول SIM800L از سریال مانیتور استفاده می کنیم. کد زیر آردوینو را قادر می سازد تا با ماژول SIM800L در سریال مانیتور ارتباط برقرار کند. قبل از اینکه به تفکیک کدها ادامه دهیم، آردوینو خود را به کامپیوتر متصل کنید، کد زیر را کامپایل کرده و در آردوینو آپلود کنید.

#include <SoftwareSerial.h>

//ایجاد یک آبجکت از کتابخانه سریال نرم افزاری
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx = Arduino #3 & #2

void setup()
{
  //پیکربندی سریال مانیتور
  Serial.begin(9600);
  
  //پیکربندی ارتباط سریال ماژول
  mySerial.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //اگر همه چیز درست باشد اوکی را برمیگرداند
  updateSerial();
  mySerial.println("AT+CSQ"); //کیفیت سیگنال بین 0 تا 31 را برمیگرداند
  updateSerial();
  mySerial.println("AT+CCID"); //اطلاعات سیم کارت را میخواند
  updateSerial();
  mySerial.println("AT+CREG?"); //وضعیت اتصال به شبکه را بررسی میکند
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//هرچه در سریال مانیتور نوشته شود به ماژول ارسال میشود
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//هرچه از ماژول دریافت شود در سریال مانیتور نوشته میشود
  }
}

هنگامی که سریال مانیتور را باز کردید، مطمئن شوید که گزینه Both NL & CR انتخاب شده است. بعد از آپلود کد بالا، شما باید خروجی زیر را روی مانیتور سریال ببینید.

دستورات AT آردوینو و ماژول Sim800l

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

  • ATI – نام ماژول را دریافت میکند .
  • AT+COPS؟ – بررسی میکند که به شبکه متصل هستید یا نه.
  • AT+COPS=؟ – لیست اپراتورهای موجود در شبکه را برمیگرداند.
  • AT+CBC – وضعیت باتری لیتیوم پلیمری را برمی‌گرداند. عدد دوم % (در این مورد 93%) و عدد سوم ولتاژ واقعی بر حسب میلی ولت (3.877 ولت) است.

دستورات اتصال شبکه AT در ماژول GSM SIM800L

کد آردوینو ارسال SMS با ماژول Sim800l

بریم سراغ مطالب جالب بیایید آردوینو خود را طوری برنامه ریزی کنیم که به هر شماره تلفنی که می خواهید پیامک ارسال کند. قبل از آپلود کردن کد، باید شماره تلفن را وارد کنید. رشته ZZxxxxxxxxxx را جستجو کنید و ZZ را با کد کشور و xxxxxxxxxx را با شماره تلفن 10 رقمی جایگزین کنید.

به طور مثال برای ایران ZZ برابر 98 و شماره ده رقمی بدون صفر 9123456789 میشود.

#include <SoftwareSerial.h> 

//ایجاد یک آبجکت از کتابخانه سریال نرم افزاری
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx = Arduino #3 & #2 

void setup() { 
  //پیکربندی سریال مانیتور 
  Serial.begin(9600); 

  //پیکربندی ارتباط سریال ماژول 
  mySerial.begin(9600); 

  Serial.println("Initializing..."); 
  delay(1000); 

  mySerial.println("AT"); //اگر همه چیز درست باشد اوکی را برمیگرداند 
  updateSerial();

  mySerial.println("AT+CMGF=1"); // ارسال در حالت متنی
  updateSerial();
  mySerial.println("AT+CMGS=\"+ZZxxxxxxxxxx\"");//تعیین شماره با +98
  updateSerial();
  mySerial.print("Last Minute Engineers | lastminuteengineers.com"); //محتوای ارسالی
  updateSerial();
  mySerial.write(26);
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//هرچه در سریال مانیتور نوشته شود به ماژول ارسال میشود
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//هرچه از ماژول دریافت شود در سریال مانیتور نوشته میشود
  }
}

loop خالی می ماند زیرا می خواهیم فقط یک بار پیامک ارسال کنیم. اگر می خواهید یک بار دیگر پیامک بفرستید، فقط کلید RESET را در آردوینو خود فشار دهید. تصویر زیر پیامک های ارسال شده از ماژول SIM800L GSM را نشان می دهد.

ارسال پیامک با ماژول آردوینو Sim800l

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

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

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

#include <SoftwareSerial.h>

//ایجاد یک آبجکت از کتابخانه سریال نرم افزاری
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx = Arduino #3 & #2

void setup() {
  //پیکربندی سریال مانیتور
  Serial.begin(9600);

  //پیکربندی ارتباط سریال ماژول
  mySerial.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //اگر همه چیز درست باشد اوکی را برمیگرداند 
  updateSerial();
  
  mySerial.println("AT+CMGF=1"); // پیکربندی حالت متنی
  updateSerial();
  mySerial.println("AT+CNMI=1,2,0,0,0"); // خواندن پیام ها
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//هرچه در سریال مانیتور نوشته شود به ماژول ارسال میشود
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//هرچه از ماژول دریافت شود در سریال مانیتور نوشته میشود
  }
}
}

طرح مشابه قبلی است به جز قطعه کد زیر. هنگامی که اتصال برقرار شد، دستورات AT زیر را ارسال می کنیم:

  • AT+CMGF=1 – قالب پیامک را به عنوان متن انتخاب می کند. فرمت پیش فرض پروتکل (PDU) است
  • AT+CNMI=1,2,0,0,0 – نحوه مدیریت پیامک های تازه را مشخص می کند. به این ترتیب می‌توانید به ماژول SIM800L بگویید پیام‌های SMS تازه دریافت شده را مستقیماً به رایانه شخصی ارسال کند یا آنها را ذخیره کند.

پاسخ با +CMT شروع می شود: تمام فیلدهای پاسخ با کاما از هم جدا می شوند و اولین فیلد شماره تلفن است. قسمت دوم نام شخص ارسال کننده پیامک است. فیلد سوم زمان است و فیلد چهارم محتوای پیام است.

توجه داشته باشید که این بار ما تابع loop را خالی نگه نداشته ایم زیرا در حال بررسی برای پیامک های تازه هستیم. هنگامی که پیامک را به ماژول SIM800L GSM ارسال کردید، خروجی زیر را روی نمایشگر سریال خواهید دید.

خواندن و دریافت اس ام اس با سیم 800

افزایش حجم بافر سریال نرم افزار آردوینو

اگر پیام دریافتی شما طولانی باشد، احتمالا چند کاراکتر آن گم میشود و دریافت نمیشود. این به معنی مشکل داشتن کد نیست، مشکل از اندازه بافر در کتابخانه SoftwareSerial است. ساده ترین راه حل برای این مشکل این است که اندازه بافر SoftwareSerial را از اندازه پیش فرض 64 بایت به 256 بایت (یا کوچکتر، بسته به آنچه برای شما کار می کند) افزایش دهید.

در رایانه ویندوز، به C:\Program Files (x86) -> Arduino -> hardware -> Arduino -> avr -> libraries -> SoftwareSerial بروید. SoftwareSerial.h را باز کنید و مورد زیر را تغییر دهید.

// RX buffer size 
#define _SS_MAX_RX_BUFF 64

به

// RX buffer size 
#define _SS_MAX_RX_BUFF 256

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

حالا بیایید آردوینو خود را برای برقراری تماس برنامه ریزی کنیم. این طرح زمانی بسیار مفید است که می‌خواهید آردوینو در مواقع اضطراری مانند افزایش دما یا نفوذ شخصی به خانه شما، یک تماس SOS/اضطراری برقرار کند.

قبل از آپلود کردن کد، باید شماره تلفن را وارد کنید. رشته ZZxxxxxxxxxx را جستجو کنید و ZZ را با کد کشور و xxxxxxxxxx را با شماره تلفن 10 رقمی جایگزین کنید.

#include <SoftwareSerial.h>

//ایجاد یک آبجکت از کتابخانه سریال نرم افزاری
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx = Arduino #3 & #2

void setup() {
  //پیکربندی سریال مانیتور
  Serial.begin(9600);

  //پیکربندی ارتباط سریال ماژول
  mySerial.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //اگر همه چیز درست باشد اوکی را برمیگرداند 
  updateSerial();
  
  mySerial.println("ATD+ +ZZxxxxxxxxxx;"); //تعیین شماره
  updateSerial();
  delay(20000); // 20 ثانیه صبر
  mySerial.println("ATH"); //قطع کردن تماس
  updateSerial();
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//هرچه در سریال مانیتور نوشته شود به ماژول ارسال میشود
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//هرچه از ماژول دریافت شود در سریال مانیتور نوشته میشود
  }
}
}

برای برقراری تماس از دستورات AT زیر استفاده می شود:

  • ATD+ +ZZxxxxxxxxxx; – شماره مشخصی را شماره گیری می کند. حتما ; را در انتهای دستور قرار دهید.
  • ATH – تماس را قطع می کند.

تصویر زیر تماس برقرار شده از ماژول SIM800L GSM را نشان می دهد.

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

دریافت تماس با ماژول سیم 800 و آردوینو

دریافت تماس نیازی به کد خاصی ندارد. فقط باید وضعیت ماژول SIM800L را بخوانید. از دریافت تماس زمانی استفاده میشود که میخواهید با زنگ زدن به ماژول Sim800 یک عملیات را در آردوینو انجام دهید.

#include <SoftwareSerial.h>

//ایجاد یک آبجکت از کتابخانه سریال نرم افزاری
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx = Arduino #3 & #2

void setup() {
  //پیکربندی سریال مانیتور
  Serial.begin(9600);

  //پیکربندی ارتباط سریال ماژول
  mySerial.begin(9600);

  Serial.println("Initializing...");
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//هرچه در سریال مانیتور نوشته شود به ماژول ارسال میشود
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//هرچه از ماژول دریافت شود در سریال مانیتور نوشته میشود
  }
}
}

تماس ورودی معمولاً با «RING» در سریال مانیتور و سپس شماره تلفن و شناسه تماس‌گیرنده نشان داده می‌شود. برای پذیرش/قطع تماس از دستورات AT زیر استفاده می شود:

  • ATA – تماس دریافتی را می پذیرد.
  • ATH – تماس را قطع می کند. با قطع تماس، NO CARRIER بر روی مانیتور سریال ارسال می شود که نشان می دهد تماس نمی تواند وصل شود.

خروجی زیر در سریال مانیتور تماس دریافت شده توسط ماژول SIM800L GSM را نشان می دهد.

دریافت تماس با ماژول سیم 800 و آردوینو

این مطلب تمام شد امیدوارم برای شما مفید باشد. اگر سوالی دارید میتوانید در قسمت نظرات اعلام کنید.

3.5/5 - (2 امتیاز)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام آیرنکس را دنبال کنید.
تصویر از محمد رحیمی

محمد رحیمی

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

1 دیدگاه

  1. Ali گفت:

    چجوری یه صدای ضبط شده روی مموری رو برای شماره ای که با آن تماس گرفته ام بفرستم؟

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

نشانی ایمیل شما منتشر نخواهد شد.