سیم کارت GSM - GPRS

ارسال و دریافت اطلاعات در بستر اینترنت به کمک ماژول‌های سیم کام

sending-data-via-sim-com-module-digispark-
نوشته شده توسط معین صابری

کنترل وسایل الکترونیکی از راه دور، همواره یکی از دغدغه‌های طراحان الکترونیک، صاحبان صنایع و مشاغل بوده است. با نگاهی مختصر به پروژه‌های هوشمند سازی از راه دور، نظیر کنترل پمپ‌های آب از راه دور، فرمان به انواع کلیدها و یا رله از فواصل بسیار طولانی و سایر پروژه‌هایی از این دست. می‌توان مشاهده نمود که غالب معمول این نوع پروژه‌ها، به کمک ماژول‌های سیم کارتی و از نوع سیم کام، نظیر ماژول‌های SIMCOM، امکان ارتباط از راه دور با کاربر را فراهم می‌نمایند. از طرفی دیگر، در اکثر این پروژه‌ها، به منظور ارسال و دریافت اطلاعات، از سامانه پیام کوتاه(SMS) استفاده شده است. حال آنکه اولا ارسال و دریافت پیامک، از دسته روال‌هایی زمانبر با هزینه نسبتا بالایی است. از طرفی، امروزه با پیشرفت فناوری، شاهد پوشش حداکثری شبکه اینترنت در اقصی نقاط کشور هستیم. همچنین، ماژول‌های مخابراتی شرکت سیم کام، علاوه بر توانایی در برقراری تماس صوتی و ارسال و دریافت پیامک، امکان اتصال به شبکه اینترنت را نیز فراهم می‌آورند.

این ماژول‌ها، توانایی اتصال به شبکه اینترنت را از طریق کلیه پروتکل‌های اینترنتی معمول، نظیر پروتکل HTTP، پروتکل FTP و حتی پروتکل SMTP (جهت ارسال و دریافت ایمیل) را فراهم می‌آورند. لازم به ذکر است این ماژول‌ها تنها به کمک یک سیم کارت و بدون نیاز به هیچ تجهیزات اضافه‌ای، برخلاف ماژول‌های وای فای نظیر ESP که برای اتصال به شبکه اینترنت نیاز به یک مودم دارند، ابتدا به شبکه اینترنت و سپس به سرور مورد نظر متصل می‌گردند. در این آموزش، ابتدا به بررسی دستورات دو پروتکل HTTP می‌پردازیم. سپس در آموزش‌های بعدی، با یک پروژه عملی، آن‌ را تست خواهیم نمود.

 


پروتکل HTTP


این پروتکل که به منظور ارسال و دریافت داده استفاده می‌گردد، در ماژول سیم کام پشتیبانی می‌شود. به عنوان مختصری کوتاه از عملکرد این پروتکل، وب سایتی را  در نظر بگیرید که کاربران برای ورود به آن، می‌بایست نام کاربری و رمز عبور خود را وارد نمایند. این داده‌ها، از طریق همین پروتکل به سرور ارسال می‌گردند و سرور پس از صحت سنجی،فرمان دسترسی و یا عدم دسترسی را برای کاربر را صادر می‌نماید. در سطح این پروتکل، دو متد کلی برای ارسال داده وجود دارد، یکی متد GET و دیگری متد POST. ما دراینجا متد GET را معرفی می‌نماییم. فرض کنید تصمیم داریم رطوبت خوانده شده از سنسور DHT11 را به کمک ماژول SIM800L، به یک سرور ارسال نماییم. از طرفی دیگر، فرض کنید در سمت سرور، میزان رطوبت در متغیری با نام hum تعریف شده است. بنابراین، ارسال طوبت تحت این متد، به فرمت زیر خواهد بود.

در عبارت بالا، عبارت GET بیانگر متد است. عبارت data.php/ بیانگر آدرس صفحه‌ای از سرور بوده که قرار است داده‌ها به آن ارسال گردد. عبارت ? بیانگر شروع بازه متغیرها نیز می‌باشد که پس از آن، متغیر مورد نظر قرار گرفته است.

 


کدهای PHP سمت سرور


توجه نمایید که در اینجا، سرور مورد نظر لینوکس فرض شده است، بنابراین، در سمت سرور، ابتدا صفحه‌ای با نام data.php ایجاد نموده و با قرار دادن قطعه کد زیر در آن، می‌توانیم داده‌های ارسالی را دریافت نموده و سپس در یک فایل، آن‌ها را ذخیره نماییم.

