آموزش Espآموزش ESP32آموزش اینترنت اشیاپروژه های Esp

اتصال Sim800l به برد ESP32 (آموزش جامع)

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

شرح پایه های ماژول SIM800L 

ماژول SIM800L GSM/GPRS 12 پایه دارد که این پایه ها، NET،  VCC، RST، RXD، TXD، GND، SPK-، SPK+، MIC-، MIC+، DTR و RING هستند.

شرح پایه های ماژول SIM800L 

  • NET: این پایه، پایه ایست که میتوانید به آن آنتن مارپیچی که همراه ماژول ارائه میشود را لحیم کنید.
  • VCC: این پایه، پایه تغذیه ماژول بوده و باید به ولتاژی بین 3.4 تا 4.4 ولت وصل شود. اتصال این ماژول به ولتاژ تغذیه 5 ولت آن را میسوزاند و اگر آن را به 3.3 ولت وصل کنیم، روشن نمیشود. توصیه میشود برای این ماژول از یک باتری لیتیوم یا مبدل باک با ظرفیت جریان 2 آمپری استفاده شود.
  • RST: این پایه، پایه ریست سخت افزاری ماژول SIM800L GSM/GPRS است. اگر در برقراری ارتباط با این پایه مشکل دارید، پایه را به مدت 10 میلی ثانیه در وضعیت LOW قرار دهید.
  • RXD: این پایه، پایه RX ماژول بوده و در ارتباط سریال استفاده میشود.
  • TXD: این پایه، پایه TX ماژول بوده و در ارتباط سریال استفاده میشود.
  • GND: این پایه، پایه زمین ماژول است و باید به پایه GND میکروکنترلر متصل شود.
  • RING: این پایه، پایه نشانگر تماس یا زنگ ماژول است. این پایه معمولا active high است (یعنی وقتی در وضعیت HIGH قرار میگیرد، فعال میشود.) اما به مدت 120 میلی ثانیه به حالت LOW رفته تا تماس های ورودی را نشان دهد. همچنین این پایه، به گونه ای پیکربندی میشود که هنگام دریافت SMS پالس ارسال کند.
  • DTR: این پایه، میتواند برای به خواب عمیق یا Deep Sleep رفتن ماژول استفاده شود. HIGH کردن این پایه، ماژول را به مد خواب عمیق برده و ارتباط سریال را غیرفعال میکند. LOW کردن دوباره این پایه، ماژول را از مد خواب عمیق خارج میکند.
  • MIC+-: این دو پایه برای اتصال میکروفن خارجی به ماژول استفاده میشوند.
  • SPK+-: این دو پایه برای اتصال بلندگو خارجی به ماژول استفاده میشوند.

اجزای ماژول SIM800L GSM/GPRS

ماژول SIM800L یک ماژول فشرده، همه کاره و آماده به کار GSM و GPRS است. اجزا تشکیل دهنده این ماژول در تصویر زیر نشان داده شده اند.

اجزای ماژول SIM800L GSM/GPRS

اگر با دقت به ماژول SIM800L نگاه کنید، متوجه میشوید که چیز زیادی روی PCB وجود ندارد. در قسمت جلویی PCB، یک کانکتور UFL و خود ماژول SIM800L را داریم. همچنین چند خازن برای جداسازی و دیکوپلینگ و یک مقاومت 1 کیلویی هم برای محدودسازی جریان LED داریم. در نهایت هم یک خازن بزرگ 100 میکروفارادی تانتال 16V روی بورد داریم. در پشت بورد هم یک نگهدارنده سیم کارت که درواقع یک کانکتور نوع push-to-lock است، داریم. یعنی کافی است سیم کارت را وارد کرده و با فشار دادن آن را به کار بیندازید.

نگاهی اجمالی به ماژول SIM800L GSM/GPRS

در قلب بورد بریک اوت، یک ماژول SIM800L GSM/GPRS وجود دارد که توسط SimCom ساخته شده است. همانطور که در قسمت پین اوت ماژول اشاره کردیم، ولتاژ کاری این دستگاه بین 3.4 تا 4.4 ولت است. یعنی میتوانیم ماژول را مستقیما از طریق یک باتری لیتیوم پلیمر تغذیه کنیم. همچنین با این کار، تمام پایه های قابل استفاده به  یک پایه 0.1 اینچی بریک اوت میشوند. (یعنی از نظر الکتریکی قابل استفاده میشوند. اگر پایه ای بریک اوت نشده باشد، نمیتوانیم آن را به دستگاه دیگری متصل کنیم و یا از طریق آن با دنیای بیرون ارتباط بگیریم و عملا پایه غیرقابل استفاده است.) که سبب میشود این ماژول مناسب کار با بردبورد شود.

