سلام و درود خدمت همراهان همیشگی مایکروالکام. در قسمت های قبلی از سری آموزش های ESP8266 به نحوه استفاده از فایل سیستم برروی ESP8266 پرداخته شد. در این مطلب یک سریال مانیتور تحت وب را توسط برد NodeMCU و ESP8266 پیاده سازی خواهیم کرد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطلب من رو از این قسمت مطالعه کنید.
سریال مانیتور تحت وب
در بسیاری از پروژه های مبتنی بر ESP8266 و یا سایر برد های مشابه، از نرم افزار سریال مانیتور برای دیباگ کردن یا نمایش وضعیت ها استفاده میشود. این کار باعث میشود از عملکرد میکروکنترلر یا برد مطلع شویم. برای این کار از ارتباط سریال بین برد و سیستم رایانه خود استفاده خواهیم کردم. بهرحال گاهی ممکن است که نیاز باشد بدون کابل این کار انجام شود. پس در این حالت نیاز به یک بستر بیسیم است و از سریال مانیتور تحت وب استفاده میکنیم.
قطعات مورد نیاز
ویژگی های وب سریال مانیتور
- کار کردن با استفاده از WebSocket
- نمایش دیتا ها بصورت realtime و در لحظه
- باز کردن چندین صفحه وب سریال در مرورگر
- استفاده از کتابخانه AsyncWebserver برای عملکرد بهتر
توابع وب سریال مانیتور
استفاده از وب سریال مانیتور مشابه همان استفاده از سریال مانیتور بوده و اصلی ترین توابع آن ()print و ()println میباشد.
- ()print: پرینت کردن دیتا برروی سریال مانیتور تحت وب بدون کاراکتر رفتن به خط بعد.
- ()println: پرینت کردن دیتا برروی سریال مانیتور تحت وب و کاراکتر رفتن به خط بعد.
نصب کتابخانه WebSerial
برای اجرای این آموزش از کتابخانه WebSerial.h استفاده شده است. برای نصب این کتابخانه مراحل زیر را دنبال نمایید.
- باز کردن نرم افزار Arduio IDE
- مسیر “Sketch > Include Library > Mange Library” را دنبال کرده و Manage Library را باز کنید.
- webserial را سرچ کرده و آن را نصب کنید. نویسنده کتابخانه مورد بحث Ayush Sharma میباشد.
علاوه بر این به دو کتابخانه دیگر نیاز هست که از لینک های زیر میتونید این دو رو دانلود کنید و نصب کنید.
برای نصب این دو کتابخانه از مسیر Sketch > Include Library > Add .ZIP Library نسبت به نصب آن اقدام کنید.
مثال از وب سریال مانتیور با ESP8266
خود کتابخانه دارای 2 مثال برای استفاده است. اما در این جا آن را کمی تغییر خواهیم داد. در مثالی که در ادامه مشاهده میکنید هر 2 ثانیه عبارت “Microelecom” را برروی وب سریال مانیتور نمایش خواهد داد. همچنین شما میتوانید با ارسال “ON” و یا “OFF” چراغ LED ماژول را روشن یا خاموش کنید.
#include <ESP8266WiFi.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <WebSerial.h> #define LED 2 AsyncWebServer server(80); const char* ssid = "نام مودم وایفای"; const char* password = "رمز"; void recvMsg(uint8_t *data, size_t len){ WebSerial.println("Received Data..."); String d = ""; for(int i=0; i < len; i++){ d += char(data[i]); } WebSerial.println(d); if (d == "ON"){ digitalWrite(LED, LOW); } if (d=="OFF"){ digitalWrite(LED, HIGH); } } void setup() { Serial.begin(115200); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); if (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.printf("WiFi Failed!\n"); return; } Serial.println("IP Address: "); Serial.println(WiFi.localIP()); // WebSerial is accessible at "<IP Address>/webserial" in browser WebSerial.begin(&server); WebSerial.msgCallback(recvMsg); server.begin(); } void loop() { WebSerial.println("Microelecom!"); delay(2000); }
برای وصل شدن و باز کردن وب سریال مانیتور، بعد از پروگرام کردن ماژول سریال ماینتور نرم افزار Arduino IDE را باز کرده و در صورتی که که بصورت موفقیت آمیز به مودم کانکت شده باشد، یک آدرس IP را به شما اختصاص خواهد داد. آدرس IP در کادر سبز رنگ مشخص شده است.
برای باز کردن صفحه وب سریال مانیتور از آدرس زیر باید استفاده کرد. بجای IP Address همان آدرس IP نمایش داده شده در سریال مانیتور خود را وارد کنید.
IP Address/webserial
بررسی و نحوه عملکرد کد ها
در ابتدای برنامه لیست کتابخانه های مورد نیاز را اضافه میکنیم.
#include <ESP8266WiFi.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <WebSerial.h>
با استفاده کد زیر یک متغیر معرفی میکنیم.
#define LED 2
با کد زیر پورت مربوط به آبجکت AsyncWebServer را برابر 80 مقدار دهی میکنیم.
AsyncWebServer server(80);
در دو متغییر مقادیر مربوط به نام و رمز وایفای را وارد میکنیم.
const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD";
مدیریت و بررسی دیتا های دریافتی
تابع زیر دیتا های ارسالی از سمت وب سریال مانیتور را دریافت کرده و آن را در متغیری با نام D ذخیره میکند و برروی وب سریال مانیتور نیز پرینت میشود. همچنین با استفاده از دستورات شرطی در صورتی که ON ارسال شود از طرف وب سریال مانیتور یا OFF ال ای دی روی ماژول روشن یا خاموش خواهد شد.
void recvMsg(uint8_t *data, size_t len) { WebSerial.println("Received Data..."); String d = ""; for(int i=0; i < len; i++){ d += char(data[i]); } WebSerial.println(d); if (d == "ON"){ digitalWrite(LED, LOW); } if (d=="OFF"){ digitalWrite(LED, HIGH); } }
در تابع setup پایه شماره 2 که به LED روی ماژول متصل است بعنوان خروجی معرفی و مقدار آن HIGH قرار داده شده است. منطق این پایه برعکس است. لذا برای خاموش شدن از HIGH و برای روشن شدن از LOW استفاده میشود.
pinMode(LED, OUTPUT); digitalWrite(LED, HIGH);
با استفاده از دستورات زیر، ماژول را به شبکه محلی خود متصل میکنیم.
WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); if (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.printf("WiFi Failed!\n"); return; } Serial.println("IP Address: "); Serial.println(WiFi.localIP());
با استفاده از متد begin روی آبجکت WebSerial، وب سریال مانیتور را راه اندازی میکنیم.
WebSerial.begin(&server);
از recvMsg بعنوان مقدار تابع برگشتی msgCallback استفاده شده است. تابع ()recvMsg وقتی که دیتایی از وب سریال مانیتور ارسال شود فعال خواهد شد.
WebSerial.msgCallback(recvMsg);
در نهایت توسط کد زیر، سرور را راه اندازی و اجرا خواهیم کرد.
server.begin();
جمع بندی
در این آموزش به بررسی و نحوه پیاده سازی سریال مانیتور تحت وب پرداخته شد. در این ماژول از ESP8266 استفاده شده بود و در حالت StationMode راه اندازی شده بود. همچنین شما میتوانید آن را در حالت AccessPoint نیز راه اندازی کنید و از وب سریال مانیتور نیز استفاده کنید.
امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.
سلام
من یه ماژول esp32 cam رو پروگرام کردم و بعد از اتصال به شبکه موبایلم یک آی پی منحصر ه فرد بهم داد که فقط با همین تلفن همراه کار میکنه. چطور میتونم یک آی پی ایجاد کنم که بتونه به هر دستگاه دیگه ای متصل و با همون آی پی تصویر رو نمایش بده
SSID و PASSی که روی ماژول آپلود کردم و روی تلفن همراه خودم هم همین شبکه رو ساختم رو در تلفن همراه دیگری هم ساختم ولی فقط به همراه من وصل میشه. اینجوری مجبور هستم برای هر دستگاه، یکبار ماژول رو پروگرام کنم
سلام، مطلب زیر رو مطالعه بفرمایید.
https://blog.microele.com/how-to-assign-static-ip-on-esp8266/
A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
برای وقتی میخوام کد رو اپلود کنم برای چیه
ماژول به حالت بوت وارد نشده که بتونید آپلود کنید. مجددا طبق آموزش قرار گرفته در لینک زیر ماژول رو وارد حالت بوت کنید.
https://blog.microele.com/esp8266-programming/