ریموت کنترل با ESP8266 با مودم واسط (IP Remote)

ریموت کنترل وای فای (Wi-Fi) تحت شبکه (IP Remote) با ماژول ESP8266 و مودم روتر (Modem Router)

1395/07/19

در ادامه پروژه های قبلی یعنی اینترنت اشیا و ریموت وای فای بدون مودم تصمیم داریم پروژه جدیدی با واسط مودم یا روتر را معرفی کنیم. قبل از توضیحات بیشتر در خصوص پروژه جدید اجازه دهید کمی بیشتر با ماژول وای فای ESP8266 آشنا شویم.

 

ماژول وای فای ESP8266 یک ماژول ارزان قیمت و پرقدرت وای فای است که از آی سی ESP8266EX بهره می گیرد. این آی سی در واقع یک SOC یعنی System On Chip می باشد. همانطوریکه از نام آن پیداست یعنی یک سیستم کامل روی یک آی سی. همانطوریکه در تصویر زیر بلوک دیاگرام داخلی این آی سی را مشاهده می کنید قسمت آبی رنگ بخش مخابراتی و RF بوده و قسمت زرد رنگ شامل یک میکروکنترلر 32 بیتی و اینترفیس (واسط ورودی، خروجی) می باشد. یک آی سی یا ماژول ESP8266 خام قادر به انجام هیچ کاری نمی باشد. عموماً شرکت سازنده پس از تولید آی سی یک میان افزار یا سیستم عامل کوچک (firmware) با واسط سریال تهیه کرده و آن را روی این آی سی پروگرم می کند. در یک نمونه متداول از این میان افزار دستوراتی که به AT Command مشهور است برای ارتباط با این آی سی طراحی شده است و کاربر نهایی فقط با اتصال TX و RX این آی سی به یک میکروکنترلر یا پورت سریال کامپیوتر و استفاده از تبدیل سطح ولتاژ 5 به 3.3 قادر خواهد بود با ارسال دستوراتی شبیه به AT+CWMODE=1 به تنظیم و ارتباط با ماژول بپردازد.

در حالت پیچیده تر و برای کاربرانی که تمایل دارند از میکروکنترلر جداگانه استفاده نکنند این امکان فراهم شده است که برنامه خود را با SDK مخصوص این میکروکنترلر (چند هدرفایل به زبان C) نوشته و با استفاده از نرم افزارهای مخصوص، برنامه خود را روی حافظه داخلی میکروکنترلر ESP8266 پروگرم نمایند. از آنجاییکه این کار برای کاربران عادی کمی مشکل است معمولا واسطه هایی توسط شرکت ها و اشخاص مختلف برای برنامه نویسی و پروگرم کردن آی سی داخلی ESP8266 ایجاد شده است که از جمله آنها می توان به پلتفرم آردوینو اشاره کرد.

ما در این سلسله مقالات از ماژول ESP8266 فقط بعنوان ریموت کنترل و انتقال دهنده اطلاعات متنی و کم حجم استفاده می کنیم و به همین دلیل هیچ نیازی به میکروی 32 بیتی و سریع داخل این ماژول نداریم. از طرفی تصمیم داریم در برنامه های خود از واسطه هایی مثل رله، LCD و … استفاده کنیم و کنترل بیشتری روی برنامه داشته باشیم. به همین روی از Firmware پیشفرض این ماژول استفاده کرده و واسط سریال را ترجیح می دهیم. در این واسط دستوراتی برای کنترل بخش های داخل ماژول ESP8266 در نظر گرفته شده است. یکی از تنظیمات اولیه این ماژول مد کاری ماژول می باشد که به سه حالت Access Point، Station و هردو قبل پیکره بندی است. منظور از Station این است که ماژول به صورت یک ایستگاه کاری می تواند به یک مودم یا روتر متصل شود. در حالت Access Point دستگاه های دیگر مثل موبایل و کامپیوترها می توانند ماژول را در بین شبکه های wifi خود مشاهده کرده و به آن متصل شوند و در حالت هردو (که فعلا با آن کاری نداریم) ترکیبی از هردو حالت برای ماژول ایجاد می شود، یعنی هم می توان به ماژول متصل شد و هم خودِ ماژول میتواند در آنِ واحد به یک اکسس پوینت دیگر متصل شود.

* * *

