
مقدمه
راهاندازی ماژول SIM800L یکی از موضوعات پرکاربرد و مهم در حوزه اینترنت اشیاء (IoT) محسوب میشود. امروزه با استفاده از ماژولهای مخابراتی در پروژههای هوشمند، میتوان وضعیتها و رویدادهایی را که در نقاط دیگر اتفاق میافتد، از راه دور کنترل و مدیریت کرد. برای مثال، میتوان تنها با یک تماس تلفنی سیستم هشداردهنده یا دزدگیر منزل را فعال کرد، یا در صورت بروز یک رویداد خاص، از طریق ارسال پیامک (SMS) بر روی گوشی همراه مطلع شد.
در بین ماژولهای موجود، ترکیب SIM800L و برد Arduino UNO یکی از رایجترین گزینهها برای شروع پروژههای IoT به شمار میآید. در این آموزش، ابتدا با قابلیتها و ساختار ماژول SIM800L آشنا میشوید و سپس به بررسی نحوه اتصال و برنامهنویسی آن با آردوینو خواهیم پرداخت.

ماژول SIM800L چیست؟
ماژول SIM800L در اصل یک مودم سلولی کوچک است که قابلیتهایی مشابه تلفن همراه در اختیار شما قرار میدهد. این ماژول توانایی برقراری تماس صوتی، ارسال پیامک (SMS)، دریافت ایمیل و حتی اتصال به شبکه اینترنت GPRS را دارد. نکته مهم این است که ارتباط آن با انواع میکروکنترلرها (مانند آردوینو، ESP و STM32) به سادگی و از طریق ارتباط سریال امکانپذیر است.
با این حال، برای عملکرد پایدار و بدون خطای این ماژول، استفاده از برخی تجهیزات جانبی مانند منبع تغذیه پایدار، آنتن خارجی و فیلترهای مناسب ضروری است.
در ادامه، به معرفی ویژگیها و مشخصات کلیدی این ماژول میپردازیم. بررسی این موارد به شما کمک میکند تا تصمیم بگیرید آیا SIM800L برای پروژه خاص شما انتخاب مناسبی هست یا خیر.
ویژگی های ماژول SIM800L
امکان برقراری تماس صوتی و استفاده از میکروفن و بلندگو 8 اهم
قابلیت اتصال به شبکه اینترنت
ارسال و دریافت پیامک و داده GPRS (HTTP, TCP/IP,…)
پشتیبانی از شبکه چهار باند GPS/GPRS و قابلیت اتصال به همه شبکههای GSM
پشتیبانی از همه اپراتورهای مخابرات
قابل حمل و قابل استتار به دلیل داشتن ابعاد کوچک
قابل کنترل توسط دستورات AT (AT commands)
قابلیت جستجو و دریافت سیگنال FM
مشخصات فنی ماژول SIM800L

سخت افزار و پین های ماژول SIM800L

در قلب این ماژول، چیپ اصلی SIM800L قرار گرفته که مسئول مدیریت تمامی ارتباطات GSM است. در بخش پشتی ماژول، جایگاه سیمکارت تعبیه شده که از نوع میکروسیمکارت بوده و امکان قرار دادن سیمکارتهای رایج اپراتورها در آن وجود دارد.
در قسمت بالای سمت راست ماژول، یک LED کوچک دیده میشود که نقش نشانگر وضعیت عملکرد ماژول را ایفا میکند. نحوه چشمکزدن این LED اطلاعات مهمی درباره وضعیت اتصال ماژول به شبکه مخابراتی در اختیار ما قرار میدهد:
- چشمک با فاصله ۱ ثانیه: ماژول روشن است اما هنوز به شبکه GSM متصل نشده.
- چشمک با فاصله ۲ ثانیه: ماژول در حال تلاش برای برقراری اتصال داده (Data Connection) است.
- چشمک با فاصله ۳ ثانیه: اتصال به شبکه با موفقیت انجام شده و ماژول آمادهی ارسال پیامک، دریافت تماس یا استفاده از اینترنت میباشد.
این LED ساده، ابزار مناسبی برای بررسی سریع وضعیت ماژول بدون نیاز به تجهیزات اضافی یا مانیتورینگ نرمافزاری است.

