تا اینجا، ده قسمت از آموزش مفاهیم شبکه و اینترنت در راهاندازی ماژول ESP8266 با ما همراه بودید! خیلی خوبه! من اگه بودم دیگه ادامه نمیدادم…! از صبر و پشتکاری که دارید ممنونم. همانطور که قبلاً اشاره شد، روش های مختلفی برای کار با ماژول ESP8266 وجود داره. ولی هر کدوم معایب و مزایای خودشون را دارند. در اولین گام و در این سری از آموزش که شامل یازده قسمت شد، سعی کردم با AT COMMANDها این ماژول را راه اندازی کنم. توی این قسمت سعی میکنم یه ارتباط کامل اینترنتی با ماژول وای فای ESP8266 با استفاده از دستورات AT داشته باشم. خوب… بریم به ادامه مطالب بپردازیم.
حالت های کاری مختلف ماژول ESP8266
این ماژول بهصورت کلی در سه حالت
۱. Station (یا همان client)
۲. Access point
۳. Station + Access point
کار میکنه. البته میتونه در حالت سرور نیز باشد.
اینکه از چه شکل از ماژول ESP8266 دارید استفاده میکنید، مهم نیست؛ ولی احتمالاً از یکی از انواع (شکل های) زیر هست!
دستورات AT command
هر بار که ماژول را روشن میکنید و شروع به ارسال دستور و… میکنید، ماژول هر چیزی را که دریافت میکنه بهصورت Echo و قبل از پاسخ بر میگردونه. میتونید با دستور زیر حالت echo را خاموش یا روشن کنید:
1 | ATE0 echo OFFATE1 echo NO |
این ماژول بهصورت Default با نرخ تبادل دیتای 115200 کار میکنه، که البته با دستور زیر قابل تغییر هست. دقت کنید، متن کامل دستور در دیتاشیت قطعه و خود سایت وجود داره. من فقط یه اشاره کلی به متن دستور میکنم:
1 | AT+UART_CUR = … |
بعد از تنظیم Baud rate (اگر نیاز بود)، مد یا حالت کاری ماژول را با دستور زیر بررسی میکنیم. اگر بخواهیم ماژول مانند لپتاپ یا کامپیوتر و… در حالت مصرفکننده اینترنت باشد، باید در حالت Client قرار بگیره. پس با دستور زیر بررسی میکنیم که ماژول در چه مد کاری در حال کار است:
1 | AT+CWMODE? |
پاسخ دستور بالا یکی از اعداد، 1 به معنی حالت کاری Station(client)، یا عدد 2 به معنی حالت کاری Access point و یا عدد 3 به معنی هر دو حالت قبلی است. برای تغییر دادن حالت کاری از همان دستور بالا به صورت زیر استفاده کنید:
1 | AT+CWMODE=1 or 2 or 3 |
ماژول ESP8266 بهصورت پایه، در حالت single connection mode قرار دارد. یعنی در حالت Access point که مثل مودم عمل میکنه و بقیه ادوات بهوسیله وای فای به اون متصل میشند، در هر زمانی فقط یک اتصال TCP وجود دارد و این اتصال قبل از اینکه اتصال جدید بتواند تشکیل شود (از/به یک آدرس IP راه دور مشابه یا متفاوت)، باید بسته شده باشد.
1 | AT+CIPMUX= 0 |
در “حالت اتصال چندگانه” (CIPMUX=1) ماژول میتواند تا پنج اتصال مختلف (از/به آدرسهای IP راه دور یکسان یا متفاوت) را به طور همزمان حفظ کند. هیچ نیازی به بستن یک اتصال قبل از راهاندازی دیگری وجود ندارد، تا زمانی که بیش از پنج اتصال به طور همزمان باز نباشد.
این خاصیت بهخصوص زمانی که ماژول بهعنوان یک سرور عمل میکند ویژگی مفید است؛ زیرا با حالت اتصال تک سرور نمیتواند درخواست جدیدی را درحالیکه یک مشتری متصل است بپذیرد؛ بنابراین تا زمانی که به یک مشتری (Client) هر دادهای ارائه میشود، هر درخواست اتصال دیگری رد میشود.
1 | AT+CIPMUX= 1 |
زمانی که بخواهید به یک شبکه اینترنت بی سیم وصل بشید ابتدا ماژول باید در حالت Station قرار گرفته باشد. سپس باید شبکه های اینترنت بیسیم در اطراف ماژول را جستجو کرد. برای جستجوی شبکه های وای فای اطراف ماژول از دستور زیر استفاده میکنیم:
1 | AT+CWLAP |
اتصال به وای فای
حالا، بین وای فای های اطراف ماژول، اونی که نام و رمز عبورش را میدونیم باید انتخاب بشه. چطوری؟ اگر SSID و Password شبکه وایفای را دارید، با دستور زیر به اون وصل بشید:
AT+CWJAP=[<ssid>],[<pwd>] برای اطمینان از اتصال به شبکه، ماژول پاسخی در قالب متن زیر به شما خواهد داد. ممکن است دریافت این پیام چند لحظه ای طول بکشد، زیرا ماژول باید از مودم و شبکه اینترنت یک IP دریافت کند. دو خط آخر پاسخ، ممکن است در پاسخ ماژول شما نباشد. نگران این موضوع نباشید.
قطع و وصل کردن اینترنت ماژول
WIFI CONNECTEDWIFI GOT IPOK[WIFI GOT IPv6 LL][WIFI GOT IPv6 GL] برای قطعکردن اتصال ماژول به اینترنت، از دستور زیر استفاده کنید: AT+CWQAPOK تا حالا تونستید ماژول را به اینترنت وصل و قطع کنید. ولی یادتون نره که از حالا به بعد اتصال ماژول به اینترنت بهصورت خودکار انجام خواهد شد.
یعنی اگر ماژول خاموش و مجدد روشن بشه و همون شبکه وای فای که قبلاً بهش متصل بوده، در دسترس باشه، بهصورت خودکار به اون وصل خواهد شد!! شاید این موضوع در بعضی از پروژه ها مفید باشه ولی بعضی جاها هم خیلی خوب نیست! با دستور زیر اتصال خودکار ماژول به شبکه وای فای را میتونید متوقف کنید. AT+CWAUTOCONN=0OK نکته مهمی که باید بهش اشاره کرد اینه که بعضی از دستورات فقط در یک حالت کاری ماژول پاسخ میدند و در حالت های کاری دیگه یا جواب نمیدند یا پاسخ ERROR خواهند داد.تعداد دستورات و عملکرد آنها زیاده و بستگی به نیاز کاربر داره.
❗ عدم پاسخگویی دستورات قسمت HTTP در ماژول ESP8266
ِ
چه فاجعه ای! چه بد! پس من 11 قسمت را بیخودی خوندم …!
اصلاً نگران نباشید (مثل پیام بازرگانی ها گفتم!). اگر بخواهید از دستورات AT COMMAND برای ایجاد یک ارتباط اینترنتی استفاده کنید باید اون را در قالب دستورات TCP/IP اجرا کنید. یعنی چی؟ پروتکل TCP/IP میتونه دستورات مربوط به HTTP مثل GET و POST را اجرا کنه. پس بجای استفاده مستقیم از دستورات HTTP باید اونها را در قالب دستورات TCP/IP اجرا کنیم.
کل ماجرا این دوره چی بود!؟❗❕
همین! کل ماجرا و شیوه ایجاد ارتباط اینترنتی با این ماژول و با استفاده از AT COMMANDها، توی همین چند خط بالا خلاصه شد! یعنی شما 11 قسمت را خوندید که برسید به پاراگراف بالا!!
آموزش کامل ارسال دستور GET و POST
البته اینکه متن کامل دستور GET و POST شما چی باید باشه، بستگی به طراح وب شما داره، در زمان طراحی صفحه وب برای دستور GET یا POST بهغیراز این دو عبارت باید از عبارتهای کمکی دیگری هم استفاده کنیم. این عبارات در زمان طراحی سایت، مشخص میشوند. زمانی که شما میخواهید با ماژول و با استفاده از دستور GET یا POST با سایت موردنظر، تبادل داده انجام دهید، باید از این عبارات کمکی اطلاع داشته باشید و در یک قالب صحیح دستور خود را ارسال کنید.
برای مثال، مقدار یک سنسور دما را به یک سایت با IP (آدرس) زیر ارسال میکنم. ابتدا با دستورات پروتکل TCP/IP به سایت یا IP موردنظر وصل شدم، بعد برای ارسال از دستور GET و در قالب شکل زیر استفاده کردم. آدرس سایت و محلی که داده باید به آنجا ارسال شود بهصورت زیر است:
همانطور که میبینید، طراحی صفحه وب بهگونهای است که باید مقادیر سنسور دما را به آدرس بالا ارسال کرد. ابتدای آدرس، در اصل همان سایت یا وبسایت مدنظر است. حالا اینکه داده باید کجای این سایت بره و… را طراح سایت مشخص کرده؛ یعنی از ادامه آدرس سایت تا انتهای آدرس:
اون مقدار قرمزرنگ Value هم، همان مقدار سنسور دماست که قرار بود ارسال کنیم. پس دستور GET باتوجهبه پروتکل TCP/IP و همچنین طراحی سایت و مقدار سنسور دمای 101، بهصورت زیر خواهد شد:
این دستور کامل نیست! و اگه اینو ارسال کنید، ماژول بهتون خطا میده! در ادامه دستور بالا و برای تکمیل پروتکل TCP/IP باید آن را بهصورت کامل شده زیر ارسال کنید:
تا اینجا با استفاده از پروتکل TCP/IP و متد GET تونستیم دادهای را ارسال کنیم. شاید از خودتون بپرسید، متد GET برای دریافت باشه! پس چرا برای ارسال استفاده شد؟! بله کاملاً صحیح هستش. میتونیم از متد GET که برای ارسال درخواستِ دریافتِ داده هست، برای ارسال داده نیز استفاده کنیم.
برای متد POST هم چیزی شبیه به فرایند بالا را داریم. یعنی با پروتکل TCP/IP به سایت مدنظر متصل میشید، بعد باتوجهبه طراحی سایت برای متد POST، از این دستور استفاده میکنیم. باتوجهبه اینکه طراح سایت من چه ساختاری برای دستور POST قرار داده، این دستور را اجرا میکنم:
ابتدا با دستورات پروتکل TCP/IP به سایت یا IP موردنظر وصل شدم و بعد دستور POST به صورت زیر:
1 2 3 | http: //....IP...../api/postrequest{ // “data”:”test data” // } |
دقت کنید که دستور GET را میتونید داخل قسمت URL وارد کنید؛ ولی دستور POST را از این طریق نمیتونید ارسال کنید.
خب… بریم روند اجرای دستورات بالا را با ماژول ESP8266 ببینیم:
1. دستور GET در ESP8266
برای ارسال از طریق ESP8266 نیز باید مراحلی را طی کرد که به ترتیب:
- 1234AT + CIPSTART = "TCP", "IP or Domain",80 < CR > <LF> AT + CIPSEND = 63 < CR > <LF> GET / api / getrequest? data = 101 HTTP / 1.1 < CR > <LF> Host: 192.168.143.25 < CR > <LF><CR><LF>
تا دستور شماره 2 را میتوان به راحتی از دستورات موجود در قسمت TCP/IP مربوط به ماژول پیدا (البته مقدار عددی در دستور دو بستگی به تعداد کارکتر موجود در دستور سه دارد) کرد. ولی چیزی درباره دستور سوم به چندین دلیل بیان نشده.
دلیل اول: شیوه و متن ارسالی در دستور GET یا POST بستگی به برنامه نویس سرور و هاست دارد.
دلیل دوم: اینکه در سمت دریافتکننده چه چیزی داده ها را دریافت میکند، متفاوت است. مثلاً صفحه وب باشد یا اپلیکیشن و…
تا این /api/getrequest?data= قسمت بهوسیله طراحهاست مشخص میشود. از HTTP/1.1 به بعد را باید در ساختار ارسال و دریافت دستورات جستجو کرد. من این کار را با نرم افزار HTTP debugger انجام دادم.
در نرم افزار بالا ابتدا IP یا Domain ای که میخواهید را انتخاب کنید و سپس آن را ردیابی کنید و ببینید در طی ارسال و دریافت دستوراتی مثل GET چه چیزهایی همراه میشود. با کمی صبر و جستجو در اینترنت به نتیجه من خواهید رسید.
2. دستور POST در ESP8266
برای ارسال از طریق ESP8266 نیز باید مراحلی را طی کرد که در زیر و در قالب یک مثال به ترتیب:
- 12345678AT + CIPSTART = "TCP", "192.168.143.25",80 < CR > <LF> AT + CIPSEND =147 < CR > <LF> POST / api / postrequest HTTP / 1.1 < CR ><LF> Host : 192.168.143.25 < CR ><LF> Accept : * / <CR><LF> Content - Length : 27 < CR ><LF> Content - Type : application / json<CR><LF><CR><LF> {"data" : "this is my words"}
دو دستور اول که مشابه دستور GET است. البته دستور دو بستگی به تعداد کاراکتر ارسالی در دستور سه دارد. قسمت /api/postrequest بستگی به برنامهنویس وب دارد.
شاید باورتان نشود؛ ولی کل مطالب 11 قسمت را خواندیم تا فقط همین دو صفحه آخر را بتوانیم اجرا کنیم ولی از آنچه انجام میدهیم کاملاً مطمئن و آگاه هستیم و هیچ کپی برداری کورکورانه از کسی نداشته ایم. امیدوارم مطالب این 11 قسمت بدرد شما هم خورده باشه و استفاده کرده باشید. احتمال داره در حین نوشتن این 11 قسمت، نتونسته باشم جاهایی رو خوب بیان کنم یا برداشت اشتباه خودم را به شما هم منتقل کرده باشم.
از این بابت از شما خواننده گرامی عذرخواهی میکنم. این چند صفحه آخر را با دقت بخوانید و اجرا کنید و حتماً قبل از اون درباره اینترنت و شبکه اطلاعات کافی داشته باشید. درضمن نرم افزارهایی که با اون بشه شبکه یا اینترنت را مانیتور کرد، نیز بدردتون خواهد خورد.
راستی این مجموعه 11 قسمتی فقط برای راه اندازی ماژول از طریق AT COMMANDها بود. روش های استفاده مختلف دیگه مثل استفاده از آردوینو و پایتون برای استفاده هم هست. که امیدوارم دوستان دیگه هم تمایل برای به اشتراک گذاشتن دانششون با دیگران را داشته باشند و تبدیل به چراغ روشنی برای مسیر بقیه دوستان بشن. به امید روزهای روشن…
سلام. تشکر از مطلب خوبتون. یکی از بهترین رفرنس ها هستید