در پروژه های قبلی از هر دو حالت Station و Access Point استفاده کردیم. در ادامه با توجه به تصویر زیر حالات مختلف استفاده از ماژول ESP8266 را شرح می دهیم:

 در پروژه اینترنت اشیا (تصویر شماره 3) ماژول را روی مد کاری Station تنظیم کرده و بعنوان یک Client (کلاینت به معنای مشتری) به مودم ADSL متصل شدیم و با اتصال به اینترنت، هر 5 ثانیه یک بار فیلد های دیتابیس وبسایت iot.avr64.com را بررسی می کردیم. برای اعمال تغییرات در فیلد های سایت نیز از طریق موبایل به مودم ADSL متصل شده و با روشن و خاموش کردن دکمه های موجود در سایت، رله های برد را روشن و خاموش می کردیم. کاملا واضح است که موبایل می تواند هم از طریق همان مودم و هم از طریق آنتن مخابرات به اینترنت متصل شود و به این ترتیب می توان از هر نقطه دنیا به ماژول متصل شد. همچنین ماژول نیز می توان از طریق یک مودم دیگر به وبسایت متصل شود و خط چین شکل 3 بیانگر اینست که موبایل و ماژول می توانند کیلومترها از یکدیگر فاصله داشته باشند.

 در پروژه ریموت وای فای بدون مودم (تصویر شماره 1) ماژول را در مد Access Point پیکره بندی کرده و یک سِرور کوچک در داخل ماژول پیاده کردیم که به طور پیوسته به پورت 1394 گوش می داد و پس از اتصال یک موبایل به این دستگاه و استفاده از یک اپلیکیشن اندروید و برنامه نویسی سوکت به ماژول متصل شده و رله را به طور مستقیم روشن و خاموش می کردیم. در این حالت هیچ نیازی به مودم و روتر و اینترنت نمی باشد و ارتباط به صورت P2P بین موبایل و ماژول صورت می گیرد.

 در این پروژه (تصویر شماره 2) تصمیم داریم حالت دیگری از ارتباط با این ماژول را پیاده سازی کنیم. در این حالت ارتباط بین ماژول و موبایل به صورت مستقیم نبوده و از طریق مودم یا روتر صورت می پذیرد. البته در این روش هیچ نیازی به اینترنت و سرور IoT نمی باشد و روتر صرفا نقش واسط را بازی می کند. مزیت این روش بر حالت اول اینست که در حالت اول (تصویر 1) کاربر برای کنترل ماژول باید ابتدا از مودم منزل یا محل کار دیسکانکت شود و به تنظیمات وای فای خود رفته، نام دستگاه را پیدا کند و به آن متصل شود و پس از کنترل رله مجددا از دستگاه Disconnect کرده و به مودم ADSL وصل شود. اما در این حالت (تصویر 2) هیچ نیازی به تغییر در نقطه اتصال Wi-Fi نمی باشد و کاربر در حالی که به مودم ADSL متصل بوده و در حال چک کردن ایمیل ها می باشد براحتی می تواند اپلیکیشن ریموت کنترل را باز کرده و رله دستگاه را کنترل کند. همانطوری که ذکر شد وجود یا عدم وجود اینترنت هیچ خللی در عملکرد دستگاه نداشته و مودم ADSL تنها وظیفه انتقال بسته ها از موبایل به ریموت و بلعکس را بر عهده دارد. در این حالت دستگاه در مد Station بسته شده و با تنظیم نام (SSID) و رمز عبور مودم ADSL یا Router در ابتدای برنامه Bascom به مودم متصل می شود و سپس یک سرور کوچک در داخل ماژول به طور مرتب به پورت 1716 (که یک پورت بلااستفاده است) گوش می دهد. این ماژول پس از اتصال به مودم صاحب یک آی پی (IP) خاص خود شده و از طریق این IP می توان در داخل شبکه به ماژول متصل شد.

همچنین ممکن است بتوان با استفاده از قابلیت Forward مودم از خارج از شبکه نیز به این آی پی متصل شده و مثلا از یک شهر دیگر ماژول را (بدون نیاز به سرور واسط IoT) کنترل کرد. (با فوروارد کردن درخواست های ارسال شده به پورت 1716 به آی پی ماژول از طریق تنظیمات NAT روتر). این روش فعلا امتحان نشده اما حتی اگر ممکن هم باشد به دلیل تغییر دائمی IP اینترنت نیاز به گرفتن IP Static از سرویس دهنده اینترنت احساس می شود – در حالت استفاده در داخل شبکه هیچ نیازی به استفاده از IP Static و در کل نیازی به اینترنت نمی باشد).