بر روی برد ماژول SIM800L، تعداد 12 پین درنظر گرفته شده است که در ادامه توضیح داده دادهایم:
NET : اولین پین سمت چپ برای اتصال آنتن Helical درنظر گرفته شده است.
VCC : پین تغذیه ماژول است و لازم به ذکر میباشد که این ماژول میتواند ولتاژ 3.4 تا 4.4 ولت را تحمل کند. بنابراین برای اتصال به ماژولهایی که تغذیه 5 ولت دارند ولتاژ سیگنال ورودی باید کاهش یابد؛ بدین منظور میتوان از یک تقسیمکننده ولتاژ مقاومتی استفاده کرد.
RST : این پین برای ریست کردن ماژول بهکار میرود و چنانچه ماژول در وضعیت نامطلوبی قرار بگیرد، این پین به مدت 100 میلیثانیه در وضعیت Low قرار گرفته و سپس ماژول ریست میشود.
RXD و TXD : به ترتیب پینهای گیرنده و فرستنده سریال هستند که امکان ارتباط بین دو ماژول را فراهم میکنند.
RING : در حالت عادی و به طور پیش فرض این پین در وضعیت High قرار دارد و هنگام دریافت تماس یا پیامک به مدت 120 میلی ثانیه Low خواهد شد.
DTR : با قرار دادن این پین در وضعیت High مدSleep برای ماژول فعال میشود و در وضعیت Low این مد غیرفعال میشود.
MIC± : پینهای میکروفن به این پینها متصل میشوند.
SPK± : پینهای اسپیکر نیز به این دو پین متصل میگردند.
منبع تغذیه SIM800L
تغذیه ماژول SIM800L در محدوده 3.4 تا 4.4 ولت میباشد؛ به طوری که ولتاژ 5 ولت به آن آسیب میزند و ولتاژ 3.3 برای راهاندازی آن کافی نیست. بنابراین برای تأمین تغذیه ماژول میتوانید از یک باتری لیتیوم پلیمر3.7 ولت استفاده کنید.

جریان مصرفی موردنیاز این ماژول در حالتهای مختلف حدود چند صد میلی آمپر است ولی تا حدود 2 آمپر در هنگام انتقال داده افزایش مییابد، بنابراین منبع تغذیه ماژول باید قابلیت تأمین جریان 2 آمپر را داشته باشد در غیر این صورت ماژول از کار میافتد. از مبدلهای کاهنده باک مانند مدل LM2596 یا هر مبدل دیگر با قابلیت جریان دهی 2 آمپر نیز میتوانید به عنوان منبع تغذیه ماژول استفاده نمایید.


آنتن GSM
به منظور عملکرد بهتر ماژول میتوانید از یک آنتن استفاده کنید. این امر به دو روش زیر امکان پذیر است:
1. با استفاده از یک مبدل UFL به SMA میتوان هر نوع آنتن GSM با بهره 3dBi را به ماژول متصل کرد.
2. پین NET روی ماژول برای اتصال مستقیم یک آنتن Helical GSM به برد در نظر گرفتهشده است.

راه اندازی ماژول SIM800L با آردوینو UNO
برای برقرار کردن ارتباط میان آردوینو و ماژول SIM800L GSM از طریق پورت سریال، میتوان دستورات مورد نیاز را از طریق Serial Monitor در نرمافزار Arduino IDE به ماژول ارسال کرد. این روش امکان بررسی وضعیت عملکرد ماژول و اجرای دستورات مختلف مانند ارسال پیام یا برقراری تماس را فراهم میکند. برای این ارتباط تنها به سه بخش نیاز داریم: خطوط TX و RX برای ارسال و دریافت داده، و تأمین ولتاژ تغذیه پایدار.
برای راهاندازی کامل ماژول، کافیست مراحل زیر را گامبهگام دنبال کنید:
- اتصال آنتن: در ابتدا باید آنتن مناسب را به درگاه مخصوص روی ماژول متصل کنید تا دریافت سیگنال مخابراتی بهدرستی انجام شود.
- قرار دادن سیمکارت: یک سیمکارت فعال با سایز میکرو را در محل مخصوص پشت ماژول قرار دهید.
- اتصال خط TX: برای ارسال داده از ماژول به آردوینو، پایه TX ماژول را به یکی از پایههای دیجیتال آردوینو متصل کنید. در این آموزش از پین دیجیتال 3 آردوینو استفاده میکنیم.
- اتصال خط RX با کاهش ولتاژ: از آنجا که سطح ولتاژ منطقی آردوینو ۵ ولت است اما ماژول SIM800L با ولتاژ حدود ۳.۴ ولت کار میکند، باید از ورود ولتاژ بالا به پایه RX ماژول جلوگیری کرد. برای این کار از یک تقسیم مقاومتی ساده استفاده میکنیم:
- یک مقاومت ۱۰ کیلو اهم بین پین دیجیتال ۲ آردوینو و پایه RX ماژول
- یک مقاومت ۲۰ کیلو اهم بین پایه RX ماژول و زمین (GND)
- تأمین تغذیه ماژول: ماژول SIM800L جریان زیادی (گاهی تا 2 آمپر) مصرف میکند، بنابراین استفاده از منبع تغذیه پایدار ضروری است. شما میتوانید از باتری لیتیومپلیمر یا ماژول مبدل ولتاژ (Buck Converter) استفاده کنید تا ولتاژ 3.7 تا 4.2 ولت موردنیاز ماژول را فراهم نمایید.
در پایان، اتصالها طبق شماتیکی که در ادامه آمده انجام میشود و آمادهاید تا با ارسال دستورات AT از طریق سریال، ماژول را کنترل کنید.


دستورات AT
دستورات AT فرمانهای کوتاهی هستند که برای اجرای عملکردهای مورد نظر در SIM800 استفاده میشوند. این کدها از طریق آردوینو ارسال شده و آردوینو دستورات را برای اجرا به SIM800 ارسال میکند. سادهترین دستور AT که میتوان استفاده کرد کاراکتر “AT” است. هنگامی که این دستور در مانیتور سریال تایپ شود، پاسخ “AT” در مانیتور سریال مشاهده خواهد شد. این پاسخ تأیید میکند ارتباط آردوینو با SIM800 به درستی برقرار شده است. سایر دستورات براساس درخواست کاربر پاسخ متفاوتی خواهند داشت. در ادامه لیستی از دستورات رایج AT برای SIM800 از جمله تنظیمات و اتصال به شبکه اینترنت ذکر شده است.

