
فرض کنید در حال تلاش برای ایجاد یک سیستم نظارت بر داده های IoT از راه دور هستید، اولین مشکلی که با آن مواجه خواهید شد این است که چگونه یک اتصال اینترنتی مناسب برای دستگاه خود داشته باشید. چه بخواهید زمانی که شخصی وارد اتاق شما می شود مطلع شوید یا می خواهید گیاهان خود را از کیلومترها دورتر آبیاری کنید،وجود اینترنت مناسب همیشه یک مشکل است.
در این نوع شرایط، ماژول SIM800L GSM/GPRS می تواند بسیار مفید باشد. SIM800L یک ماژول GSM/GPRS بسیار فشرده است که به دلیل اندازه فشرده و انعطاف پذیری آن می تواند در بسیاری از پروژه های اینترنت اشیا ادغام شود. این ماژول می تواند هر کاری را انجام دهد که یک تلفن همراه معمولی می تواند انجام دهد، مانند پیام متنی، برقراری و دریافت تماس های تلفنی و اتصال به اینترنت از طریق GPRS و علاوه بر آن، از GSM/GPRS چهار باند پشتیبانی می کند به این معنی که می تواند در هر نقطه از جهان کار کند. .
پین اوت ماژول SIM800L GSM/GPRS
ماژول SIM800L GSM/GPRS دارای 12 پین است که عبارتند از NET، VCC، RST، RXD، TXD، GND، SPK-، SPK+، MIC-، MIC+، DTR، RING.

NET یک پین است که در آن می توانید آنتن مارپیچی همراه ماژول را لحیم کنید.
VCC پایه تغذیه ماژول است و باید از 3.4 ولت تا 4.4 ولت تغذیه شود. اتصال این ماژول به منبع تغذیه 5 ولت به احتمال زیاد آن را میسوزاند و اگر آن را به 3.3 ولت وصل کنید کار نمی کند. یک باتری لیتیومی یا یک مبدل باک با ظرفیت جریان 2 آمپر برای این ماژول توصیه می شود.
RST پین هارد ریست ماژول sim800L است. اگر در برقراری ارتباط با این ماژول مشکل دارید، پین را به مدت 100 میلیثانیه صفر کنید.
RXD پایه RX برای ماژول مورد استفاده در ارتباطات سریال است.
TXD پین TX برای این ماژول است که در ارتباط سریال استفاده می شود.
GND پایه زمین برای این ماژول است. این پایه را به پایه Ground ESP32 وصل کنید.
RING پین نشانگر زنگ خوردن ماژول است. این پین عموماً مقدار 1 را دارد. برای نشان دادن تماسهای دریافتی، ۱۲۰ میلیثانیه 0 میشود و همچنین میتوان آن را طوری پیکربندی کرد که هنگام دریافت پیامک، پالس داشته باشد.
DTR این پین می تواند برای قرار دادن ماژول در حالت خواب استفاده شود. 1 کردن پین ماژول را در حالت خواب قرار می دهد و سریال را غیرفعال می کند. 0 شدن آن باعث بیدار شدن ماژول می شود.
MIC+- از این دو پین می توان برای اتصال میکروفون خارجی به ماژول استفاده کرد.
SPK+- از این دو پین می توان برای اتصال یک بلندگوی خارجی به ماژول استفاده کرد.
قطعات ماژول GSM/GPRS SIM800L
ماژول SIM800L یک ماژول جمع و جور، همه کاره و با کاربری آسان برای GSM و GPRS است. نشانه گذاری قطعات ماژول در زیر نشان داده شده است.

