آردوینو اینترنت اشیا IOT برد ویموس Wemos پروژه های آردوینو

کنترل اشیا از طریق اینترنت برد Wemos با تنظیمات DNS و IP استاتیک

Wemos-DDNS-Protocol--Digispark
نوشته شده توسط آرش کدخدایی

سیستم‌های کنترلی انواع مختلف با پروتکل‌های مختلفی دارند. از جمله کنترل از طریق پیامک یا همان ماژول‌های GSM که رویکرد مبتنی بر سخت افزار و زیرساخت شبکه مخابراتی عمل می‌کنند. نوع دیگر کنترل از راه دور که اخیرا بسیار مورد توجه قرار گرفته است. مبتنی بر بستر اینترنت یا همان اینترنت اشیاء است. البته منظور از اینترنت اشیاء IOT فقط به کنترل یک سخت افزار از راه دور ختم نمی‌شود. بلکه به ایجاد داده یا محتوا از طریق سخت افزارهای مختلف یا همان اشیاء اشاره دارد. در ادامه این مبحث باحال و جذاب، در این پست آموزشی شیوه مدیریت بر بستر اینترنت با برد متصل به وای فای و نرم افزار آردوینو را شرح خواهم داد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

دید کلی کنترل اشیاء از طریق اینترنت

ابتدا نیازمندیم که برنامه نویسی را روی یکی از بردهای Arduino که دارای اتصال به اینترنت است؛ انجام دهیم. انتخاب من برای این موضوع برد Wemos D1 Mini است. این برد کوچک، کم مصرف و بسیار مقرون به صرفه است. از اینرو برای کنترل اشیاء مختلف انتخاب مناسبی خواهد بود. سپس باید یکسری تنظیمات روی مودم یا روتری که برد Wemos D1 Mini به آن متصل است انجام دهیم. تا بتوانیم از طریق اینترنت به شیئ مورد نظر دسترسی داشته باشیم. برای این موضوع در آخر دو راه داریم: ۱-از ارائه دهنده اینترنت adsl درخواست آی پی استاتیک کنیم. در این حالت باید هزینه ماهیانه پرداخت شود. ۲-از سایت های ارائه دهنده داینامیک دی ان اس استفاده کنیم. از سایت‌های ارایه دهنده DNS رایگان می‌توانید استفاده کنید.

 

استفاده از مودم روتر برای کنترل اشیاء

در این آموزش من از مودم روتر TP-LINK TD-W8960N استفاده کرده‌ام ولی اکثر مودم روترها دارای این قابلیت هستند. در ادامه توضیح می‌دهم که چطور باید روی مودم روتر تغییرات را اعمال کنید. همچنین اگر به هنگام ایجاد تغییرات در مودم با مشکل مواجه شدید، یا اینکه مراحل را نمی‌دانستید از طریق ثبت نظر در ادامه همین پست نسبت به رفع مشکل اقدام کنید. من و دیگر همکارانم در تلاش خواهیم بود که پاسخ شما را در سریع‌ترین زمان ارسال کنیم.

 

راه اندازی برد Wemos برای مدیریت اشیاء

ابتدا رله را به پین D1 برد متصل می‌کنیم. اگر از شیلد رله مخصوص برد Wemos D1 Mini استفاده می‌کنید؛ پایه ارتباطی شیلد رله، D1 می‌باشد. به همین سادگی، پایه تغذیه را هم متصل می‌کنیم. پین VCC را به پایه ۵ ولت برد ویموس و پین GND را به پایه G برد ویموس متصل می‌کنیم. سپس برنامه زیر را با کامپایلر Arduino روی برد آپلود می‌کنیم. مشخصات مودم خود را جایگزین کنید و یک آی پی ثابت برای آن مشخص کنید.

 

وسایل مورد نیاز کنترل اشیاء از طریق اینترنت

برد ویموس Wemos mini D1 با تراشه ESP8266

ماژول رله Relay Module

مودم روتر دارای قابلیت Port Forwarding و Dynamic DNS

 

کدهای برنامه مدیریت اشیاء از طریق اینترنت

 

مهمان گرامی، جهت دسترسی به کدهای این پروژه، اسپارکر پلاس شوید.

 

 

پس از آپلود کدها روی برد ویموس، باید یکبار تست بگیرید. برای تست اتصال به برد میتوانید از آدرس‌های زیر استفاده کنید.

http://ip-address/url?switch=1 برای وصل کردن رله

http://ip-address/url?switch=0 برای قطع کردن رله

 

 

تنظیمات مودم برای اتصال به برد Wemos

وارد پنل مودم خود شوید. پنل اکثر مودم ها روی آی پی ۱۹۲٫۱۶۸٫۱٫۱ و یا ۱۹۲٫۱۶۸٫۰٫۱ قرار دارد. به قسمت Virtual Servers) Port Forwarding) بروید. در مودم استفاده شده به مسیر زیر بروید: Advance Setup – NAT – Virtual Servers

کنترل اشیا از طریق اینترنت برد Wemos با تنظیمات DNS و IP استاتیک- دیجی اسپارک