این ماژول همچنین برای راحتی کار نرخ باد را به صورت اتوماتیک شناسایی میکند. ماژول برای اتصال به شبکه، به یک آنتن خارجی نیاز دارد. برای این بورد 2 گزینه در دسترس داریم. در پکیجینگ و بسته بندی ماژول، یک آنتن مارپیچی وجود دارد که میتوانیم آن را مستقیما روی پایه NET لحیم کنیم. اما اگر بخواهیم آنتن را از ماژول دور نگاه داریم، آنگاه گزینه پیش روی ما اتصال یک آنتن خارجی با استفاده از کانکتور روی بورد UFL است. هر سیمکارتی با فناوری 2G میتواند به این ماژول متصل شده و با آن کار کند.

LED نشانگر وضعیت

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

اگر LED هر یک ثانیه یکبار چشمک بزند

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

اگر LED هر دو ثانیه یکبار چشمک بزند

اگر LED هر 2 ثانیه یکبار چشمک بزند

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

اگر LED هر سه ثانیه یکبار چشمک بزند

اگر LED هر سه ثانیه یکبار چشمک بزند

هنگامی که LED روی ماژول، هر سه ثانیه یکبار چشمک میزند، یعنی با موفقیت به شبکه متصل شده و میتواند پیام های صوتی یا SMS را ارسال کرده و دریافت کند.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

سوالات متداول درباره SIM800L GSM/GPRS

1-آیا ماژول SIM800L  سیم کارت های 4G را پشتیبانی میکند؟

SIM800L تنها از سرویس های 2G پشتیبانی میکند. میتوانید با وارد کردن یک سیمکارت 2G به ماژول این موضوع را بررسی کنید. من از سیمکارت 4G ایرتل و سیم کارت های 4G ودافون استفاده میکنم. هنگامی که سیم کارت روشن میشود، سعی میکند که به نزدیک ترین حامل های 2G متصل شود پس سیم کارت به خوبی با ماژول SIM800L کار خواهد کرد.

2-ماژول SIM800L میتواند به اینترنت متصل شود؟

SIM800L از سرویس GPRS (سرویس بسته امواج رادیویی) برای اتصال به اینترنت با پروتکل HTTP استفاده میکند. این ماژول یک استک یا پشته TCP/IP داخلی داشته که میتوان با دستورات AT به آن دسترسی پیدا کرد و برای ثبت داده های مداوم در شبکه هایی که پهنای باند کمی دارند بسیار مفید و مناسب است.

3-چگونه مطمئن شویم ماژول SIM800L کار میکند؟

میتوانید برای عملکرد مناسب این دستگاه را با جریان 1 آمپر تغذیه کنید. اگر تغذیه برای ماژول کافی باشد، LED روی بورد شروع به چشمک زدن میکند. اگر هر ثانیه یکبار چشمک بزند، یعنی در حال جست و جوی شبکه است. اما اگر هر سه ثانیه یکبار چشمک بزند، یعنی به شبکه متصل شده است. اگر LED خیلی سریع چشمک میزند، یعنی از طریق GPRS متصل شده است.

مدار اتصال ماژول SIM800L GSM/GPRS

مدار اتصال این ماژول بسیار آسان است، زیرا که خود تراشه SIM800L تمام سخت افزار پیچیده مورد نیاز را درون خود داشته و کافی است شما آن را با اتصال چند سیم راه اندازی کنید. اگر در حال پیاده سازی این مدار روی پروژه PCB خود هستید، شماتیک زیر بسیار برایتان مفید خواهد بود.

سیم 800 با ESP32

درشماتیک، نگهدارنده سیمکارت مستقیما به ماژول SIM800L متصل شده است. تغذیه سیمکارت تنها از طریق ماژول SIM800L تامین میشود. همچنین میتوانید ببینید که یک خازن بزرگ تانتال 100 میکروفارادی به ماژول متصل شده است. این اتصال ضروری است زیرا که ماژول در لحظه روشن شدن، جریان زیادی از مدار کشیده و یک اسپایک یا پرش جریان ایجاد میکند و نیاز داریم که توان مورد نیاز را از طریق یک خازن دیکوپلینگ تامین کنیم. علاوه بر آن، در کنار LED نشانگر، یک خازن تانتال و یک خازن دیکوپلینگ ( دکوپل) داریم.