آپدیت 29-07-1395: قابلیت پورت فوروارد (port forward) برای ماژول ESP8266 توسط یکی از کاربران سایت انجام شد و براحتی با وارد کردن آی پی اینترنت در نرم افزار اندروید، دستگاه ساخته شده بوسیله شبکه اینترنت کنترل شد. (با توجه به تغییر آی پی اینترنت در هر چند ساعت نیاز به IP Static می باشد ولی با IP معمولی هم می توان آزمایش کرد ولی IP فقط برای چند ساعت اعتبار دارد. ضمناً دستگاه مورد آزمایش در تهران بود و بدون افت سرعت از قزوین کنترل شد. (آپدیت 1399/11/27) : با توجه به سیاستهای جدید مخابرات امکان ارسال دیتای خام به پورت روی IP داینامیک وجود ندارد و حتما باید IP Static خریداری شود.

(* توجه: شماره گزاری های تصویر زیر [1,2,3] هیچ ارتباطی به شماره مدهای ماژول ESP8266 نداشته و در هر سه تصویر فقط از دو مد Station و Access Point استفاده شده است *)

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

برنامه راه اندازی این ماژول با صرف زمان و هزینه زیادی نوشته شده است، پس از دانلود و بارگزاری فایل در میکرو، نام مودم ADSL خود را به avr64 تغییر داده و رمز آن را به 12345678 تبدیل کنید یا SSID و PASS را در متن برنامه مطابق مودم خود تغییر دهید و مطمئن شوید که لیست سیاه مودم غیر فعال است. سپس تغذیه برد را متصل کنید، میکرو تعدادی AT Command خاص به ماژول ارسال می کند و پاسخ ماژول در خط پایین LCD نمایش داده می شود، صحت سخت افزار و میکرو و ارتباط بین ماژول و اینترنت از طریق پاسخهای ماژول قابل بررسی است. پس از اینکه دستگاه به مودم یا روتر متصل شود یک علامت آنتن در بالای نمایشگر به همراه یک آدرس IP نمایش داده می شود. این آی پی از کلاس C بوده و الگوی آن بصورت 192.168.0.0 می باشد. در کلاس C که عموماً در شبکه های محلی استفاده می شود تعداد 254 دستگاه می توانند به روتر متصل شوند. در این پروژه برخلاف ریموت وای فای همیشه آی پی دستگاه ثابت نیست و بسته به اینکه دستگاه ریموت چندمین دستگاهی باشد که به روتر متصل است یک آی پی مخصوص به خود دریافت می کند. به همین دلیل در اپلیکیشن مخصوص این دستگاه یک فیلد به نام Remote IP در نظر گرفته شده است که پس از متصل شدن دستگاه به روتر و نمایش آی پی روی LCD بایستی همان آی پی در فیلد داخل اپلیکیشن اندروید نوشته شود و سپس دکمه اتصال لمس شود. دقت داشته باشید که لازم است موبایل مورد نظر نیز به همان روتری متصل باشد که دستگاه ریموت متصل است. وجود یا عدم وجود اینترنت برای عملکرد دستگاه هیچ اهمیتی ندارد و روتر فقط نقش انتقال بسته ها بین موبایل و دستگاه ریموت را بر عهده دارد. دقت داشته باشید که حتما فیوزبیت میکرو بر روی کریستال خارجی (111111) تنظیم شده باشد و از کریستال 11.0592 مگاهرتز استفاده کنید. در صورتی که آی پی 0.0.0.0 را روی LCD مشاهده کنید یعنی دستگاه به روتر متصل نشده است. حتما از غیر فعال بودن Black List روتر اطمینان حاصل کنید و SSID و Password را نیز از نظر کوچک و بزگ بودن حروف و عدم درج فضای خالی در نام ها بررسی کنید.

 توجه: در پروژه هایی که یک Web Server در داخل ماژول راه اندازی می شود (این پروژه و پروژه ریموت وای فای بدون روتر) دقت داشته باشید که پس از اتصال موبایل به ماژول یک شمانده معکوس در داخل ماژول فعال می شود که اصطلاحاً به آن Timeout وب سرور گفته می شود. این شمارنده با دریافت هر دستور از سمت Client (موبایل) ریست می شود. ولی در صورتی که تا مدت مشخصی هیچ دستوری از سمت کلاینت برای ماژول ارسال نشود این شمارنده به انتها رسیده و Server را به طور خودکار خاموش می کند و دلیل بسته شدن اپلیکیشن نیز همین است. این زمان بصورت پیشفرض بر روی 180 ثانیه (3 دقیقه) تنظیم شده است که در این پروژه با یک AT Command مخصوص آن را به 1000 ثانیه (حدود 15 دقیقه) افزایش داده ایم. با این حال همیشه پس از اتصال به ماژول و روشن و خاموش کردن رله به سرعت از اپلیکیشن خارج شوید و اجازه ندهید که Applcation برای مدت زیادی فعال بماند. با خارج شدن از اپلیکیشن، اتصال سوکت از سمت موبایل Close می شود و ماژول نیز به طور طبیعی اتصال را می بندد و برای اتصال بعدی منتظر می ماند (بدون هیچ محدودت زمانی). اما در صورتی که اپلیکیشن را بدرستی Close نکنیم کانکشن شماره 0 به صورت سرگردان تا مدت تنظیم شده باز میماند و با توجه به محدودت کانکشن ها در صورتی که 4 بار دیگر به دستگاه متصل شویم و کانکشن 4 نیز باز بماند دیگر قادر به اتصال به دستگاه نیستیم و باید صبر کنیم تا تمام کانکشن های باز time out و close شوند.


سورس کامل IP Remote با ESP8266 به زبان بیسیک و با کامپایلر BASCOM-AVR (بسکام/بیسکام):
همراه با فایل برد مدار چاپی (با خروجی نرم افزار PCB ،Altium و PDF)
به همراه اپلیکیشن اندروید Pro (فقط فایل apk)

نسخه (1.0.23) 1395/07/19 دانلود

سورس کامل اپلیکیشن موبایل IP Remote:
(زبان برنامه نویسی: جاوا Java – کامپایلر: اندروید استدیو Android Studio)
توجه: آموزش کامل اندروید استدیو را در اینجا مشاهده کنید.
 دانلود

بازدیدها: 1275