سپس روی add کلیک کنید. سرویس را روی HTTP یا وب سرور Web Server تنظیم کنید. آی پی برد خود را وارد کنید. سپس برای External Port یک عدد به عنوان پورت در نظر بگیرید. مقدار Internal Port باید روی ۸۰ تنظیم شود و فرم را ذخیره کنید. تا به اینجا ما دسترسی برد را به اینترنت باز کردیم. حال شما می‌توانید با استفاده از آی پی اینترنتی و پورت انتخابی از طریق http://ip-address:port به برد متصل شوید. نکته حائز اهمیت این است که این آی پی توسط ارائه دهنده اینترنت شما چند وقت یکبار عوض می‌شود. برای اینکه آی پی ثابتی داشته باشید باید آی پی استاتیک تهیه کنید. در غیر این صورت باید از داینامیک دی ان اس یا همان DDNS استفاده کنید. برای این منظور می‌توانید از وبسایت noip.com و یا هر وبسایت ارائه دهنده داینامیک دی ان اس، یک آدرس تهیه کنید. سپس از قسمت Dynamic DNS مودم روتر خود تنظیمات مربوطه را انجام دهید.

 

تنظیمات DDNS برای کنترل اشیاء

بعد از تهیه داینامیک دی ان اس میتوانید برای همیشه از طریق آدرس های زیر به برد دسترسی داشته باشید.

http://hostname.domain:port/url?switch=1

http://hostname.domain:port/url?switch=0

کنترل اشیا از طریق اینترنت برد Wemos با تنظیمات DNS و IP استاتیک- دانشجو کیت

در آدرس‌های بالا به جای hostname.domain آدرس انتخابی شما و به جای port پورت انتخابی شما باید جایگزین شود. حال شما می‌توانید این پروژه را گسترش داده و از این آدرس‌ها در پروژه‌های مختلف استفاده کنید. به همین سادگی از طریق آی پی آدرس میتوانید از راه دور و در بستر اینترنت، یک عدد رله را برای کنترل اشیاء کنید.

نکته: اگر مودم شما no-ip را پوشش نمیدهد برای فعال بودن همیشگی DDNS باید روی یک کلاینت Dynamic Update Client را نصب کنید. همچنین این کلاینت باید همیشه روشن و به مودم متصل باشد. در این پست روی برد رزپبری پای Raspberry pi انجام می‌دهیم. ابتدا ترمینال رزبری پای را باز کرده و دستورات زیر را وارد می‌کنیم.

ممکن است ورژن شما با نسخه استفاده شده در این آموزش متفاوت باشد. برای این منظور با استفاده از دستور ls می‌توانید نام این پوشه را چک کنید.

حال باید مراحل نصب را طی کنید و یوزرنیم و پسورد اکانت خود در سایت no-ip را وارد کنید. در یکی از مراحل زمان آپدیت شدن را می‌پرسد که باید عددی بزرگتر از ۵ وارد کنید، دقت کنید که این عدد نشان دهنده دقیقه است. پس از طی مراحل نصب دستورات زیر را وارد کنید.

برای اطمینان از کارکرد صحیح، دستور زیر را وارد می‌کنیم.

نصب DDNS روی ویندوز برای کنترل اشیاء

چنانچه برد رزبری پای Raspberry Pi ندارید. یا اینکه تمایل دارید از یک سیستم ویندوزی برای اینکار استفاده کنید. پیشنهاد می‌کنم از لینک نصب DDNS روی ویندوز استفاده کنید. در این آموزش توضیحاتی راجع به این نخواهم داد.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. 

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

آرش کدخدایی

