شاید تاکنون در پروژههای اینترنت اشیاء NodeMcu و یا ESP8266 خواسته باشید تا چندین مودم وای فای را به برد خود معرفی کنید تا هنگام اتصال دستگاهتان به اینترنت، بهطور خودکار وای فای موجود را جستجو کرده و هر کدام که در دسترس بود، به آن متصل شود. همچنین در صورتی که یکی از دسترس خارج شد، به دیگری متصل شود. در این آموزش شما یاد میگیرید که چگونه چندین نقطه اتصال وای فای (AP) را همراه با رمز عبورشان در برد خود تعریف کنید تا دستگاه بهصورت خودکار (اتوماتیک) آن ها را مدیریت کرده و به بهترین آنها متصل شود!
با این آموزش از سیسوگ همراه باشید.
قبلاً در سیسوگ مقالاتی از جمله نصب ماژول ESP8266 و ESP32 در ویرایشگر آردینو و QT برای میکروکنترلرها منتشر شده است که میآموزید چگونه با استفاده از آردوینو برای NodeMcu و ESP8266 برنامه نویسید. اگر شما مراحل آماده سازی آردوینو خود را انجام داده باشید، در حالت عادی، شما اطلاعات اتصال به یک مودم وای فای مثل نام نقطه اتصال و رمز عبور (اختیاری) را وارد میکنید و ESP8266 تلاش میکند تا به آن متصل شود:
1 | WiFi.begin(ssid, password); |
فرض بگیرید برد esp8266 شما ممکن است در چندین محیط مختلف قرار بگیرد. برای این کار، شما باید برنامهای بنویسید که محیط را اسکن کند و در صورت وجود وای فای مورد نظر، به همان متصل شود. یک روش غیر اصولی هم که معمولاً برای سادهتر کردن برنامه نویسی استفاده میشود، این است که یکییکی اطلاعات اتصال را به ماژول بدهید و منتظر بمانید تا متصل شود و این کار را آن قدر ادامه دهید تا وای فای بالاخره به یکی از آنها متصل شود! اما این روشها ممکن است برای مدیریت اتصال وای فای به اندازه کافی کارآمد نباشند و یا اینکه کد نویسی شما را هم کمی سختتر کند. اما خوشبختانه نیازی به این کارها نیست. برای معرفی چندین نقطه دستیابی (اکسس پوینت – Access point) به یک برد، قبلاً کتابخانه نوشته شده و شما میتوانید کتابخانههای مورد نیاز را به وسیله هدر فایلهای زیر به برنامه خود اضافه کنید. اگر مراحل آماده سازی آردوینو را انجام داده باشید، این کتابخانهها پیش فرض وجود دارد.
1 2 | #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> |
کدهای مورد نظر برای مدیریت و اتصال به چندین وای فای در کتابخانه ESP8266WiFiMulti وجود دارد. برای استفاده از متدهای این کتابخانه، ابتدا باید بهصورت زیر یک نمونه از روی شیء آن بسازید:
1 | ESP8266WiFiMulti wifiMulti; |
حال با استفاده از متد addAP، مودمهای مختلف وای فای را به همراه رمز عبور تعریف میکنیم:
1 2 3 4 | wifiMulti.addAP("Free wifi 1"); wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_2"); wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); |
ورودی اول تابع، ssid یا نام نقطه اتصال وای فای شما میباشد.
ورودی دوم گذرواژه (رمز عبور – password) وای فای مورد نظر میباشد. اگر وای فای شما گذرواژهای ندارد، میتوانید مثل مثال بالا ورودی دوم را وارد نکنید.
همچنین درون کتابخانه ESP8266WiFi متدی وجود دارد که با true کردن آن، ماژول در هنگام روشن شدن به طور خودکار به آخرین وای فایی که دفعه قبل متصل شده بوده است، متصل میشود.
1 | WiFi.setAutoConnect(true) |
فرآیند متصل شدن و مدیریت esp8266 به وای فای توسط خود ماژول و در پس زمینه در حال انجام است. در این زمان شما همچنان میتوانید کارهای دیگری را انجام دهید. برای خواندن وضعیت فعلی ماژول و اطمینان از اتصال به اینترنت، از متد run و یا status استفاده میکنیم. این متد ها وضعیت فعلی را به شما گزارش میدهد. شما میتوانید برای اطمینان از اتصال به اینترنت، از روش زیر در ابتدای برنامه استفاده کنید.
1 2 3 4 | while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } |
در این کد، مادامی که esp8266 به مودم وای فای متصل نشده است، در پنجره سریال چاپ نقطه را مشاهده خواهید کرد. اگر چنانچه مدت زیادی طول کشید و شما همچنان چاپ نقطه (….) را میبینید، احتمالاً یا رمز عبور و نام وای فای را اشتباه وارد کردهاید یا اینکه وای فای مورد نظر در دسترس نیست.
درنهایت، برنامهی نمونه زیر با استفاده از کدهایی که در بالا توضیح داده شد، نوشته شده است. کد زیر را میتوانید در آردوینو وارد کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> ESP8266WiFiMulti wifiMulti; void setup() { Serial.begin(115200); Serial.setDebugOutput(true); WiFi.mode(WIFI_STA); WiFi.setAutoConnect(true); wifiMulti.addAP("FREE WIFI"); wifiMulti.addAP("WIFI 1", "PASS1"); wifiMulti.addAP("WIFI 2", "PASS2"); Serial.println("Connecting Wifi..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { if (wifiMulti.run() == WL_CONNECTED) { Serial.println("WiFi is connected!"); } if (wifiMulti.run() != WL_CONNECTED) { Serial.println("WiFi not connected!"); } delay(1000); } |
کد بالا را بر روی NodeMcu یا ESP8266 آپلود کرده و از طریق پنجره سریال روند مدیریت و اتصال به وای فای را پیگیری کنید. دقت داشته باشید که سرعت پنجره سریال را بر روی ۱۱۵۲۰۰ تنظیم کرده باشید.
در تصویر بالا، اگر دقت کنید، در میان متنهای ما در خروجی سریال متنهای دیگری نیز چاپ شدهاند که ما دستور چاپ آنها را در برنامه ندادهایم. مثل state، pm open, type:2 0 و… این مقادیر، در واقع برای اشکال زدایی (Debugging) مدیریت اتصال وای فای esp8266 بکار میروند. اگر در کد آردوینو بالا خط هشتم را بهصورت کامنت در بیاوریم، دیگر این متنها را در خروجی نخواهیم دید.
تبریک! پروژه شما هم اکنون به یک مدیر وای فای داخلی مجهز شده است. امیدوارم از این آموزش نیز لذت برده باشید.
سلام بسیار ممنون به خاطر مطالب خوبتون باید اینطور سایت ها تبلیغات بهتری داشته باشن تا مردم متوجه حضورشون بشن بسیار عالی بود .
سلام دوست عزیز
بازنشر و معرفی سایت هایی مثل سایت ما توسط دوستانی مثل تنها سرمایه تبلیغاتی ما هستند
سلام . ممنون بابت امورش خوبتون . این کتابخانه برای ESP32 کار نمیکند . برای اون از چه کتابخانه ای و چه کدهایی باید استفاده کنیم
درود بر شما، از نصب بودن کتابخانه اطمینان حاصل کنید، این کتابخانه هم میتونه مفید باشه:
https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiMulti/WiFiMulti.ino
سلام
تشکر بابت مقاله آموزنده.
سلام متشکر