اگر نگاه دقیقتری به ماژول SIM800L بیندازید، روی PCB چیز زیادی وجود ندارد. در قسمت جلوی PCB، ما کانکتور UFL و خود ماژول SIM800L را داریم. ما همچنین تعدادی خازن و یک مقاومت محدود کننده جریان 1K برای LED داریم. در نهایت، ما یک خازن بزرگ 100uF، 16 ولت تانتالیومی روی برد داریم.
در قسمت پشتی برد، نگهدارنده سیم کارت داریم که یک کانکتور فشاری است. این بدان معناست که شما فقط باید یک سیم کارت را وارد کنید و آن را فشار دهید تا سیم کارت کار کند.
بررسی عملکرد ماژول SIM800L GSM/GPRS
در قلب برد، ماژول SIM800L GSM/GPRS ساخته شده توسط SimCom وجود دارد. همانطور که در قسمت pinout بالا ذکر شد، ولتاژ کاری این دستگاه 3.4 ولت تا 4.4 ولت است که به این معنی است که می توانید این ماژول را مستقیماً از باتری لیتیوم پلیمری تغذیه کنید. همچنین دارای تشخیص نرخ باود خودکار برای سهولت در استفاده است.
این ماژول برای اتصال به شبکه به یک آنتن خارجی نیاز دارد، به همین دلیل دو گزینه آنتن برای این برد وجود دارد. در بسته، یک آنتن مارپیچی دریافت خواهید کرد که می توانید مستقیماً به پین NET ماژول لحیم کنید. اما اگر می خواهید آنتن را از برد ماژول دور نگه دارید، گزینه ای برای اتصال آنتن خارجی با کانکتور UFL آنبورد وجود دارد. هر سیم کارتی با اتصال 2G با این ماژول کار می کند.
نشانگر وضعیت LED:
همانطور که قبلاً اشاره کردیم، یک نشانگر LED در بالای ماژول SIM800L وجود دارد. برای نشان دادن شرایط شبکه با تایم های مختلف چشمک می زند.
- هر ثانیه چشمک میزند:

اگر LED روی ماژول هر ثانیه چشمک می زند، نشان می دهد که ماژول در حال کار است اما در حال حاضر قادر به اتصال به شبکه تلفن همراه نیست.
- هر دو ثانیه چشمک میزند:

وقتی چراغ LED روی مانیتور هر دو ثانیه چشمک می زند، به این معنی است که اتصال داده GPRS که درخواست کرده اید فعال است و آماده پذیرش درخواست ها در صورت درخواست است.
- هر سه ثانیه چشمک میزند:

هنگامی که LED روی ماژول هر سه ثانیه چشمک می زند، ماژول به شبکه متصل می شود و می تواند صدا و پیامک ارسال/دریافت کند.
سوالات متداول در مورد ماژول SIM800L GSM/GPRS
سوال. آیا SIM800L از سیم کارت 4G پشتیبانی می کند؟
SIM800L فقط از خدمات 2G پشتیبانی می کند. وقتی سیم کارت روشن می شود، سعی می کند به نزدیک ترین اپراتورهای 2G متصل شود، بنابراین با ماژول SIM800L کاملاً خوب کار می کند.
سوال. آیا SIM800L می تواند به اینترنت وصل شود؟
SIM800L از سرویس رادیویی بسته عمومی (GPRS) برای اتصال به اینترنت با HTTP پشتیبانی می کند. ماژول دارای یک پشته TCP/IP داخلی است که با دستورات AT قابل دسترسی است. این می تواند برای ثبت داده های مداوم در شبکه های با پهنای باند کم بسیار مفید باشد.
سوال. چگونه بفهمم ماژول SIM800L کار می کند؟
SIM800L دارای مسائل جریان کشی است، بنابراین برای عملکرد صحیح باید دستگاه را با جریان 1 آمپر تغذیه کنید. اگر جریان SIM800L به اندازه کافی باشد، LED آنبورد شروع به چشمک زدن می کند. اگر هر ثانیه چشمک می زند، به این معنی است که در حال جستجوی یک شبکه است. وقتی هر سه ثانیه یکبار چشمک می زند، متوجه خواهید شد که آیا به شبکه متصل است یا خیر. اگر LED خیلی سریع چشمک می زند، به این معنی است که از طریق GPRS وصل شده است.
مدار ماژول SIM800L GSM/GPRS
مدار SIM800L بسیار ساده است زیرا آی سی SIM800L از تمام سخت افزارهای پیچیده را داخل خود جای داده است و برای راه اندازی کافیست چند سیم را به هم وصل کنید. اگر این مدار را در پروژه PCB خود پیاده سازی می کنید، این شماتیک برای شما بسیار مفید خواهد بود.

در شکل شماتیک، سوکت سیم کارت مستقیماً به ماژول SIM800L متصل است. ولتاژ سیم کارت فقط توسط ماژول SIM800 تنظیم می شود. و همچنین می توانید ببینید که یک خازن بزرگ تانتالیوم 100uF متصل به ماژول وجود دارد، این خازن همیشه مورد نیاز است زیرا ماژول به طور ناگهانی پیک های جریان را می کشد که نیاز ناگهانی برق توسط خازن تانتالیوم برآورده می شود.
اتصالات ماژول GSM/GPRS SIM800L به ESP32
اکنون که به طور کامل نحوه کار ماژول SIM800 را درک کرده ایم، می توانیم تمام اتصال های مورد نیاز را به برد ESP32 Dev متصل کرده و بررسی کنیم که آیا ماژول به درستی کار می کند یا خیر. در مرحله بعد کد را می نویسیم و از طریق ماژول پیامک ارسال می کنیم، شماتیک اتصال ماژول SIM800L با ESP32 در زیر نشان داده شده است.