یک تازه کار علاقه مند به تکنولوژی :)

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۲۶ دیدگاه

  • ممنون بابت آموزش خوبتون.خیلی مفید و کاربردی بود.
    در ضمن فک نکنم تو این پروژه نیاز به رزبری پای یا کلاینت دیگه ای باشه.توی مودم های تی پی لینک به صورت دیفالت سایت noip قابل انتخاب شدنه.و کافیه مشخصات و یوزر پسوردتون که سایت بهتون داده توی مودم ست کنید تا هردوقت آی پی عوض شد مودم خودش به سایت no-ip اطلا بده.

  • سلام
    من میخام یه ماژول مخابراتی مثل سیم۸۰۰ رو وصل کنم به رزپری پای و از اینترنتش استفاده کنم ، یه تعداد برد nodemcu هم دارم که از طریق وای فای به رزپری وصل میشن و اطلاعات میفرستن بهش و در نهایت رزپری اطلاعات رو پردازش می‌کنه و می‌فرسته.
    حالا من تو قسمت سیم۸۰۰ و اشتراک گذاری اینترنتش به رزپری و ایجاد ای پی استاتیک موندم و کمک میخام

    • با سلام
      ضمن تشکر از توجه شما، سوال شما ربطی به این پست ندارد. در خصوص ماژول GSM رزبری پای چندین پروتکل مختلف و زبان برنامه نویسی و کتابخانه وجود دارد. که بایستی در مکان مناسب سوالتان را مطرح کنید.

  • سلام
    ممنون بابت آموزشتون، من کتابخانه esp webserver را نصب میکنم ولی مثل اینکه مشکل داره، اگه ممکنه مثل بقیه آموزش ها توی فروشگاه اضافه کنید.
    خیلی ممنونم

    • با سلام و با تشکر از توجه شما
      این کتابخانه همراه با نصب سخت افزار esp8266 نصب میگردد و نیازی به نصب ندارد ولی کتابخانه به فروشگاه اضافه خواهد شد.
      با تشکر

  • سلام مهندس
    من برنامه رو آپلود کردم و درسته.
    فقط از قسمت تنظیمات مودم سر درنیاوردم.
    راهنمایی کنید لطفا
    مودم من: Irancell-TD-GP2101

      • با تشکر از شما
        من قسمت Port Forwarding List رو پیدا کردم.
        این فیلد ها رو با چه مقدار هایی پر کنم:
        Service:
        Protocol:
        Remote Port Range:
        Local Host:
        Local Port:
        اینم بگم که من مقدار های ۸۰ و ۸۸ و ۸۲۰۰ رو امتحان کردم نشد.

        • با سلام مجدد
          Service باید روی HTTP تنظیم شود
          Protocol روی tcp
          Remote port range روی پورت مورد نظر
          Local host روی آی پی داخلی wemos یا هر وسیله مشابه
          Local port روی ۸۰

          متاسفانه تجربه من در زمینه مودم های ایرانسل زیاد نیست ولی با پر کردن این موارد باید درست کار کند

        • با تعریف کردن پورت، شما میتونید با وارد کردن آی پی خارجی مودم (دقت کنید، نه داخلی) کار ها را انجام دهید
          دقت کنید که اصلا برای آی پی داخلی نیاز به وارد کردن پورت نمیباشد
          برای یافتن آی پی خارجی خودتون میتونید در گوگل ip address را سرچ کنید
          در ضمن زمانی که شما DDNS تعریف میکنید میتوانید به جای آی پی از این آدرس استفاده کنید

    • با سلام
      تقریبا هر چیزی را میشه باهاش کنترل کرد!
      شما میتونید با انواع ماژول ها از جمله رله (که تموم وسایل برقی را میشه باهاش خاموش و روشن کرد) پروژه های مختلف طراحی کنید.

      • سلام ، ممنون از آموزش های خیلی خوبتون ، برای یک پروژه دانشجویی نیاز هست که تعدادی ورودی دیجیتال کنترل بشن و در صورت قطع و وصل شدن(صفر و یک) روی بستر شبکه snmp trap ارسال کنن که نهایتا این trap ها با نرم افزار های خاص خودشون نمایش داده بشن ، برای پیاده سازی این پروژه به چه چیز هایی نیاز هست در صورت امکان راهنمائیم کنید .

      • سلام ممنون از اموزش خوبتون
        نمیشه رزبری رو حذف کنیم و از یک ابر سرور استفاده کنیم؟
        من نمیخوام درگیر رزبری بشم ایا راه دیگه ای هست که چندتا برد node mcu رو بشه اول مستر -اسلیو کنیم بعد با کمک سرور ابری بینشون ارتباط برقرار کنیم و چند وسیله رو خاموش یا روشن کنیم؟
        مرسی

        • با سلام
          در این آموزش رزبری پای نقش هماهنگ کننده آی پی را دارد که البته بعضی از مودم ها از جمله مودم استفاده شده در آموزش این قابلیت را دارا میباشند و نیازی نیست حتما از رزبری پای استفاده کنید

          • چرا شما روی مودم دستی میرین ای پی ست میکنین؟ حتما انجام این کار ضروریه؟
            من بدون این تنظیمات فقط node mcu رو به کامپیوترم وصل کردم و دتکت کرد، ایا اگه این مدارو به دوتا دیگه از دوستام بدم اونا هم باید برن دونه دونه ای پی نصب کنن؟ یا اتومات دتکت میشه؟
            حتی اینو با وموس هم امتحان کردم دتکت کرد

  • سلام من می خوام دستگاهی رو با اردوینو بسازم که یه کی پد داشته باشه و شماره موبایل رو که وارد می کنید و تایید می کنیم اون رو در پنل سامانه پیامکی در اینترنت متصل کنه از طریق وب سرویس
    چه تجهیزاتی نیاز داره و کد مربوط به اون رو از کجا گیر بیارم لطفا به طور کامل و دقیق راهنمایی کنید.

    • با سلام
      شما برای ارتباط با پنل سامانه پیامکی نیازمند ارتباط با اینترنت هستید که یا میتوانید از شیلد اِترنت برای آردوینو استفاده کنید و یا از ماژول های esp8266 مانند wemos استفاده کنید و سپس با اتصال کی پد به ماژول شماره را دریافت کرده و با توجه به سامانه پیامکی که دارید که باید راهنمای وبسرویس آن را مطالعه فرمایید پروژه را پیاده سازی کنید. متاسفانه کد مربوطه از بحث کامنت ها خارج است.

    • با سلام
      با توجه که کدی که ما برای این پروژه نوشتیم آی پی را ثابت و به دلخواه در نظر گرفتیم ولی اگه به آی پی برد بدون آی پی ثابت نیاز داشتید میتوانید از تابع WiFi.localIP() استفاده کنید.
      همچنین میتوانید از نرم افزار های اسکن شبکه استفاده کنید و آی پی تمام دستگاه های متصل به شبکه را پیدا کنید. به عنوان مثال نرم افزار nmap برای pc و fing برای اندروید موجود است.

  • سلام
    مهندس با تشکر از برنامه خوب شما میخواستم ببینم چه جوری باید برای برنامه پورت تعریف کنیم تا از خارج هم بشه به صفحات دسترسی داشت؟

  • سلام وقت بخیر
    شرمنده اینو چجوری باید تغییر بدم تا بتونم از هرجایی با صفحه وب کنترل کنم.پورت رو چجوری و کجای برنامه اضافه کنم؟

  • با سلام و تشکر از سایت خوبتون
    من میخوام از طریق وایفای اطلاعات خوانده شده از یک کارت حافظه را به روی یک صفحه ی وب بفرستم. اگه ممکنه راهنمایی کنید.

  • سلام هنگام کامپایل این اررور میدهد:

    Arduino: 1.8.5 (Windows 10), Board: “WeMos D1 R2 & mini, 80 MHz, 4M (1M SPIFFS), v2 Prebuilt (MSS=536), Disabled, None, 921600”

    C:\Users\nimagh9\Documents\Arduino\libraries\ESP8266WiFi\src\ESP8266WiFiScan.cpp: In static member function ‘static void ESP8266WiFiScanClass::_scanDone(void*, int)’:

    C:\Users\nimagh9\Documents\Arduino\libraries\ESP8266WiFi\src\ESP8266WiFiScan.cpp:297:41: error: cannot convert ‘bss_info::’ to ‘bss_info*’ in assignment

    for(bss_info* it = head; it; it = it->next, ++i)

    ^

    C:\Users\nimagh9\Documents\Arduino\libraries\ESP8266WiFi\src\ESP8266WiFiScan.cpp:305:45: error: cannot convert ‘bss_info::’ to ‘bss_info*’ in assignment

    for(bss_info* it = head; it; it = it->next, ++i) {

    ^

    exit status 1
    Error compiling for board WeMos D1 R2 & mini.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

      • سلام تشکر از آموزش خوبتون من با ای پی به راحتی جواب گرفتم اما طبق گفته شما پایدار نیست و باید دائما کد تغییر کند . من ddns رایگان تهیه کردم در قسمت کد کدام قسمت باید تغییر کند ؟و وقتی hostname خود را در مرورگر وارد میکنم (به همراه domain و .com) اتفاقی نمیافتد و صفحه اررور می آید. لطفا راهنمایی فرمایید تشکر

        • سلام
          شما باید پورت تعریف شده را هم در انتهای دامنه وارد کنید
          یعنی آدرس خارجی یک دستگاه به اینصورت خواهد بود:
          hostname.ddns.net:port
          در ضمن در شبکه داخلی امکان دسترسی از طریق ddns وجود ندارد.

                  • این هم کد ها
                    #include
                    #include

                    byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
                    byte ip[] = {192,168,1,10};
                    byte gateway[] = {192,168,1,1};
                    byte subnet[] = {255,255,255,0};

                    int LED = 4;
                    int POT = A0;
                    int reading;

                    //——————
                    EthernetServer server(80);
                    String readString;
                    //——————

                    void setup() {
                    Serial.begin(9600);
                    pinMode(LED,OUTPUT);

                    while(!Serial){
                    ;
                    }

                    Ethernet.begin(mac,ip,gateway,subnet);
                    server.begin();
                    Serial.println(“IP Address Is :”);
                    Serial.println(Ethernet.localIP());
                    }

                    void loop() {
                    EthernetClient client = server.available();
                    if (client)
                    {
                    while(client.connected())
                    {
                    if (client.available())
                    {
                    char c = client.read();
                    //——————–
                    if (readString.length()<100)
                    {
                    readString += c;
                    Serial.print(c);
                    }
                    //——————–

                    if(c=='\n')
                    {
                    //——————-
                    Serial.println(readString);

                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println();

                    //——————-
                    client.println("<META HTTP-EQUIV=REFRESH CONTENT=5");
                    //——————-

                    client.println("”);
                    client.println(“”);
                    client.println(“Control Device With Network”);
                    client.println(” body{ margin:60px 0px; padding:0px; text-align:center; background-color:#4caf50; } h1,h2,h3{ text-align:center; font-family:tahoma; } a{ text-decoration:none; width:200px; height:150px; border-color:green; border-top:2px solid; border-bottom:2px solid; border-right:2px solid; border-left:2px solid; border-radius:10px 10px 10px; font-family:tahoma; text-align:center; padding:8px; background-color:#ff5722; } a:hover{ color:#ffee58; font-style:bold; } “);
                    client.println(“”);

                    client.println(“”);
                    client.println(“”);
                    client.println(“Control Device With Network”);
                    client.println(“”);
                    client.println(“”);
                    client.println(“Arduino With Ethernet Shield”);
                    client.println(“”);
                    //——————-

                    //——————-
                    reading = analogRead(POT);
                    client.println(“Analog Sensor Value = “);
                    client.println(reading,DEC);
                    client.println(“”);
                    //——————-

                    client.println(“”);
                    client.println(“”);

                    //——————-
                    client.println(“”);
                    client.println(” LED ON “);
                    client.println(” LED OFF “);
                    client.println(” “);
                    //——————-

                    client.println(“”);
                    client.println(“”);
                    client.println(“”);
                    client.println(“”);

                    delay(1);
                    client.stop();

                    if(readString.indexOf(“?led_control=1”)>0)
                    {
                    digitalWrite(LED,HIGH);
                    }
                    if(readString.indexOf(“?led_control=2″)>0)
                    {
                    digitalWrite(LED,LOW);
                    }
                    readString=””;
                    }
                    }
                    }
                    }
                    }

  • سلام وقت بخیر اگه از برد Raspberry استفاده کنیم و Raspberry رو به hotspot گوشی وصل کنیم امکانش هست که از مودم استفاده نکنیم؟؟؟

  • سلام
    دوتا سوال

    ۱. منظور از آی پی هایی که باید با سورس برنامه عوض کنیم رو نمیفهمم کدوم آی پی ها مورد نظره؟
    ۲.هر کاری میکنم نمی تونم با
    http://ip-address/url?switch=1
    کار کنم
    اصلا کدوم آی پی باید اینجا بخوره ؟
    و چه جوری لامپ رو به راه وصل کنم من اینجا گیر کردم

  • سلا
    برنامتون خیلی خوب و جالب بود
    ازطریق صفحه وب انجام شد
    حالا اگر بخواهم از طریق اپلیکیشن اندروید انجام بدم چه دستوری رو بفرستم اینو فرستادم
    url?switch=1 جواب نداد
    متشکرم

  • باسلام ممنون از اموزش خوبتان شرمنده مقادیر ای پی در خطوط ۹ تا ۱۱ که در برنامه ثبت کرده اید را چگونه می توانم مقدار انها را بخوانم

    • با سلام و تشکر
      توی cmd ویندوز بزنید ipconfig و بدنبال قسمت Wireless LAN adapter Wi-Fi بگردید
      مشخصات اتصال وای فای کامپیوتر خودتون را میزنه که میتونید Subnet Mask و Default Gateway را ببینید
      برای آی پی هم بدلخواه انتخاب کنید

  • سلام خسته نباشید . من چند روز هست که درگیر این پرژه شدم ولی پیشرفتی هنوز نداشتم .
    لطفا شما جای http://ip-address/url?switch=1 نحوه درست وارد کردن این ارقام را وارد کنید مثلا : من http://moghaddam1391.ddns.net/182.168.1.6?switch=1این طور وارد کردم آیا صحیح است اگر غلط هست شما خودت این را با اطلاعات خودتون وارد کنید من ببینم . در ضمن من مودمم tp- link هست جایی برای وارد کردن پورت در قسمت مودم ندارد .

  • سلام.وقتی میخوام برد ویموس روب نرم افزار اردینو متصل کنم ارور میده ک esp8266، رو نداری ولی نمیتونم دانلودش هم بکنم و این ارور رو میده. باید چیکار کنم؟؟؟
    error: ESP8266WiFi.h: No such file or directory
    #include
    ^
    compilation terminated
    exit status 1
    Error compiling for board Arduino/Genuino Uno.
    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  • سلام کجای برنامه باید اضافه بشه که من چند خروجی از برد wemos را صفر و یک کنم . ماژول wifi lk ver 12 بود که من کمی تغیرات تو برنامه دادم . اینم کد تغییر داده شده
    #include
    #include

    ESP8266WebServer server(80);

    int ledPin1 = 16; // GPIO16
    int ledPin2 = 5; // GPIO5
    int ledPin3 = 4; // GPIO4
    int ledPin4 = 0; // GPIO0
    int ledPin5 = 2; // GPIO2
    int ledPin6 = 14; // GPIO14
    int ledPin7 = 12; // GPI12
    int ledPin8 = 13; // GPI13

    const char* ssid = “AirPad”; //نام وای فای خود را جایگزین کنید//
    const char* password = “xxxxxx”; //رمز وای فای خود را جایگزین کنید//
    IPAddress ip(192, 168, 1, 2); //آی پی مورد نظر خود را وارد کنید//
    IPAddress gateway(192, 168, 1, 1); //آی پی مودم خود را وارد کنید//
    IPAddress subnet(255, 255, 255, 0);

    int s=0;

    void on() {
    digitalWrite(ledPin1, HIGH);
    Serial.println(“Switch on!”);
    }

    void off() {
    digitalWrite(ledPin1, LOW);
    Serial.println(“Switch off!”);
    }

    void handle() {
    String message = “”;
    for (uint8_t i=0; i<server.args(); i++){
    if (server.argName(i) == "switch"){
    s = server.arg(i).toInt();
    }
    message += server.argName(i) + ": " + server.arg(i) + "\n";
    }
    server.send(200, "text/plain", message);
    Serial.println(message);
    if(s){
    on();
    }else{
    off();
    }
    }

    void setup() {
    Serial.begin(115200);
    delay(10);

    pinMode(ledPin1, OUTPUT);
    digitalWrite(ledPin1, LOW);

    WiFi.config(ip, gateway, subnet);
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("WiFi connected");

    server.on("/url", handle);
    server.begin();
    Serial.println("server started!");
    }

    void loop() {
    server.handleClient();
    }
    من ورودی ها رو تعریف کردم فقط خروجی یکی تعریف شده

  • خسته نباشد برای تغییر در برنامه سعی کردم دو کانالش کنم ولی با پیغام روبرو شدم اگه امکانش هست این برنامه رو برای دو وسیله برنامه نویسی کنید ببینم. ممنون از زحمات بی وقفه شما. سایت خوبتون

    • این قطعه کد را در آموزش بیابید:
      void on() {
      digitalWrite(relayPin, HIGH);
      Serial.println("Switch on!");
      }

      void off() {
      digitalWrite(relayPin, LOW);
      Serial.println("Switch off!");
      }

      void handle() {
      String message = "";
      for (uint8_t i=0; i<server.args(); i++){
      if (server.argName(i) == "switch"){
      s = server.arg(i).toInt();
      }
      message += server.argName(i) + ": " + server.arg(i) + "\n";
      }
      server.send(200, "text/plain", message);
      Serial.println(message);
      if(s){
      on();
      }else{
      off();
      }
      }

      و با قطعه کد زیر جایگزین کنید:
      void on1() {
      digitalWrite(relayPin1, HIGH);
      Serial.println("Switch1 on!");
      }

      void off1() {
      digitalWrite(relayPin1, LOW);
      Serial.println("Switch1 off!");
      }

      void on2() {
      digitalWrite(relayPin2, HIGH);
      Serial.println("Switch2 on!");
      }

      void off2() {
      digitalWrite(relayPin2, LOW);
      Serial.println("Switch2 off!");
      }

      void handle() {
      String message = "";
      for (uint8_t i=0; i<server.args(); i++){
      if (server.argName(i) == "switch1"){
      s1 = server.arg(i).toInt();
      }
      if (server.argName(i) == "switch2"){
      s2 = server.arg(i).toInt();
      }
      message += server.argName(i) + ": " + server.arg(i) + "\n";
      }
      server.send(200, "text/plain", message);
      Serial.println(message);
      if(s1){
      on1();
      }else{
      off1();
      }
      if(s2){
      on2();
      }else{
      off2();
      }
      }

      دقت داشته باشید که چند متغیر اضافه شدند یا تغییر کرده اند (relayPin1وrelayPin2وs1وs2) که شما باید در برنامه خود آنها را تعریف کنید همچنین برای کنترل رله ۱ و ۲ به تریتیب باید از آدرس های زیر استفاده کنید
      ip/url?switch1=0
      ip/url?switch2=0

    • این قطعه کد را در آموزش بیابید:
      void on() {
      digitalWrite(relayPin, HIGH);
      Serial.println("Switch on!");
      }

      void off() {
      digitalWrite(relayPin, LOW);
      Serial.println("Switch off!");
      }

      void handle() {
      String message = "";
      for (uint8_t i=0; i<server.args(); i++){
      if (server.argName(i) == "switch"){
      s = server.arg(i).toInt();
      }
      message += server.argName(i) + ": " + server.arg(i) + "\n";
      }
      server.send(200, "text/plain", message);
      Serial.println(message);
      if(s){
      on();
      }else{
      off();
      }
      }

      و با قطعه کد زیر جایگزین کنید:
      void on1() {
      digitalWrite(relayPin1, HIGH);
      Serial.println("Switch1 on!");
      }

      void off1() {
      digitalWrite(relayPin1, LOW);
      Serial.println("Switch1 off!");
      }

      void on2() {
      digitalWrite(relayPin2, HIGH);
      Serial.println("Switch2 on!");
      }

      void off2() {
      digitalWrite(relayPin2, LOW);
      Serial.println("Switch2 off!");
      }

      void handle() {
      String message = "";
      for (uint8_t i=0; i<server.args(); i++){
      if (server.argName(i) == "switch1"){
      s1 = server.arg(i).toInt();
      }
      if (server.argName(i) == "switch2"){
      s2 = server.arg(i).toInt();
      }
      message += server.argName(i) + ": " + server.arg(i) + "\n";
      }
      server.send(200, "text/plain", message);
      Serial.println(message);
      if(s1){
      on1();
      }else{
      off1();
      }
      if(s2){
      on2();
      }else{
      off2();
      }
      }

      دقت داشته باشید که چند متغیر اضافه شدند یا تغییر کرده اند (relayPin1وrelayPin2وs1وs2) که شما باید در برنامه خود آنها را تعریف کنید همچنین برای کنترل رله ۱ و ۲ به تریتیب باید از آدرس های زیر استفاده کنید
      http://ip-address/url?switch1=0 یا ۱
      http://ip-address/url?switch2=0 یا ۱

  • سلام

    در کد، دستور
    ESP8266WebServer server(80);
    را به
    ESP8266WebServer server(8200);
    تغییر دادم

    برنامه کامپایل میشه و روی local ip به درستی عمل میکنه:
    http://192.168.1.150:8200/url?switch=1

    تنظیمات مودم هم به اینصورت هست:
    http://uupload.ir/files/indi_port-forward.png

    با فرض اینکه public ip من ۵٫۱۲۲٫۱۲۲٫۲۲۱ و استاتیک هست؛ از طریق url زیر به بورد دسترسی ندارم
    http://5.122.122.221:8200/url?switch=1

    تنظیمات خاصی داره؟

    پ.ن:مدل مودم من TD-LTE i40 ایرانسل هست

    سپاس

  • سلام ممنون بابت آموزشهای عالیتون
    ۲ سوال :
    ۱_ من چند تا برد esp8266 دارم( همه در یک مکان هر کدوم به یک وسیله برقی وصله) میخوام اینها رو از طریق اینترنت کنترل کنم
    ۲_ میشه در مورد اصطلاح “مش(mesh)” یه توضیحاتی بدین
    ممنون

    • سلام و سپاس
      از طریق همین آموزش و تنظیم پورت های مختلف برای هر وسیله میتونید هر وسیله را بصورت جداگانه کنترل کنید
      شبکه مش یا شبکه توری یک نوع ساختار شبکه میباشد که مرکزیتی برای شبکه وجود ندارد و تمامی کلاینت ها به هم متصل هستند. این شبکه برای مواقعی مناسبه که اگه اتفاقی برای یکی از کلاینت ها افتاد روی بقیه شبکه تاثیر نزاره

  • سلام ، بنده پروژه ای داشتم میخواستم بدونم آیا از اعضای این سایت کسی می تواند آنرا انجام دهد ؟
    دستگاهی که مکالمات تلفنی دفتر را ضبط و فایل آنها را در DRIVE یا DROPBOX بریزد ویا بتوان از طریق REMOT DESKTOP به آن دستگاه دسترسی داشت و فایل ها را برداشت. ضمنا در صورت قطع و وصل برق شهر ، بطور اتوماتیک ریستارت شود و برای فعال سازی مجدد نیازی برای حضور در محل نباشد. باتشکر

  • سلام خسته نباشید من پروزه را می خواهم انجام بدهم اون وقت ماژول wifi یک مدل دیگه است مشکلی نداره و ماژول رله Relay Module را هم ندارم می خواستم ببینم داشتن این ماژول لازمه یا نه ممنون

  • سلام. من این برنامه رو انجام دادم و درست کار کرد. اما مودم رو خاموش کردم و دوباره روشن کردم. ip لپتاپ تغییر کرد و برنامه دیگه از طریق شبکه خارجی و هاستی که از اون وبسایت گرفتم کار نکرد و فقط از طریق شبکه داخلی کار میکرد. میخواستم بدونم مشکل چیه؟

    • سلام
      با خاموش و روشن کردن مودم آی پی حارجی شبکه تغییر میکند.
      با تایپ عبارت ip در گوگل میتونید آی پی خارجی خودتون را ببینید، چک کنید که آیا از طریق این آی پی میتونید درسترسی داشته باشید؟

  • سلام.خسته نباشید. لازمه که حتما دستگاه نزدیک مودم باشه؟ چون وقتی دستگاه رو از مودم دور میکنم یعنی تاجایی که دیگه مودم آنتن نمیده دیگه نمیشه دستگاه رو کنترل کنم. چه کاری باید انجام بدم تا وقتی دستگاه از مودم دوره هم جواب بده؟

  • سلام. عیدتون مبارک
    ممنون از اموزش عالی تون
    من طبق راهنمایی شما رفتم جلو اما کمی گیج شدم…..
    بالاخره در تنظیمات روتر باید از اون ای پی که ابتدای کد برای برد تعریف کردیم (مثلا ۱۹۲٫۱۶۸٫۱٫۲۰۰) استفاده کنیم یا از ای پی که از گوگل میگیریم (۵٫۵۳٫۴۵٫۱۵۳) و هربار هم تغییر میکنه ؟
    من هر دو رو امتحان کردم اما جواب نداد…. نمیدونم چرا اما قبلا پورت ۸۰ با ای پی ۱۹۲٫۱۶۸٫۱٫۱۲۳ تنظیم شده بود و نمیشد دوباره روی همین پورت کار کرد. ارور میداد:
    ERROR: FAIL TO UPDATE DUE TO… DUPLICATE PORT NUMBER !
    برای همین یه پورت دیگه استفاده کردم –> 8121
    البته تغییرات لازم رو هم در کد اعمال کردم:
    ESP8266WebServer server(8121);
    اما باز هم اتفاقی نیفتاد…
    یعنی هم ۱۹۲٫۱۶۸٫۱٫۲۰۰:۸۱۲۱ و هم ۵٫۵۳٫۴۵٫۱۵۳:۸۱۲۱ من رو به برد متصل نکرد.
    من از مودم d-link 2520u استفاده میکنم و فیلدهای صفحه تنظیمات پورت فورواردینگ اون این طوریه:
    private ip
    protocol type
    public start port
    public end port
    connection:PVC0
    همچنین ISP من مخابراته و زنگ زدم بپرسم که ایا پورت ها رو نبستن؟
    به دلیل مسایل امنیتی جواب ندادن….
    ممنون میشم کمک کنین.

    • سلام عید شما هم مبارک
      سپاس
      باید از آی پی داخلی یعنی ۱۹۲٫۱۶۸٫۱٫۲۰۰ استفاده کنید
      در تنظیمات مودم ابتدا تنظیمات قبلی که در port forwarding اعمال کردید حذف کرده و دوباره اضافه کنید.
      پورت ۸۰ هم در مخابرات تا اونجایی که میدونم مشکلی نداشت.
      در هر صورت آی پی داخلی هم نباید مشکلی داشته باشه و ربطی به هیچ کدوم از تنظیمات مودم نداره.

  • سلام
    من نسبتا تازه با آردوینو آشنا شدم اما چون میخوام پروژه هام وایرلس باشند واز طرفی تازه برد وموس رو دیدم و برام جذاب بود خواستم سوالی رو مطرح کنم چون مطالب سایت خیلی گنگ و کلی بود. اولا آیا این برد مستقل هست یا از برد آردوینو مثل uno استفاده میکنه.ثانیا من قصد دارم تعداد زیادی وسیله برقی رو با موبایل کنترل کنم آیا باید برای هر وسیله جدا برد وموس و رله بگیرم یا فقط یک برد وچند رله؟ثالثا از کدام برد وموس استفاده کنم.پیشاپیش ازتون تشکر میکنم

    • سلام
      این پروژه با wemos d1 mini انجام شده ولی میتونید با تهیه یک ماژول esp8266 و اتصال آن به آردوینو نیز اینکار را انجام دهید.
      و برای اتصال چندین وسیله باید رله بیشتر تهیه کنید

      • سلام مجدد
        لطفا آدرس پروژه انجام شده با wemos d1 mini رو بزارید
        و اگر از ماژول esp8266 استفاده کنم قسمت فرستنده دستورات که برد آردوینو باشه بیسیم میشه برای دریافت کننده که رله ها باشه چطور بیسیمشون کنم (چون رله هام وایرلس نیستن)آیا باید رله ها رو عوض کنم؟نمیخوام سرتاسر خونه سیمکشی بشه
        ضمنا قسمت عضویت اسپارکرپلاس هم مشکل داره لطفا بررسی کنید.ممنون

        • همین پروژه با wemos d1 mini انجام شده است.
          با اتصال esp8266 به برد آردوینو شما میتونید از تموم کتابخانه های esp8266 توی برنامتون استفاده کنید و مشکلی با بقیه قسمت های آردوینو ندارد و کلا ربطی به نوع رله ندارد. و اون میکروکنترلر (آردوینو ویا ویموس) هستش که رله را کنترل میکنه و اگه رله ها از هم فاصله دارند بهتره برای هر کدوم یک میکرو کنترلر تهیه بشه.
          باتشکر از شما. مشکل حل شده است.

  • سلام آخه برای چی کد هارو پولی کردید

    ما که اومدیم برد هاشو از شما خریدیم حالا اومدید کد هاشم پولی کردید باید بیشتر از پول برد پول کدش رو بدم!

  • سلام من از یه کد دیگه استفاده می کنم و موقع فراخوانی آی پی کار می کنه ولی وقتی ddns فراخونی می کنم صفحه فقط می چرخه و لود نمی شه – وقتی دامنه رو فراخونی می کنم صفحه ورود مودم میاد که یعنی ست شده
    – باید کد خواصی در کد هام باشه تا در ddns بیاد؟

    • سلام
      مهم نیست از چه کدی استفاده میکنید فقط باید آی پی ثابت تنظیم شده باشد و در مودم از آن آی پی استفاده کرده باشید.
      دقت کنید که در آخر دامنه باید پورتی که برای آی پی تنظیم کرده اید وارد شود، همچنین در مواردی دیده شده که نمیتوانید از این دامنه در شبکه داخلی مودم مورد نظر استفاده کنید و باید از شبکه دیگری از دامنه ddns استفاده کنید.

  • سلام
    از طریق sep8266-01 قصد دارم پروژه ای رو اجرا کنم از طریق وب پروژه روی برد برد اجرا میشه و مثلا led از طریق وایفای روشن میشه ولی وقتی رله جای گزین میکنم عمل نمیکنه.رله ۵ ولت هست و vcc رو از ۵ ولت منبع جدا گرفتم و فقط برای تحریکش باید از esp8266 استفاده کنم.ناگفته نماند که وقتی بدون فرمان دادن به gpio وصل مینم رله یکسره میشه و عمل میکنه و با فرمان دادن نه. من ولتاژ۵ ولت دارم چرا پروژه که با فرمان دادن led رو روشن میکنه رله رو روشن نمیکنه؟؟