در قطعه کد فوق، عبارت $_GET[“hum”] وظیفه دریافت داده‌های ارسالی و ذخیره آن در متغیری با نام $s را دارد.  دو خط بعدی، همانند سایر زبان‌های برنامه نویسی، وظیفه باز کردن فایل و سپس ذخیره داده‌ها در فایل را بر عهده دارند. دست آخر، فایل مورد نظر جهت استفاده مجدد، می‌بایست بسته شود. در اینجا، ذکر این نکته ضروری به نظر می‌رسد که دستورات فوق، تنها زمانی اجرا می‌شوند که داده‌ای به صفحه مورد نظر، یعنی data.php ارسال گردد.

 


دستورات AT ماژول سیم کام


پس از بررسی قسمت سرور و یا گیرنده، نوبت به قسمت فرستنده می‌رسد. همانطور که مستحضر هستید، ماژول‌های سیم کام به کمک فرامینی، معروف به AT-COMMAND ها کنترل می‌گردند. در اینجا، دستورات لازم جهت اتصال به اینترنت و ارسال داده‌ها تحت پروتکل HTTP، به کمک متد GET مورد بحث و بررسی قرار می‌گیرند. پیش از هر چیز، می‌بایست از فعال بودن GPRS بر روی سیم کارت خود، اطمینان حاصل نمایید. برای اینکار، می‌بایست مراحل ودستورات ارائه شده از سوی اپراتور را دنبال نمایید. پس از حصول اطمینان از فعال بودن اینترنت بر روی سیم کارت ، آن را در یکی از ماژول‌های شرکت سیم کام، به عنوان مثال از سری ۸۰۰، ماژول SIM800L قرار دهید. پس از اتصال به شبکه، ابتدا دستور زیر را جهت اتصال به اینترنت، دستور زیر را به ماژول ارسال می‌نماییم:

 

پس از چند ثانیه، عبارت OK که نشان از اتصال به اینترنت بوده است، از سوی ماژول ارسال خواهد شد. پس از اتصال به اینترنت، نیاز است تا به سرور مورد نظر، متصل شویم. فرض کنید آدرس سرور، test.ir باشد و صفحه data.php، به عنوان گیرنده و ذخیره کننده داده، تعریف شده باشد. در این مرحله، به کمک دستور زیر، به سرور متصل خواهیم شد:

در دستور فوق، عبارت TCP نوع ارتباط را مشخص می‌نماید. این ارتباط می‌تواند همانند دستور فوق TCP ویا UDP باشد. قسمت بعد نام سرور را مشخص می‌نماید و عدد ۸۰ شماره پورت است. پس از ارسال دستور فوق، ابتدا پیغام ok وبعد از چند لحظه، در صورت برقراری موفقیت آمیز ارتباط با سرور، شاهد ارسال عبارت CONNECT OK از سوی ماژول خواهیم بود.

 


ارسال داده از ماژول سیم کام


پس از برقراری ارتباط موفقیت آمیز با سرور، نوبت به بخش مهم پروژه، یعنی ارسال داده‌ها می‌رسد. در این مرحله می‌بایست داده خود را با فرمت متد GET ، همانطور که پیشتر درباره آن بحث شد، ارسال نماییم. نکته حائز اهمیت در این مورد آن است که به منظور ارسال داده‌ها تحت پروتکل HTTP، می‌بایست یکسری اطلاعات به همراه داده مورد نظر ارسال گردند. این داده‌ها تعیین کننده ساختار پروتکل هستند.

در عبارت فوق، Host بیانگر نام همان سروری است که داده‌ها می‌بایست به آن ارسال گردند. عبارات <cr> و <lf> نیز به ترتیب معادل “\r” و “\n” در زبان‌های برنامه‌نویسی هستند. در این قسمت، در ابتدا می‌بایست از حجم داده‌های ارسالی(تعداد بایت‌های ارسالی و یا تعداد کاراکترهای ارسالی) مطلع باشیم. این موضوع بدان معنی است که حجم کلیه اطلاعات ارسالی به سرور، شامل داده مورد نظر و فرمت ارسالی می‌شود که با ارسال دستور زیر، تعداد بایت‌های ارسالی مشخص می‌گردند.

 