اتصالات مدار ماژول SIM800L GSM/GPRS به ESP32

حال که به طور کامل با نحوه کار ماژول SIM800L آشنا شدیم، میتوانیم تمام اتصالات لازم را به بورد ESP32 Dev انجام داده و درست کار کردن یا نکردن آن را چک کنیم. سپس، کد آردینو را نوشته و یک SMS را با ماژول ارسال کنیم. مدار اتصال ماژول SIM800L و ESP32 در تصویر زیر نشان داده شده است.

مدار ماژول SIM800L GSM/GPRS به ESP32

کد اتصال ماژول SIM800L به ESP32

کد ارتباط ماژول SIM800L GSM/GPRS به ESP32 بسیارساده و قابل درک است. کد از UART2 میکروکنترلر ESP32 برای ارتباط با ماژول SIM800L و از UART0 برای دیباگ کردن و اشکال زدایی استفاده میکند.

از انجایی که این کد بسیار آسان است، نیازی به فراخوانی کتابخانه های خارجی نداریم و کدمان را مستقیما با تابع ()setup شروع میکنیم. در تابع ()setup با استفاده از دو متد ()Serial.begin  و ()UART0 /UART2 ،Serial2.begin میکروکنترلر را فعال کرده و به ماژول سیمکارت 3 ثانیه زمان میدهیم تا راه اندازی شود. سپس تابع ()test_sim800_module که یک تابع سفارشی است را فراخوانی میکنیم. بعدا درباره این تابع بیشتر توضیح میدهیم. سپس تابع ()send_SMS را برای ارسال SMS از طریق ماژول فراخوانی میکنیم تا مطمئن شویم که ماژول کار میکند.

void setup() {
  Serial.begin(115200);
  Serial2.begin(115200);
  delay(3000);
  test_sim800_module();
  send_SMS();
}

در ادامه به تابع ()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” نشان میدهد که در شبکه رومینگ رجیستر شده اید. هرعدد دیگری به جز 5 و1 بیانگر این است که در هیچ شبکه ای رجیستر نشده اید.
  • 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 میرسیم. در این تابع، تنها دو تابع یا متد Serial و Serial2 را در یک حلقه callback  بررسی میکنیم.

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 را در مد متنی پیکربندی کرده و تابع ()updateSerial را به منظور بررسی خروجی پنجره سریال مانیتور فراخوانی میکنیم. سپس، شماره تلفنی که میخواهیم به آن SMS ارسال کنیم را در کد وارد کرده، پیام خود را نوشته و 26 را در تابع ()Serial2.write مینویسیم. ( به شکل Serial2.write(26))

با اینکار ctrl+C را که همان دستور ارسال پیام است را روی Serial مینویسم.

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 را نشان میدهد. ما کد را به گونه ای نوشته ایم که پس از روشن شدن میکروکنترلر، عملکرد ماژول را بررسی کرده و خروجی را در پنجره سریال مانیتور چاپ کند.

پس از اینکه بررسی عملکرد ماژول به پایان رسید، ماژول یک SMS به شماره ای که در کد قرار داده ایم ارسال میکند که همه اینها به کد وابسته است.

موارد موجود در فایل : سورس کامل

3 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

5 نظر

  1. با سلام و خسته نباشید ببخشید در برد esp32 مثل اردوینو امکان تعریف سایر پین ها به عنوان رابط سریال وجود دارد مثلا می‌خواهیم دو وسیله که رابط سریال دارد مثلا همین sim800 به همراه ماژول gps که آن هم رابط سریال دارد متصل کنیم در اردینو با کتابخانه software serial این کار براحتی انجام میشود آیا در esp32 کتابخانه ای برای این کار وجود دارد ؟ خیلی ممنون میشوم جواب بدهید

    1. سلام عزیز
      کتابخانه espsoftwareserial را تست کنید.

  2. سلام وقت بخیر برای اتصال پایه های RX به همدیگر نیاز به تقسیم مقاومتی نداریم؟

  3. سلام وقت بخیر
    برای یه پروژه ای که دارم انجام میدم نیاز دارم که وای فای ESP32 رو وصل کنم به دیتای Sim800L ولی برای اینکار باید بتونم دیتای سیمکارت رو به اشتراک بذارم که هیچ راه حلی براش پیدا نکردم.
    ایده ای داری که چطور میتونم اینکار رو انجام بدم؟

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *