ماژول SIM800l یک ماژول چندکاره و مقرون‌به‌صرفه GSM/GPRS است که کاربردهای مختلفی در اینترنت اشیا دارد. این ماژول را می‌توان به آردوینو وصل و از آن برای انتقال بی‌سیم اطلاعات استفاده کرد. علاوه بر اینترنت اشیا، از این ماژول می‌توان در هر زمینه‌ای که انتقال داده‌های بی‌سیم نیاز است، استفاده کرد. ما در این مقاله به بررسی ماژول SIM800l و نحوه راه‌اندازی آن توسط آردوینو پرداخته‌ایم.

ماژول SIM800l چیست؟

ماژول GSM یک ماژول مینیاتوری ساخته شرکت Simcom است که می‌توان آن را به‌راحتی به هر میکروکنترلر دلخواه وصل کرد. از این ماژول می‌توان برای مخابره GPRS استفاده کرد. ماژول SIM800l میکروکنترلر را به شبکه موبایل وصل می‌کند و پس از آن امکان برقراری تماس، ارسال و دریافت پیام متنی و اتصال به اینترنت از طریق GPRS، TCP و IP فراهم می‌شود.

ماژول SIM800l از هر چهار باند فرکانس شبکه GPRS/GSM پشتیبانی می‌کند و در نتیجه می‌توان در هر نقطه‌ جهان از آن استفاده کرد. این کاربردهای مهم در کنار قیمت پایین و ردپای دیجیتالی کوچکی که ماژول SIM800l به‌جا می‌گذارد، این ماژول را به بهترین گزینه برای ‌هر پروژه نیازمند مخابرات از راه دور تبدیل می‌کند.

این ماژول از شبکه‌های 2G و 2.5G پشتیبانی می‌کند. با استفاده از این ماژول می‌توان از پروتکل‌های ارتباطی مختلف مانند UART، 12c و SPI  استفاده کرد. این ویژگی باعث می‌شود به راحتی بتوان ماژول را به آردوینو متصل کرد.

سخت‌افزار

این ماژول از چهار بخش اصلی تشکیل شده است؛ پردازنده مرکزی SIM800l GSM، چراغ LED نشان‌دهنده وضعیت،‌ آنتن‌ها و سوکت میکرو-سیم.

در بخش بالایی این ماژول، می‌توان چیپ پردازنده SIM800l را مشاهده کرد. ماژول SIM800l به لطف این چیپ،‌ در فرکانس‌های ۸۵۰، ۹۰۰، ۱۸۰۰ و ۱۹۰۰ هرتز فعالیت می‌کند. ولتاژ عملکرد این چیپ بین ۳.۴ تا ۴.۴ ولت است که باعث می‌شود بتوان از باتری‌های لیتیمی برای این ماژول استفاده کرد. این چیپ در بادریت بین ۱۲۰۰ تا ۱۱۵۲۰۰ فعالیت می‌کند و قابلیت تشخیص خودکار بادریت را دارد.

SIM800l GSM

پایه‌ها

این ماژول دارای ۱۲ پین است که در لیست زیر نشان داده‌ایم:

  •   NET: پین اتصال آنتن به ماژول
  •   VCC: پین منبع برق
  •   RST: پین ریست برای هارد ریست کردن ماژول
  •   RxD: پین گیرنده ماژول برای دریافت اطلاعات
  •   TxD: پین فرستنده اطلاعات از ماژول به میکروکنترلر
  •   GND: پین زمین
  •   RING: پین زنگ ماژول که در زمان دریافت پیام یا تماس مقدار آن تغییر می‌کند
  •   DTR: پین کنترل‌کننده حالت اسلیپ
  •   MIC: پین اتصال میکروفون
  •   SPK: پین اتصال اسپیکر

آنتن

آنتن از بخش‌های ضروری ماژول  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 با ولتاژ خروجی ۴ ولت است. این مبدل‌ها بهره‌وری بسیار بالاتری نسبت به رگولاتورهای ولتاژ خطی دارند.

اندیکاتور LED

در گوشه بالایی و سمت راست ماژول SIM800l، یک LED وجود دارد که نشان‌دهنده وضعیت اتصال به شبکه است. پس از وصل کردن ماژول به منبع تغذیه، این چراغ در سه حالت مختلف روشن خواهد شد که نشان‌دهنده سه حالت مختلف اتصال به شبکه هستند.

اگر هر یک ثانیه روشن و خاموش شود، نشان‌دهنده این است که ماژول کار می‌کند اما به شبکه متصل نشده است.

درصورتی که هر دو ثانیه یک بار روشن و خاموش شود، نشان‌دهنده فعال بودن ارتباط GPRS است.

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

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

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

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

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

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

اتصال پایه‌ها

  1.     پین Tx را پین دیجیتال ۳ آردوینو وصل کنید تا ارتباط از طریق پروتکل UART برقرار شود.
  2.     نمی‌توان پین Rx را مستقیما به آردوینو وصل کرد؛ زیرا سطح منطقی آردوینو پنج ولت و سطح منطقی ماژول ۳.۳ ولت است. با اتصال یک مقاومت ۱۰هزار اهمی بین پین Rx و پین دیجیتال ۲ آردوینو و یک مقاومت ۲۰هزار اهمی بین این پین و پین GND آردوینو،‌ می‌توان این مشکل را حل کرد.
  3.     پین GND ماژول را به پین GND آردوینو وصل کنید.

همواره پین GND را قبل از پین VCC متصل کرده و بعد از قطع کردن آن قطع کنید. همچنین اطمینان حاصل کنید که آردوینو و مدارتان به یک زمین مشترک متصل شده باشند.

ماژول SIM800l - اتصال پایه ها

 

کدنویسی

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

#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 با ماژول ارتباط برقرار می‌کنیم.

ساده‌ترین دستور، 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 وضعیت باتری را نشان می‌دهد. رقم دوم درصد باتری و رقم سوم ولتاژ واقعی را با واحد میلی‌ولت نشان می‌دهد.

 

آموزش فرستادن SMS با آردوینو

پیش از این که کد را در سریال مانیتور وارد کنید، باید شماره‌ای که می‌خواهید به آن پیام بفرستید را در کد قرار دهید. داخل کد، 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 با آردوینو

زمان تنظیم آردوینو برای خواندن پیام‌ها است. این کد برای کارهایی مانند روشن یا خاموش کردن لامپ، روشن کردن فن یا آپ‌پاش پس از دریافت یک پیام خاص مناسب است. از کد زیر برای خواندن 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 ارتباط برقرار کنید. ما در این مقاله آموزش استفاده از این ماژول را با آردوینو ارائه دادیم تا بتوانید پیام فرستاده و دریافت کنید و به‌راحتی با آردوینو با شماره موردنظرتان تماس بگیرید.

برای مطالعه سایر مقالات جم ترونیک می‌توانید از مجله جم ترونیک دیدن کنید.

فروشگاه
سایدبار
0 علاقه مندی
0 محصول سبد خرید
حساب کاربری من