دستور فوق، بیانگر ارسال x بایت به سرور است. پس از ارسال دستور فوق، ماژول عبارت >  را بر می‌گرداند. در این لحظه می‌بایست داده خود را، که همان میزان رطوبت محیط است،  به همراه فرمت پروتکل HTTP، ارسال نماییم. پس از ارسال دستور فوق، در صورتیکه داده به طور صحیح به سرور ارسال گردیده باشد، ماژول رشته‌ای شامل عبارت ۲۰۰ok را نیز برخواهد گرداند. در صورت بروز خطا، کد خطای مورد نظر، در عبارت برگشتی لحاظ خواهد شد. به عنوان مثال، خطای ۴۰۴ به معنای عدم وجود صفحه مورد نظر در سرور می‌باشد. پس از اتمام روال ارسال، با ارسال دستور AT+CIPCLOSE به ماژول، ارتباط را قطع می‌نماییم تا بتوانیم مجددا به سرور داده ارسال نماییم. مجددا خاطرنشان می‌شویم که هدف این آموزش، آشنایی اولیه با پروتکل HTTP و ارسال داده به کمک متد GET در سطح ماژول‌های SIMCOM می‌باشد. در آموزش‌های بعدی، به صورت عملی این موضوع بررسی خواهد شد.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۶ دیدگاه

  • یه سوال با ماژول sim800l اگه بخوایم دیتا سنسور dht22رو بفرستیم به سرور مورد نظر سرعت این ماژول چطور هست یعنی آیا با سرعت ۲Gکه داره با چه سرعتی دیتا رو به سرور می‌فرسته ؟
    امکان ساخت یک ویدعو ویا یه پروژه برای این ارتباط هستش؟

    • سلام
      بله، با توجه به اینکه داده های شما حجمی ندارند، با سرعت بسیار بالایی به سرور ارسال خواهند شد. در مورد ویدئو نیز، سعی بر این است که آموزشی دیگری در این زمینه تهیه گردد تا به صورت عملی هم، شاهد ارسال داده ها باشیم.

  • بعد سوال دیگ ای داشتم نیازی برای کد نوشتن برای ماژول سیم کارت نیست ؟ با دستورات کار راه میفته؟
    خیلی کلی گفتید امکانش هست یکم آموزش رو باز تر و با حزعیات بگید مثلا قسمت سرور برای راه اندازی سرور چه کار باید انجام داد و …..

    • کافیست دستورات به ماژول ارسال گردند، این دستورات می توانند به کمک برد اردویینو و یا هر میکروکنترلری که دارای پورت سریال UART است، ارسال گردد.
      برای راه اندازی سرور لینوکسی، ابتدا می بایست با مبانی زبان PHP آشنا باشید.
      پس از آن، کدهای قرار داده شده در آموزش را مطابق آنچه که در آموزش بیان گردید، می بایست در سرور آپلود نمایید.

  • سلام

    من میخواستم از ماژول سیم کارت و رزبری پای استفاده کنم تا اینترنت رو به رزبری بدم و از رزبری با یه کارت شبکه بیسیم دیگه که دارم اینترنت رو پخش کنم ، درواقع رزبری پای رو به یه مودم سیم کارتی تبدیل کنم .
    امکان این موضوع هست !؟ میشه راهنمایی کنید ؟!

  • سلام مهندس
    دوتا سوال داشتم
    هر وقت کد ارسال ایمیل رو مینویسم
    کد خطای ۶۷ رو میده
    دریافتدریافت ایمیل کد ۶۸
    بعد ی پیغام ب ایمیلم میاد میگه یکی قصد وارد شدن ب ایمیل شما رو داره
    نمیدونم مشکل از همینه ولی من میرم تو ایمیل قبول میکنم خودمم
    فرداش دوباره میخوام وارد بشم دوباره پیغامه میاد یکی قصد ورود داره
    سوال دومم
    ایا این ماژول ها امکال دریافت اطلاعات دریافت ی متغییر دریافت هر چیزی از سمت وب رو داره مثلا ما توی وب ی دکمه ی مقداری رو وارد کنیم این توی اردینو دریافت کنه

  • سلام
    برای دریافت جیمیل هنگامی ک جیمیل دریافت میشه اصل اون پیغامی ک نشون میده جز صندوق ورودی من نیست
    امکانش هست راهنمایی کنید
    AT+EMAILCID=1
    OK
    AT+EMAILTO=30
    OK
    AT+EMAILSSL=1
    OK
    AT+POP3SRV=”POP.GMAIL.COM”,”ahmadgholami930@GMAIL.COM”,”a859589458585858″ ,995
    OK
    AT+POP3IN
    OK

    +POP3IN: 1
    AT+POP3NUM
    OK
    +POP3NUM: 1,521,10076759
    AT+POP3LIST=1
    OK
    +POP3LIST: 1,1,1058
    AT+POP3CMD=4,1
    OK
    +POP3CMD: 1
    +POP3READ: 3,1063
    AT+POP3READ=1460
    +POP3READ: 2,1063
    Subject: SMS with +989914
    MIME-Version: 1.0
    Content-Type: text/plain;
    charset=utf-8
    From: +989914
    To: ahma*********0@gmail.com
    References:
    Message-ID:
    X-smssync-address: +989914
    X-smssync-datatype: SMS
    X-smssync-backup-time: 4 Apr 2017 20:16:46 GMT
    X-smssync-version: 1554
    Date: Thu, 31 Jul 2014 04:58:52 +0430
    X-smssync-id: 645
    X-smssync-type: 1
    X-smssync-date: 1406766532305
    X-smssync-thread: 614
    X-smssync-read: 1
    X-smssync-status: -1
    X-smssync-protocol: 0
    X-smssync-service_center: +9891100500
    Content-Transfer-Encoding: quoted-printable

    =D8=B4=D9=85=D8=A7
    =DB=8C=DA=A9 =D8=AA=D9=85=D8=A7=D8=B3 =D8=A8=DB=8C =D9=BE=D8=A7=D8=B3=D8=
    =AE =D8=A7=D8=B2 07153752800 =D8=AF=D8=B1 18:30 21/11/1395=D8=AF=D8=A7=D8=
    =B1=DB=8C=D8=AF=20
    =D8=AE=D8=B1=DB=8C=D8=AF =D8=B1=D8=A7=D8=AD=D8=AA =D8=B4=D8=A7=D8=B1=DA=98=
    =D9=88 =D9=BE=D8=B1=D8=AF=D8=A7=D8=AE=D8=AA =D9=82=D8=A8=D8=B6 =D8=A8=D8=
    =A7 #1*
    .

    OK

    +POP3OUT: 63

    • سلام خدمت شما
      در رابطه با ایمیل، در نظر داشته باشید که سرویس gmail دارای لایه های متعدد حفاظتی است، برای ارسال ایمیل به کمک ماژول سیم کام و از طریق جیمیل، نیاز دارید تا از طریق تنظیمات امنیتی، پاین ترین سطح امنیت را برای آن انتخاب نمایید تا ماژول سیم کام نیز بتواند به ایمیل شما دسترسی داشته باشد.
      در رابطه با ارسال و دریافت متغیر از طریق سرور، ماژول های سیم کام نیز این امکان برایشان فراهم است، همانطور که در این آموزش مشاهده نمودید، توانستیم دادهای را به سرور ارسال نماییم. برای دریافت داده از سرور، روال کار دقیقا به همین منوال است، این روال بدین صورت خواهد بود که ماژول مخابراتی داده ای را به سرور ارسال می نماید، در اینجا نیازی نیست حتما نوع خاصی داده ارسال شود و صرفا هدف باز نمودن صفحه مورد نظر در سرور است. پس از باز شدن صفحه مورد نظر توسط ماژول مخابراتی، سرور اطلاعاتی را به ماژول برمیگرداند که در اینجا میتوانید داده مورد نظر در بین داده هایی قرار دهید که قرار است به ماژول برگردانده شود. مثلا فرض کنید در سرور خود، دو کلید قرار داده اید. با فشردن یکی عدد صفر، در یک فایلی در سرور نوشته می شود. همچنین با فشردن دیگری، عدد یک در همان فایل نوشته می شود. حال در صفحه ای که قرار است ماژول سیم کام آن را باز نماید، دستورات آن را به شکل زیر تغییر دهید:
      php?>
      ;(“$myfile = fopen(“data.txt”, “r”) or die(“Unable to open file
      ;((” echo fread($myfile,filesize(“data.txt
      ; (fclose($myfile
      <?
      در کد فوق، زمانیکه صفحه مورد نظر باز می شود، اطلاعات مربوط به فایل توسط تابع echo چاپ شده و توسط ماژ<ل سیم کام قابل دریافت است.

  • با سلام وخسته نباشید.من یه ماژول یا بردی میخوام که بتونم از این ماژول های سیم کارتی خروجی شبکه بگیرم.یعنی سیم کارت اینترنت رو اوکی کنه و بعدش از طریق کابل شبکه بدم به دستگاه مصرف کننده؟؟؟
    ممنون میشم راهنمایی ام کنید که از چه بردهایی باید استفاده کنم و کجا میتونم اطلاعات دقیق تری پیدا کنم؟؟
    بازم ممنون

    • سلام
      به کمک ماژول سیم کام، امکان اتصال به اینترنت در قالب پروتکل های مختلف اینترنتی، برقرار است. به عنوان دیگر، شما میتوانید به سرورهای مختلف، در بستر پروتکل http،ftp و…. به تبادل داده بپردازید. اما در صورتیکه قصد دارید از این ماژول، در قالب یک مودم، همانند مودم های موجود در بازار استفاده نمایید، بهتر است نگاهی به لینک زیر داشته باشید:
      https://www.rhydolabz.com/wiki/?p=16325

      • ممنونم مهندس جان.راستشو بخواید میخوام از این قضیه استفاده کنم و کارتخوان مغازم رو بی سیم کنم.یعنی بتونم کارتخوان رو به با کابل شبکه به برد سیم کام نصب کنم و دستگاه کارتخوان من رو اینترنت دار کنه و از شارژ یا بسته اینترنت سیم کارت به کارتخوان اینترنت بده.فقط همین.با همین روندی که فرمودید میتونم این کار رو انجام بدم؟؟؟

        • سلام دوست عزیز. به نظرم این کارو نکن چون هم نیاز به دانش فنی داره هم اینکه زیاد نمیتونی رو شبکه ۲G حساب باز کنی (اینو رو حساب تجربم و کار کردن با sim800L میگم). به نظرم اگه هزینش برات مهم نیست یه دستگاه access piont بخر و با کابل LAN به کارت خوان متصل کن. دستگاه های access piont دارای چند مد کاری هستن مثل access piont, client, reapeter و چند مد دیگه. باید رو مد client تنظیم کنی که مثل تنظیمات مودم هست و سخت نیست. میتونی اینترنت گوشیتو برای اکسس پوینت share کنی. برای مثال من واسه اینکه کابل شبکه بین مودم و DVR رو حذف کنم یدونه از این اکسس پوینت ها تو خونه اضافه داشتم که به DVR وصل کردم. روش دوم اینه که کلا یه مودم ۳G یا ۴G ثابت بگیری که پورت LAN داشته باشه یه سیم کارت بذار داخلش به کارت خوان وصل کن. میدونم هزینش زیاده ولی باور کن sim800L به درد این کاری که گفتی نمیخوره.

  • سلام وقتتون بخیر، من با استفاده از رزبری پای ۴، یک سرور را اندازی کردم و میخوام اطلاعات رو روی اون سرور دریافت کنم، برای اینکه بتونم اطلاعات( تعدادی جریان و ولتاژ اندازه گیری شده) رو به صورت نمودار میله ای روی سرورم داشته باشم، باید چیکار کنم؟ممنون میشم اگه راهنماییم کنید

    • سلام
      نرم افزارهای مختلفی در این زمینه هستند که می تواندد داده ها را ترسیم نمایند، یکی از آنها نرم افزار gnuplot با امکانات بسیار زیاد است. شما پس از دریافت داده ها، آن ها را در یک فایل ذخیره نموده و سپس به کمک نرم افزار gnuplot، آن ها را ترسیم نمایید.

  • سلام، سیم کارت ما در شبکه رجیستر نمی شود. چه کنیم؟
    Sim800L
    اگر برای پروژه بخواهیم از کمک شما استفاده کنیم، چگونه می توانیم با شما ارتباط داشته باشیم.

    • با عرض سلام
      این ماژول ها به شدت به تغذیه حساس هستند،علاوه بر تامین تغدیه مناسب، حتما از یک خازن ۱۰۰۰ میکروفارادی، به صورت موازی با تغذیه آن استفاده نمایید. همچنین دقت نظر لازم در رابطه با محدوده ولتاژ کاری آن(۳٫۴ الی ۴٫۳) و تهییه آنتن مناسب، آنتنی غیر از آنتن فنری آن که به طور معمول همراه آن عرضه می گردد، داشته باشید
      در رابطه با ارتباط جهت پروژه، لطفا از طریق سایت دانشجو کیت(daneshjookit.com) در قسمت پشتیبانی، اقدام به ارسال تیکت نمایید.

  • سلام و خسته نباشید،
    بنده در راه اندازی ماژول با سیم کارت ایرانسل مشکل رجیستری به شبکه GSM داخلی دارم، در حالی که این با سیم کارت همراه اول اتفاق نمی افته، اگر بتونید کمک کنید ممنون می شم.

    • با عرض سلام و احترام خدمت شما کاربر گرامی
      معمولا این خطا به دلیل وجود پین کد روی سیم کارت است. در این رابطه، کنترل نمایید که سیم کارت مورد نظر، دارای پین کد نباشد.