برقراری ارتباط سریال، ارسال و دریافت پیامک با ماژول SIM800L
با استفاده از کد زیر میتوان بین آردوینو و SIM800L ارتباط برقرار کرد. بدینمنظور پس ازسیمکشی و تکمیل اتصالات، کد زیر را کامپایل و بر روی آردوینو خود اپلود نمایید. در مرحله بعد با ارسال دستورات AT از طریق مانیتور سریال با ماژول SIM800 ارتباط برقرار می شود.
کد آردوینو
#include <SoftwareSerial.h> //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println(“Initializing…”); delay(1000); mySerial.println(“AT”); //Once the handshake test is successful, it will back to OK updateSerial(); mySerial.println(“AT+CSQ”); //Signal quality test, value range is 0-31 , 31 is the best updateSerial(); mySerial.println(“AT+CCID”); //Read SIM information to confirm whether the SIM is plugged mySerial.println(“AT+CMGF=1”); // Configuring TEXT mode updateSerial(); mySerial.println(“AT+CMGS=\”+zzxxxxxxxxxx\””); //change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); mySerial.print(“Last Minute Engineers | lastminuteengineers.com”); //text content updateSerial(); mySerial.write(26); } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } }
توضیحات کد
در ابتدای برنامه از کتابخانه SoftwareSerial برای برقراری ارتباط سریال بین آردوینو و SIM800L استفاده کردیم. سپس پینهای ارسال و دریافت ماژول GSM به ترتیب به پینهای شماره 3 و 2 آردوینو متصل شدهاند. در تابع setup، به منظور برقراری ارتباط سریال میان ماژول آردوینو و IDE آردوینو و ماژول SIM800L نرخ باودریت بر روی 9600 تنظیم شده است. توجه داشته باشید که در پنجره مانیتور سریال گزینه NL&CR را انتخاب نمایید.
در ادامه با ارسال دستورات AT به صورت خودکار، از طریق مانیتور سریال با ماژول SIM800 ارتباط برقرار میشود. دستور AT استفاده شده در کد برای بررسی برقراری ارتباط بین SIM800 و آردوینو میباشد و در صورت برقراری ارتباط پاسخ OK برگردانده خواهد شد. نمایش شدت سیگنال بر حسب دسی بل با دستور AT+CSQ انجام خواهد شد که در پاسخ باید مقداری بین 0 تا 31 مشاهده شود. فعال یا غیر فعال بودن سیم کارت نیز از طریق دستور AT+CCID بررسی میشود که در صورت فعال بودن سیم کارت پاسخ OK دریافت خواهدشد. سپس دستور AT+CMGF=1 ماژول SIM800 را در مد متن و پیامک قرار میدهد و دستور AT+CMGS برای ارسال پیامک به شماره تلفن همراه مورد نظر میباشد. به این صورت که در رشته ZZxxxxxxxxxx، کد کشور که ZZ است و در ادامه شماره موبایل نوشته میشود. شما میتوانید برای ارسال مجدد پیام، باید کلید RESET در آردوینو فشار دهید.
در تابع SIM800 ،Loop منتظر دریافت ورودی از مانیتور سریال است ، به طوری که داده از طریق پین شماره 2 آردوینو به ماژول GSM ارسال می شود و پین شماره 3 به طور مداوم برای دریافت پاسخ احتمالی از ماژول خوانده میشود. در این حالت هنگامی که پیامی به ماژول SIM800 ارسال گردد بر روی مانیتور سریال قابل مشاهده است.
ارسال و دریافت تماس با استفاده از ماژول SIM800L
توسط این ماژول امکان برقرای تماس نیز در موقعیتهای حساس مانند آتشسوزی یا سرقت وجود دارد. در کد زیر شماره موبایل در رشته ZZxxxxxxxxxx وارد میشود و تماس با شماره مورد نظر توسط دستور ATD برقرار و با دستور ATH قطع میشود
کد آردوینو
#include <SoftwareSerial.hgt //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println(“Initializing…”); delay(1000); mySerial.println(“AT”); //Once the handshake test is successful, i t will back to OK updateSerial(); mySerial.println(“ATD+ +ZZxxxxxxxxxx;”); // change ZZ with country code and xxxxxxxxxxx with phone number to dial updateSerial(); delay(20000); // wait for 20 seconds… mySerial.println(“ATH”); //hang up updateSerial(); } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } }
برای دریافت تماس از یک شماره تلفن مشخص، می توانید از کد زیر میتوان استفاده کنید:
کد آردوینو
#include <SoftwareSerial.h> //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println(“Initializing…”); } void loop() { updateSerial(); } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } }
دانلود سورس کامل پروژه به صورت رایگان
رمز فایل: NEWJECT.COM