ماژول SIM800l یک ماژول چندکاره و مقرونبهصرفه GSM/GPRS است که کاربردهای مختلفی در اینترنت اشیا دارد. این ماژول را میتوان به آردوینو وصل و از آن برای انتقال بیسیم اطلاعات استفاده کرد. علاوه بر اینترنت اشیا، از این ماژول میتوان در هر زمینهای که انتقال دادههای بیسیم نیاز است، استفاده کرد. ما در این مقاله به بررسی ماژول SIM800l و نحوه راهاندازی آن توسط آردوینو پرداختهایم.
ماژول GSM یک ماژول مینیاتوری ساخته شرکت Simcom است که میتوان آن را بهراحتی به هر میکروکنترلر دلخواه وصل کرد. از این ماژول میتوان برای مخابره GPRS استفاده کرد. ماژول SIM800l میکروکنترلر را به شبکه موبایل وصل میکند و پس از آن امکان برقراری تماس، ارسال و دریافت پیام متنی و اتصال به اینترنت از طریق GPRS، TCP و IP فراهم میشود.
ماژول SIM800l از هر چهار باند فرکانس شبکه GPRS/GSM پشتیبانی میکند و در نتیجه میتوان در هر نقطه جهان از آن استفاده کرد. این کاربردهای مهم در کنار قیمت پایین و ردپای دیجیتالی کوچکی که ماژول SIM800l بهجا میگذارد، این ماژول را به بهترین گزینه برای هر پروژه نیازمند مخابرات از راه دور تبدیل میکند.
این ماژول از شبکههای 2G و 2.5G پشتیبانی میکند. با استفاده از این ماژول میتوان از پروتکلهای ارتباطی مختلف مانند UART، 12c و SPI استفاده کرد. این ویژگی باعث میشود به راحتی بتوان ماژول را به آردوینو متصل کرد.
این ماژول از چهار بخش اصلی تشکیل شده است؛ پردازنده مرکزی SIM800l GSM، چراغ LED نشاندهنده وضعیت، آنتنها و سوکت میکرو-سیم.
در بخش بالایی این ماژول، میتوان چیپ پردازنده SIM800l را مشاهده کرد. ماژول SIM800l به لطف این چیپ، در فرکانسهای ۸۵۰، ۹۰۰، ۱۸۰۰ و ۱۹۰۰ هرتز فعالیت میکند. ولتاژ عملکرد این چیپ بین ۳.۴ تا ۴.۴ ولت است که باعث میشود بتوان از باتریهای لیتیمی برای این ماژول استفاده کرد. این چیپ در بادریت بین ۱۲۰۰ تا ۱۱۵۲۰۰ فعالیت میکند و قابلیت تشخیص خودکار بادریت را دارد.
این ماژول دارای ۱۲ پین است که در لیست زیر نشان دادهایم:
آنتن از بخشهای ضروری ماژول SIM800l است که برای مخابرات صدا یا دادهها در کنار برخی از دستورات SIM استفاده میشود. برای اتصال آنتن به ماژول SIM800l دو راه وجود دارد. دو آنتن مختلف را میتوان به این ماژول وصل کرد؛ آنتن Helical GSM و آنتن 3dBi GSM.
آنتن Helical GSM از سیم تشکیل شده است که معمولا همراه با ماژول قرار دارد. این آنتن را میتوان به صورت مستقیم به PCB وصل کرد و در فضاهای محدود و کوچک کاربرد دارد. آنتن 3dBi GSM به اتصالدهنده U.FL در بخش چپ ماژول وصل میشود. این آنتن عملکرد بهتری دارد و تا زمانیکه آنتن در بیرون قرار گیرد، میتوانید ماژول را در یک جعبه فلزی قرار دهید.
خرید ماژول چهار باند SIM800L آپدیت شده با قابلیت GPRS / GSM / SMS
یکی از بزرگترین مشکلاتی که در زمان استفاده از این ماژول با آن مواجه خواهید شد، تامین انرژی مورد نیاز ماژول است. اگر منبع انرژی نتواند جریان مورد نیاز را تامین کند، ماژول نخواهد توانست تا با شبکه موبایل ارتباط برقرار کند و خاموش یا ریست خواهد شد.
محدوده ولتاژ عملکرد ماژول ۳.۴ تا ۴.۴ ولت است اما مشکل این است که این ماژول دارای تنظیمکننده ولتاژ نیست. به همین دلیل به یک منبع تغذیه خارجی با ولتاژی در محدوده عملکرد این ماژول (ولتاژ ایدهآل ۴.۱ ولت) نیاز خواهید داشت. همچنین این ماژول جریان زیادی لازم دارد و در اوج فعالیت ممکن است تا ۲ آمپر جریان نیاز داشته باشد. در نتیجه باید از منبع تغذیهای استفاده کنید که قابلیت تامین این جریان را داشته باشد.
یکی از بهترین گزینهها، باتریهای Li-Po هستند که بین ولتاژ ۳.۷ تا ۴.۲ ولت فعالیت میکنند. هر باتری که حداقل جریان ۱۲۰۰ میلیآمپرساعت را تامین کند، برای استفاده در ماژول SIM800l مناسب است.
راه دیگر استفاده از مبدل باک DC-DC است. توصیه ما استفاده از یک مبدل 2A مانند LM2596 با ولتاژ خروجی ۴ ولت است. این مبدلها بهرهوری بسیار بالاتری نسبت به رگولاتورهای ولتاژ خطی دارند.
در گوشه بالایی و سمت راست ماژول SIM800l، یک LED وجود دارد که نشاندهنده وضعیت اتصال به شبکه است. پس از وصل کردن ماژول به منبع تغذیه، این چراغ در سه حالت مختلف روشن خواهد شد که نشاندهنده سه حالت مختلف اتصال به شبکه هستند.
اگر هر یک ثانیه روشن و خاموش شود، نشاندهنده این است که ماژول کار میکند اما به شبکه متصل نشده است.
درصورتی که هر دو ثانیه یک بار روشن و خاموش شود، نشاندهنده فعال بودن ارتباط GPRS است.
اگر این چراغ هر سه ثانیه یک بار روشن و خاموش شود، نشاندهنده اتصال ماژول به شبکه موبایل و آمادگی آن برای دریافت و ارسال پیام و تماس است.
پس از این که با بخشهای مختلف این ماژول آشنا شدید، نوبت به وصل کردن آن به آردوینو و تنظیم آن میرسد. ما در ادامه این مقاله آموزش آردوینو ماژول SIM800l را برای شما فراهم کردهایم.
مرحله اول اتصال آنتن به ماژول و وارد کردن سیمکارت در سوکت سیمکارت است. پس از آن باید پینها را به آردوینو متصل کنید.
همواره پین GND را قبل از پین VCC متصل کرده و بعد از قطع کردن آن قطع کنید. همچنین اطمینان حاصل کنید که آردوینو و مدارتان به یک زمین مشترک متصل شده باشند.
پس از اتصال پینهای ماژول به آردوینو، باید امکان ارتباط این دو را باهم فراهم کنید. برای این کار میتوانید از کد زیر استفاده کنید.
#include <SoftwareSerial.h>//SIM800 TX is connected to Arduino D3 #define SIM800_TX_PIN 3 //SIM800 RX is connected to Arduino D2 #define SIM800_RX_PIN 2 //Create software serial object to communicate with SIM800 SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN); void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); while(!Serial); //Being serial communication with Arduino and SIM800 serialSIM800.begin(9600); delay(1000); Serial.println(“Setup Complete!”); } void loop() { //Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor if(serialSIM800.available()){ Serial.write(serialSIM800.read()); } //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800 if(Serial.available()){ serialSIM800.write(Serial.read()); } }
این کد ارتباط آردوینو با ماژول را فراهم میکند؛ پس از آپلود کد، سریال مانیتور را با باد ریت ۹۶۰۰ اجرا کنید. در بخش loop کد، آردوینو دائما منتظر دریافت ورودی از سریال مانیتور خواهد بود و آن را از طریق پین D2 به ماژول ارسال خواهد کرد. همچنین دائما پین D3 را برای دریافت پاسخ از ماژول خواهد خواند.
پس از این که ارتباط پایه ماژول با آردوینو را فراهم کردیم، با فرستادن دستورات AT با ماژول ارتباط برقرار میکنیم.
سادهترین دستور، AT است که یک مقدار اولیه به اتو بادر میدهد. درصورتی که مشکلی پیش نیاید، پیغام OK فرستاده خواهد شد و پس از آن امکان ارسال دستورات مختلف فراهم میشود.
دستور AT+CSQ قدرت سیگنال را بررسی میکند. اولین رقم در پاسخ خروجی قدرت سیگنال با واحد دسیبل است که باید بیشتر از ۵ باشد. هرچه قدرت سیگنال بیشتر باشد، بهتر است. این مقدار به موقعیت و نوع آنتن ماژول بستگی دارد.
دستور AT+CCID معتبر بودن سیمکارت را چک کرده و شماره سیمکارت را ارسال میکند.
دستور AT+CREG? اتصال به شبکه را بررسی میکند. رقم دوم در پاسخ خروجی باید ۱ یا ۵ باشد؛ ۱ نشاندهنده اتصال به شبکه خانگی و ۵ نشاندهنده اتصال به شبکه رومینگ است. هر رقم دیگری غیر از ۱ و ۵ نشاندهنده عدم اتصال به شبکه است.
با کد زیر دستورات AT را ماژول بفرستید.
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 updateSerial(); mySerial.println("AT+CREG?"); //Check whether it has registered in the network updateSerial();
میتوانید دستورات AT دیگری را هم به ماژول ارسال کنید.
دستور ATl نام ماژول و ویرایشها را برگشت میدهد.
دستور AT+COPS? نشان میدهد که به کدام شبکه وصل شدهاید.
دستور AT+COPS=? اپراتورهای موجود در شبکه را نشان میدهد.
دستور AT+CBC وضعیت باتری را نشان میدهد. رقم دوم درصد باتری و رقم سوم ولتاژ واقعی را با واحد میلیولت نشان میدهد.
پیش از این که کد را در سریال مانیتور وارد کنید، باید شمارهای که میخواهید به آن پیام بفرستید را در کد قرار دهید. داخل کد، ZZxxxxxxxxxx را با شماره مدنظرتان عوض کنید. درکد ZZ را با کد کشور و بقیه را با شماره ۱۰ رقمی بدون صفر جایگزین کنید.
از کد زیر برای فرستادن پیام استفاده کنید.
#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+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 } }
این کد تقریبا مشابه کد اتصال ماژول به آردوینو است و تنها بخشهایی از آن متفاوت است. پس از برقراری ارتباط، دستورات AT زیر را به ماژول ارسال کنید.
دستور AT+CMGF=1 فرمت پیام را به متن تغییر میدهد. فرمت پیشفرض PDU است.
دستور AT+CMGS= +ZZxxxxxxxxxx پیام را به شماره مشخصشده میفرستد. پس از این دستور، هر پیام متنی شامل کاراکتر ‘Ctrl+Z’ یک SMS تلقی میشود. این کاراکتر در واقع ۲۶مین کاراکتر غیرچاپی است در جدول ASCII به عنوان جایگزین تعریف شده است. به همین دلیل در انتهای کد ۲۶ فرستاده میشود.
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);
به دلیل این که میخواهیم فقط یک بار پیام را بفرستیم، لوپ را خالی قرار میدهیم. درصورتی که بخواهید بیش از یک بار این پیام را بفرستید، کلید ریست آردوینو را فشار دهید.
زمان تنظیم آردوینو برای خواندن پیامها است. این کد برای کارهایی مانند روشن یا خاموش کردن لامپ، روشن کردن فن یا آپپاش پس از دریافت یک پیام خاص مناسب است. از کد زیر برای خواندن SMS استفاده کنید.
#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+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled updateSerial(); } 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 } }
این کد هم تقریبا مانند کد قبلی است و بخشهایی از آن تفاوت دارد. پس از برقراری ارتباط از دستور AT+CMGF=1 برای تغییر فرمت به متن استفاده میکنیم.
سپس از دستور AT+CNMI=1,2,0,0,0 برای تعیین نحوه رفتار ماژول با آردوینو استفاده میکنیم. با این دستور میتوانید پیام را مستقیما به کامپیوترتان ارسال کنید یا آن را ذخیره کرده و محل ذخیره را به کامپیوترتان بفرستید.
mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled updateSerial();
توجه کنید که در این کد لوپ خالی نیست.
این کد میتواند در زمانهایی که میخواهید با آردوینو تماس اضطراری برقرار کنید، بسیار مفید باشد. قبل از اجرای کد باید شماره مورد نظر را جایگزین ZZxxxxxxxxxx در کد کنید.
#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, 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 } } توضیح کد از دستورات AT زیر برای برقراری تماس استفاده شده است. دستور ATD+ +ZZxxxxxxxxxx; با شماره مورد نظر تماس میگیرد؛ «;» را در پایان دستور فراموش نکنید. دستور ATH تماس را قطع میکند. 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();
ماژول SIM800l یک انتخاب عالی برای برقراری ارتباط 2G در پروژههایتان است. این ماژول ارزانقیمت و کوچک است و با آن میتوانید بهراحتی با دستورات AT ارتباط برقرار کنید. ما در این مقاله آموزش استفاده از این ماژول را با آردوینو ارائه دادیم تا بتوانید پیام فرستاده و دریافت کنید و بهراحتی با آردوینو با شماره موردنظرتان تماس بگیرید.
برای مطالعه سایر مقالات جم ترونیک میتوانید از مجله جم ترونیک دیدن کنید.