سلام خدمت همه شما مایکروالکامی ها. در مطالب قبلی از سری آموزش های ماژول SIM800 به بررسی و نحوه ارسال پیامک با دستورات ماژول SIM800 و آردوینو پرداخته شد. در این قسمت به مراحل و روش های مورد استفاده در ارتباط و ارسال دیتا به سرور از طریق HTTP پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتویند سایر مطالب من رو از این لینک مطالعه و بررسی کنید.
پروتکل HTTP در ماژول SIM800
برای برقراری ارتباط بین کلاینت و سرور نیاز به ایجاد ارتباط TCP/IP است. همچنین برای ایجاد این کانکشن، نیاز به به آدرس سرور، IP و شماره پورت آن را داریم. در ارتباط HTTP و صفحات وب، شماره پورت 80 استفاده میشود. شماره پورت برای کانکشن های SMTP برابر 25 و همین مورد برای FTP برابر 21 میباشد. در HTTP روش های ارسال درخواست به سرور بنام های SEND ،GET ،HEAD ،POST ،LINK و … وجود دارد. از بین چندین موردی که ذکر شد، ماژول های SIM800 از سه متد GET ،HEAD و POST پشتیبانی میکند.
قطعات مورد نیاز
- برد راه انداز ماژول SIM800L
- LM2596 Buck DC-DC Convertor
- آداپتور 12V
- آنتن GSM با سوکت IPEX
- مبدل سریال
برقرای ارتباط و آماده سازی ارتباط HTTP
قبل از شروع نیاز است که از داشتن اعتبار ریالی سیم کارت اطمینان حاصل نموده و GPRS ماژول را وصل کنیم. در قسمت های قبلی نحوه فعال سازی اینترنت GPRS ماژول بصورت کامل بررسی و آموزش داده شده و میتوانید آنرا مطالعه نمایید.
برقرای ارتباط HTTP
بعد از اطمینان از اینکه اینترنت ماژول متصل شد، توسط دستور زیر HTTP ماژول را فعال میکنیم.
AT+HTTPINIT OK
در صورتیکه SSL برروی دامین سرور موردنظر برای ارتباط فعال باشد، میتوان از دستور زیر استفاده کرد. شایان ذکر است که ماژول های SIM800 از SSL2.0 ،SSL3.0 ،TLS1.0 پشتیبانی میکنند. پس این نکته را در نظر بگیرید اگر SSL و TSL سایت و دامین شما بیشتر باشد با خطا مواجه خواهید شد.
AT+HTTPSSL=1 OK
پیکربندی ارتباط HTTP
با استفاده از دستور زیر پارامتر های مورد نیاز ارتباط HTTP را فراهم نموده تا ارتباط ما برقرار شود. در بخش دوم این دستور غیر از CID پارامتر های دیگری نظیر URL و… نیز جایگزین میشود. برای کسب اطلاعات بیشتر در این مورد به داکیومنت AT Command ماژول بخش “11.2.3” مراجعه نمایید.
AT+HTTPPARA="CID",1 OK
وارد کردن آدرس سرور یا سایت مد نظر
با استفاده از دستور زیر، آدرس سایت یا سرور مورد نظر که درخواستی از آن میشود یا دیتایی به آن ارسال میشود را وارد میکنیم. در بخش دوم بجای Address، آدرس سایت/سرور مد نظر را وارد نمایید.
AT+HTTPPARA="URL","Address" OK
تعیین حالت کاری در ارتباط HTTP
همانطور که پیشتر ذکر شد، HTTP از سه متد (حالت) GET ،SEND و POST جهت ارسال و درخواست با سرور بهره میبرد. برای تعیین اینکه از کدام حالت استفاده شود از دستور زیر استفاده مینماییم. در ادامه عدد مربوط به هر متد مشخص شده است.
- 0: جهت استفاده از متد GET
- 1: جهت استفاده از متد POST
- 2: جهت استفاده از متد HEAD
AT+HTTPACTION=0 OK
پس از ارسال دستور فوق، پاسخ ماژول چیزی شبیه عبارت زیر است. این عبار دارای 3 قسمت است. در بخش اول نوع متد با اعداد 0، 1 و یا 2 مشخص میشود. بخش دوم نشان دهنده وضعیت است که یک کد است و نشان دهنده پاسخ سرور میباشد که در تصویر زیر کد های مختلف آن را مشاهده میکنید. در بخش سوم، طول پیام دریافتی از سمت سرور مشخص میگردد. بعنوان مثال در این عبارت، طول پیام دریافتی 49270 است.
+HTTPACTION: 0,200,49270
کد هایی که در بخش دوم پاسخ بالا ممکن است دریافت کنید را در تصویر زیر مشاهده مینمایید.
ارسال درخواست به سرور
با استفاده از دستور زیر میتوان یک کانکشن TCP یا UDP را آغاز کرده و به سرور درخواست خود را ارسال نماییم. در بخش اول بجای connection mode، عبارت TCP یا UDP جایگزین میگردد. در بخش دوم بجای Address، دامین مورد نظر وارد میشود. در بخش سوم نیز شماره پورت جایگزین میشود. برای اطلاعات بیشتر داکیومنت AT را مطالعه نمایید. پس ارسال دستور زیر و دریافت OK، پس از گذشت مدت زمانی، در صورت صحیح بودن ارتباط، ماژول در پاسخ عبارت “CONNECT OK” را به ما خواهد داد. به محض دریافت این پاسخ شروع به ارسال دستور مورد نظر (AT+CIPSEND) خواهیم کرد. در غیر اینصورت پس از سپری شدن زمان تعیین شده ارتباط بسته و با عبارت “CLOSED” مواجه خواهیم شد.
AT+CIPSTART="connection mode"," Address ","port number" OK
دریافت و خواندن دیتا از سرور
با استفاده از دستور زیر دیتا دریافتی و ارسال شده از سرور را میخوانیم. عبارت “HTTPREAD: 56+” به معنی این است که طول دیتا دریافتی 56 کاراکتر میباشد. همچنین در ادامه پاسخ دریافتی از ماژول متد کاری و متن ارسالی از سرور نیز مشاهده میشود.
AT+HTTPREAD +HTTPREAD: 56 Method : GET Your Data : Zone1=true&Zone2=true&zone3=true Zone1=detected Zone2=detected Zone2=detected OK
قطع ارتباط HTTP
با استفاده از دستور زیر ارتباط HTTP را خاتمه میدهیم.
AT+HTTPTERM OK
ارسال دیتا به سرور با استفاده از ماژول SIM800 و استفاده از متد GET
در ارسال دیتا به سرور با استفاده از روش GET، پارامتر های مد نظر خود را در انتهای یک آدرس URL ارسال مینماییم. برای ارسال و مشخص کردن این دیتا ها در انتهای URL یک علامت سوال “?” قرار داده و سپس پارامتر های خود را قرار خواهیم داد. توجه داشته باشید بین هر دیتا یا پارامتر علامت & وجود دارد. به مثال زیر توجه نمایید. در بخش قبلی دستورات مورد نیاز برای ارسال درخواست ذکر شد.
api.thingspeak.com/update?api_key=O13AO**********9&field1=23&field2=43
ارسال دیتا به سرور با استفاده از ماژول SIM800 و استفاده از متد POST
در مرحله قبلی روش ارسال دیتا با متد GET معرفی شد. ارسال دیتا با استفاده از متد POST نیز شبیه به روش GET بوده با این تفاوت که در روش GET در URL وارد شده مقادیر و پارامتر های مد نظر خود را وارد میکردیم. اما در روش POST مقادیر و اطلاعات را دیگر شبیه قبل در بدنه اصلی ارسال نخواهیم کرد. لذا از نظر امنیت بهتر از حالت قبل خواهد بود. تفاوت دیگری که وجود دارد این است که در ارسال با روش POST امکان ارسال دیتا بیشتری وجود دارد. همانطور که پیشتر ذکر شد در روش POST دیتا ها در بدنه اصلی ارسال نمیشوند. پس باید با استفاده از دستورات مربوطه دیتا و طول کارکتر های مورد نظر را مشخص نمود.
مشخص کردن محتوای ارسال و دریافت از سرور
با استفاده از دستور زیر، نوع محتوای ارسالی و دریافتی را مشخص میکنیم که دارای 3 حالت میباشد. در بخش دوم این دستور، جایگزین MODE یکی از 3 عبارات زیر قرار میگیرد.
- text/plain: برای حالتی که محتوای یک متن ساده و غیر رمزنگاری شده باشد.
- text/html: برای حالتی که محتوا یک متن HTML باشد.
- application/x-www-form-urlencoded: برای حالتی که محتوا رمزنگاری شده باشد.
AT+HTTPPARA="CONTENT","MODE" OK
مشخص کردن محتوای ارسال و دریافت از سرور
با استفاده از دستور زیر طول کاراکتر (بخش اول دستور) و زمان Timeout (بخش دوم دستور) را مشخص میکنیم. پس از ارسال این دستور، در صورت فراهم بودن شرایط، ماژول در پاسخ به ما عبارت DOWNLOAD را خواهد داد. پس دریافت این عبارت، به میزان مشخش شده Timeout فرصت خواهیم داشت تا دیتا را ارسال نماییم. در غیر اینصورت ارتباط بسته شده و دیگر دیتایی قبول نمیکند. در این مثال زمان Timeout به میزان 15 ثاینه یا 15000 میلی ثانیه در نظر گرفته شده است.
AT+HTTPDATA=15,10000 DOWNLOAD data1=1&data2=0 OK
ارسال دیتا به سرور با استفاده از ماژول SIM800 و استفاده از متد HEAD
این روش نیز مشابه متد GET عمل میکند. تفاوت این روش با GET این است که، در روش HEAD از سرور فقط هدر پیام درخواست شده و دیگر کل پیام ارسال نمیشود. هدر اطلاعاتی را در مورد پاسخ و درخواست ها و یا دیتا هایی که در کل پیام وجود دارد را در اختیار ما قرار میدهد. چنانچه از ارتباط HTTP در ماژول SIM800 استفاده میکنیم با دستور AT+HTTPREAD ماژول هدر ها را پاک کرده و فقط دیتا اصلی را در اختیار ما قرار میدهد. لذا در در روش HEAD دیتایی وجود نداشته و طول آن صفر خواهد بود. در ادامه مراحل استفاده از این متد را مشاهده میکنید.
AT+HTTPINIT OK AT+HTTPPARA="CID",1 OK AT+HTTPPARA="URL","www.sim.com" OK AT+HTTPACTION=2 OK +HTTPACTION: 2,200,0 AT+HTTPTERM OK
نتیجه گیری
در این مطلب بطور دقیق روش های ارسال دیتا به سرور از طریق HTTP معرفی و مورد بررسی قرار گرفت. با استفاده از HTTP در ماژول های SIM800 از 3 روش تبادل دیتا با سرور یعنی GET ،POST و HEAD میتوان استفاده کرد. همانطور که مشاهده شد در روش GET اطلاعات پیام در بدنه پیام ارسال میشد ولی در روش POST اینگونه نبود. مزیت روش POST این است که اطلاعات دیتا و پیام مورد نظر قابل روئیت نبوده و امنیت بیشتری را به ارمغان خواهد آورد.
امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.
با درود
بنده از ماژول sim800l و اردوینو استفاده میکنم . تا مرحله اتصال به اینترنت خوب پیش میره حتی ارتباط TCP هم ok بر میگردونه و چراغ هم چشمک زن سریع هست. تنظیمات APN هم انجام دادم و حتی با تمظیمات پروکسی هم چک کردم اما متاسفانه زمانی که از متد Get استفاده میکنم و میخوام یک یک دیتا کوچک با کمک اپ اسکریپتی که نوشتم ارسال کنم خطای ۶۰۳ نشان میده . URL هم چک کردم درست بود و چندین نمونه دیگه هم قرار دادم حتی برای دریافت اطلاعات هم همین ارور را میده
واقعا خسته شدم . چه کاری باید انجام بدم . درضمن این ماژول تست شده با ارسال پیامک و کار میکنه فقط این قسمت ارسال و دریافت دیتا همین ارور را میده . مدار هم درسته
از ارسال و پیکربندی صحیح دستورات مطمئن هستید؟
سلام وقت بخیر
من با ماژول sim868 با دستور AT+HTTPACTION=0 خطای DNS میگیرم.
زمانی که گوگل رو هم پینگ میکنم ارور میده
AT+CIPPING=”www.google.com”
ERROR
دستور زیر هم
AT+CDNSCFG?
PrimaryDns: 0.0.0.0
SecondaryDns: 0.0.0.0
مشکلم رو چطور میتونم حل کنم؟
سلام، سیم کارت شارژ داره؟
تنظیمات APN و مقدمات اولیه برای کانکت شدن به GPRS انجام شده؟
چه اپراتوری هستش سیم کارت؟
ماژول به شبکه متصله و سیگنال دارید؟
شارژ ریالی هم داره و اینترنت هم داره . سرعت اینترنت با توجه به چیزی که خود اردوینو نشان میده ۲۷ است من از انتن gprs استفاده میکنم و انتن دهی خوبی داره
AT+HTTPACTION=2 رو فرستادید؟
میشه در مورد سرور یکم توضیح بدین یعنی این که چجوری بسازیم یعنی چجوری یه صفحه بسازیم و انتقال بدیم اطلاعاتو و بگیریم
سلام،
شما تصور کنید که یک سنسور یا یک دستگاه مبتنی بر IoT دارید و میخواهید که دیتای محیط مثلا دما و رطوبت را برای کاربر ارسال کنید یا جایی اون را مانیتور کنید. در این شرایط یکی از راه هایی که دارید و میتونیند استفاده کنید استفاده از داشبورد های IoT هست. از این داشبورد ها یا بصورت رایگان یا بصورت پرداخت هزینه ای میتیونید استفاده کنید. بستری که این محیط ها روی اونها پیاده سازی شده مستلزم داشتن هاست و سرور هستش. لذا موقعی که که صحبت از ارسال دیتا به سرور میشه به نوعی منظور اینطور سناریو هایی هستش که گفته شد.
ساخت سرور یا پیاده سازی سرور که فرمودید هم خودتون میتونید انجام بدید. مثلا از یک سیستم رایانه همیشه روش، برد های امبدد نظیر رزبری پای و … میتونید استفاده کنید. البته پیاده سازی این موارد نیازمند یکسری پارامتر ها و پیش نیاز های فنی، علمی و مباحث شبکه هست. هاست هم که از سرویس های هاست قابل تهیه و بهره برداری هست.
موفق باشید دوست من.
سلام من با sim800c هر ۱۰ دقیقه به روش get به سرور داده ارسال میکنم و ثبت میشه و کد ۲۰۰ برمیگردونه. ولی بعد از چند روز یا هفته یهو کد ۶۰۳ برمیگردونه و دیگه تا مودم را کاملا ریستارت نکنم درست نمیشه و مرتب خطای ۶۰۳ میده. این خطا مربوط به dns هست نفهمیدم چه ربطی به مودم داره و چرا با ریست مودم درست میشه؟ کسی میتونه کمک کنه.
سلام، ارادت.
در این خصوص باید بگم سیستم خودتون را دارای فیدبک کنید همیشه. به این شکل نباشه که فقط ارسال و دریافت باشه. توی کد ها همیشه این قابلیت رو داشته باشید قبل از کانکت شدن به شبکه بررسی بشه وضعیت مثلا سیم کارت شارژ ریالی و بقیه شرایط داره یا خیر بعد GPRS متصل بشه. همینطور بعد از ارسال دیتا به سرور و… مطمئن بشید که دیتا رسیده و فیدبکی دریافت کنید از مقصد یا به طرق دیگر. معمولا این شرایطی که فرمودید توی همچنین مواردی بوجود میاد. امیدوارم تونسته باشه کمکی کرده باشه بهتون.
منظور این رفیقمون اینه که یه if بزار بگو اگه جواب ۲۰۰ داد که هیچ ادامه کدو برو جلو بخون یا هر چیزی ولی اگه ۲۰۰ ندادماژول ریست کن که دوباره وصل کنه چون انتن ماژول زیاد قویی نیست من از این روش برای انتن دهی استفاده کردم.
سلام،
همیشه ریست کردن ماژول گاه و بی گاه چاره ساز نیست. چرا که عملا باعث ایجاد اختلال توی سیستم و عملکرد ماژول دارید بوجود میارید. خود ماژول به تنهایی آنتن نداره فقط پین آنتن در اختیار شما هست. شما باید خودتون یک آنتن دارای گین و طراحی مناسب را بهش وصل کنید بشرط داشتن و رعایت اصول فنی و مخابراتی مثل تطبیق امپدانس و سایر موراد دیگر. باوجود و استفاده از چنین مواردی و رعایت اصول آن، قطع به یقین سیستم پایدار خواهد بود و ماژول همیشه در شبکه رجیستر خواهد بود یا سریع رجیستر خواهد شد.