کد برای ارتباط SIM800L با ESP32
کد ارتباط با ماژول SIM800L GSM/GPRS بسیار ساده و قابل درک است. کد از UART2 میکروکنترلر ESP32 برای ارتباط با ماژول SIM800 استفاده می کند و UART0 برای دیباگ استفاده می شود.
از آنجایی که این کد بسیار ساده است، برای کارکرد این کد به هیچ کتابخانه خارجی نیاز نداریم. کد خود را با تابع setup خود شروع می کنیم، در تابع setup از متد Serial.begin() و Serial2.begin() استفاده می کنیم تا UART0 و UART2 برد ESP32 را فعال کنیم، سپس 3 ثانیه صبر می کنیم تا کمی به ماژول سیم کارت برای روشن شدن زمان بدهیم، سپس تابع test_sim800_module() را که یک تابع سفارشی است فراخوانی می کنیم که بعداً توضیح خواهیم داد. در مرحله بعد، تابع send_SMS() را فراخوانی کردیم تا از طریق ماژول پیامکی ارسال کنیم تا بررسی کنیم که آیا کار می کند یا نه.
void setup() { Serial.begin(115200); Serial2.begin(115200); delay(3000); test_sim800_module(); send_SMS(); }
سپس تابع loop() خود را داریم. در تابع loop، ما فقط تابع updateSerial() را فراخوانی می کنیم تا هر دستور دریافتی را از طریق نمایشگر سریال آزمایش کنیم.
void loop() { updateSerial(); }
سپس تابع test_sim800_module() خود را داریم. این تابع از طریق برخی از دستورات AT ماژول sim800L می رود و خروجی به شما می گوید که آیا ماژول کار می کند یا خیر.
AT: AT ابتدایی ترین دستور است. با اجرای این و زدن enter، متن OK برمی گردد، یعنی ارتباط با ماژول سریال به درستی برقرار شده است
AT+CSQ: این دستور قدرت سیگنال را بررسی می کند. عدد صحیح اول قدرت را بر حسب دسی بل نمایش میدهد. برای کار با ماژول، قدرت سیگنال باید بیشتر از 5 باشد. هر چه این عدد بیشتر باشد، قدرت سیگنال بهتر است.
AT+CCID: این دستور شماره سیم کارت برمیگرداند. پس از اجرای دستور می توانید شماره را به صورت دستی تأیید کنید. همچنین می توان از این برای تست اتصال سیم کارت به ماژول استفاده کرد.
?AT+CREG: این دستور برای بررسی اینکه آیا در شبکه رجیستر شده اید استفاده می شود. عدد صحیح خروجی دوم باید 1 یا 5 باشد. 1 نشان دهنده این است که شما در شبکه خانگی هستید و 5 نشان دهنده این است که شما در شبکه رومینگ هستید، هر مقدار دیگر نشان می دهد که شما در شبکه رجیستر نشده اید.
ATI: این دستور نام و شماره ماژول را برمیگرداند.
?AT+COPS: این دستور بررسی می کند که شما به چه شبکه ای شبکه متصل هستید.
AT+CBC: این دستور در صورت اتصال باتری به ماژول، درصد باتری را برمی گرداند. دومین عدد در مقدار خروجی درصد باتری است.
void test_sim800_module() { Serial2.println("AT"); updateSerial(); Serial.println(); Serial2.println("AT+CSQ"); updateSerial(); Serial2.println("AT+CCID"); updateSerial(); Serial2.println("AT+CREG?"); updateSerial(); Serial2.println("ATI"); updateSerial() Serial2.println("AT+CBC"); updateSerial(); }
بعد، تابع updateSerial() را داریم، در این تابع، فقط دریافت پاسخ ها را بررسی میکنیم.
void updateSerial() { delay(500); while (Serial.available()) { Serial2.write(Serial.read());//Forward what Serial received to Software Serial Port } while (Serial2.available()) { Serial.write(Serial2.read());//Forward what Software Serial received to Serial Port } }
بعد، تابع send_SMS() را داریم. در این تابع، ماژول SIM800L را در حالت متنی پیکربندی می کنیم و تابع update serial را فراخوانی می کنیم تا بتوانیم خروجی را در پنجره نمایشگر سریال بررسی کنیم. در مرحله بعد، شماره تلفنی را که باید پیامک خود را به آن ارسال کنیم، تنظیم می کنیم. بعد، پیام خود را می نویسیم و با تابع Serial2.write(26) عدد 26 را می نویسیم، این دستور ctrl+C را روی سریال می نویسد که دستور ارسال پیام با سریال است.
void send_SMS() { Serial2.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); Serial2.println("AT+CMGS=\"+919804049270\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); Serial2.print("Circuit Digest"); //text content updateSerial(); Serial2.write(26); }
کارکرد ماژول SIM800L GSM/GPRS
تصویر زیر نحوه کارکرد SIM800L GSM/GPRS را نشان می دهد. ما کد را طوری نوشتهایم که پس از مقداردهی اولیه ESP32 بررسی کند که ماژول کار میکند و خروجی را در ویندوز مانیتور سریال بدهد. سپس، ماژول یک پیام کوتاه به یک شماره از پیش تعیین شده ارسال می کند.
کد کامل را از این قسمت میتوانید دانلود کنید همچنین در کادر زیر کد کامل آورده شده است.
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
delay(3000);
test_sim800_module();
send_SMS();
}
void loop() {
updateSerial();
}
void test_sim800_module()
{
Serial2.println("AT");
updateSerial();
Serial.println();
Serial2.println("AT+CSQ");
updateSerial();
Serial2.println("AT+CCID");
updateSerial();
Serial2.println("AT+CREG?");
updateSerial();
Serial2.println("ATI");
updateSerial();
Serial2.println("AT+CBC");
updateSerial();
}
void updateSerial()
{
delay(500);
while (Serial.available())
{
Serial2.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while (Serial2.available())
{
Serial.write(Serial2.read());//Forward what Software Serial received to Serial Port
}
}
void send_SMS()
{
Serial2.println("AT+CMGF=1"); // Configuring TEXT mode
updateSerial();
Serial2.println("AT+CMGS=\"+919804049270\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
updateSerial();
Serial2.print("Circuit Digest"); //text content
updateSerial();
Serial.println();
Serial.println("Message Sent");
Serial2.write(26);
}
سلام
میخواستم بدونم که به جای esp32 می تونیم از esp8266 استفاده کنیم مشکلی بوجود نمیاد؟
بله توی این پروژه امکانش هست و مشکلی نداره. در پروژه های پیچیده تر باید بعضی از کتابخانه ها هماهنگ بشوند و در بعضی از موارد هم ممکنه بدلیل کمبود پین یا حافظه و سرعت کمتر امکان جایگزینی نباشه
ممنون از پاسخگوییتون، سوال دیگه ای که داشتم این بود که چطور میتونم کدی بنویسم که وقتی یک sms به سیمکارت درون ماژول ارسال شد، بتونم شماره ارسال کننده پیام رو بدست بیارم؟
خواهش میکنم . هر زمان که ماژول پیامک رو دریافت میکنه در زمان خواندن پیامک داخل اون رشته ارسالی علاوه بر متن پیام تاریخ و ساعت و شماره ارسال کننده هم هست که باید با تحلیل رشته ها شماره ارسال کننده را از بقیه رشته جدا کنید.
سلام خسته نباشید ببخشید میخواستم بدونم وقتی به جایه esp32 از esp8266 استفاده میکنیم اتصال پایه ها باید به چه صورت باشد؟
درود بر شما، برای esp8266 باید یک پورت سریال نرم افزاری هم تعریف بفرمایید با نام Serial2 و بعد از این میتوانید استفاده کنید.
نکته: esp32 دو عدد پورت سریال داره اما چون Esp8266 یک عدد پورت سخت افزاری داره در نتیجه میشه سریال دوم را به عنوان پورت سریال نرم افزاری براش تعریف کنید.
در صورت نیاز به انجام پروژه نیز میتوانید از طریق راه های ارتباطی پیام ارسال بفرمایید.
سلام. من فکر کنم با آردوینو امکان تعریف کردن پورت سریال نرم افزاری برای esp8266 وجود ندارد و بایستی از پایتون یا از idf استفاده کرد.
سلام وقت بخیر. امکانش هست اگر از کتابخانه خود آردوینو نتونستید استفاده کنید، کتابخانه های دیگری هستند. همچنین خودتان میتوانید فانکشن های ارسال و دریافت را بنویسید فقط نیاز به درک خوبی از نحوه کارکرد پورت سریال دارید.