آموزش آردوینو اینترنت اشیا IOT برد ESP8266 خانه هوشمند

کنترل ۴ وسیله برقی به صورت همزمان با وب‌سرور ESP8266 آردوینو

نوشته شده توسط CiferTech

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

 

کنترل وسایل برقی با وب سرور ESP8266 آردوینو - دیجی اسپارک

 


برد ESP8266


تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید می‌شوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی می‌کنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.

کنترل وسایل برقی با ESP8266 از طریق وب سرور آردوینو - دیجی اسپارک

 


وب سرور ۴ وسیله برقی


وب سرور ها برنامه هایی هستند که مسئولیت آن ها قبول کردن درخواست های Http است که از سمت کاربران ارسال می شود، وب سرور ها در پاسخ اطلاعاتی را ارسال می کنند که ما معمولا به نام صفحات Html می‌شناسیم. خب حالا فرض کنیم که در مرورگر https://digispark.ir را سرچ کردیم، اتفاقی که می‌افتد به این شکل است که مرورگر شما یک درخواست به دامنه‌ای با نام digispark.ir ارسال می‌کند. در حالت عادی زمانی که شما آدرس سایتی را در مرورگر جست و جو می‌کنید از حروف انگلیس استفاده می‌کنید یعنی کلماتی قابل فهم برای انسان اما در واقع برای ورود به یک سایت باید از طریق ip آن اقدام کنید، اینجاست که مفهومی به نام DNS وارد کار می‌شود، پس در واقع زمانی که شما URL سایتی را جستجو می کنید مرورگر از طریق سرویس DNS، آی پی مربوط را پیدا می‌کند و درخواستی ارسال خواهد کرد.

 


توضیح تکمیلی


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

وب سرور آردوینو ESP8266 - دیجی اسپارک

 


وسایل مورد نیاز


برد ESP8266

ماژول رله Relay

کابل برای اتصالات

 


شماتیک و اتصالات


در این آموزش از چهار ماژول راله استفاده کرده‌ایم که البته میتوانید از یک ماژول رله چهار رله استفاده کنید که نیاز به تغذیه تک به تک ماژول ها نباشد و با یک خط پاور ماژول تغذیه شود و تنها پایه های ورودی به هر GPIO متصل شود. اتصالات هر ماژول را با استفاده جدول و شماتیک زیر برقرار کنید. در این پروژه از پین D1, D2, D3, D4 برای فعال و غیر فعال کردن ماژول های رله استفاده می‌کنیم.

اتصالات ماژول رله به برد Nodemcu - دیجی اسپارک

اتصال ماژول رله دوم به برد Nodemcu - دیجی اسپارک

اتصال رله چهارم به برد Nodemcu - دیجی اسپارک

 

  • شماتیک اتصالات پروژه کنترل ۴ وسیله برقی همزمان با وب‌سرور ESP8266

 


کد و راه‌اندازی


در بخش بعدی از راه‌اندازی نوبت به کد های این پروژه می‌رسد، کد های این پروژه از دو بخش کلی تشکیل بخش اول راه‌اندازی وب‌سرور و ساخت بخش ظاهری آن برای تعامل با کاربر و در بخش تعریف فانکشن های مورد نظر برای برقراری ارتباط بین وب سرور و NODEMCU برای کنترل GPIO های مدنظر. در این قسمت بخش های مهمی از این کد را بررسی خواهیم کرد. در بخش اوب نام و رمز شبکه وای‌فای مدنظر را برای اتصال برد معرفی می‎‌کنیم.

const char* ssid = "C1F3R"; // نام وای فای مورد نظر 
const char* password = "314159265"; // پسوورد وای فای

 

در ادامه GPIO های مد نظر برای کنترل را مشخص خواهیم کرد که می توانید با توجه به نیاز آن ها را تغییر دهید. توجه داشته باشد ترتیب پین های GPIO با نام پین های NODEMCU متفاوت است پس قبل از تغییر دادن این پین ها PINOUT های برد را چک کنید.

const int relay1 = 5; // D1
const int relay2 = 4; // D2
const int relay3 = 0; // D3
const int relay4 = 2; // D4

 

در این سه خط با استفاده از SSID و پسوورد وای‌فای اقدام به اتصال به شبکه خواهیم کرد.

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);

 

این چند خط مربوط به موارد موجود در صفحه وب است که می‌توانیم از این طریق ظاهر آنها و همچنین کل صفحه را تغییر دهیم.

client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            
            client.println("<style>html, body {background-color: #566573; font-family: Helvetica; display: block; color: #DD13DA; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #DD13DA; border: none; color: black; padding: 12px 24px;");
            client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: black; border: none; color: #DD13DA; padding: 12px 24px;}");
            client.println(".textbox {width: 60px; border: 1px  #333; padding: 16px 20px 0px 24px; background-image: linear-gradient(180deg, #fff, #ddd 40%, #ccc);}");
            client.println(".mytext {font-size: 16px; font-weight:bold; font-family:Arial ; text-align: justify;}");
            client.println("#container {width: 100%; height: 100%; margin-left: 5px; margin-top: 20px; padding: 10px; display: -webkit-flex; -webkit-justify-content: center; display: flex; justify-content: center;} ");

 

کد کامل پروژه کنترل ۴ وسیله برقی همزمان با وب‌سرور ESP8266

#include <ESP8266WiFi.h>
    
const char* ssid = "C1F3R"; // نام وای فای مورد نظر 
const char* password = "314159265"; // پسوورد وای فای

// تنظیم پورت وب سرور
WiFiServer server(80);

// متغیر برای ذخیره درخواست های HTTP
String header;

String relay1State = "off";
String relay2State = "off";
String relay3State = "off";
String relay4State = "off";

// پین های مورد استفاده برای کنترل رله
const int relay1 = 5; // D1
const int relay2 = 4; // D2
const int relay3 = 0; // D3
const int relay4 = 2; // D4

void setup() {
  Serial.begin(115200);
  
  pinMode(relay1, OUTPUT);  // حالات پین های مربوط را انتخاب می کنیم
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  
  digitalWrite(relay1, HIGH);  // رله های را بطور پیفرض بر روی روشن قرار می دهیم
  digitalWrite(relay2, HIGH);
  digitalWrite(relay3, HIGH);
  digitalWrite(relay4, HIGH);

  Serial.print("Connecting to ");   
  Serial.println(ssid);
  WiFi.begin(ssid, password);    // با نام و پسوورد وارد شده اقدام به اتصال میکنیم
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());  // ادرس ای پی را پرینت می کنیم
  server.begin();
}

void loop() {
  WiFiClient client = server.available();   // وب سروو را اجرا میکنیم

  if (client) {                             
    Serial.println("New Client.");         
    String currentLine = "";                
    while (client.connected()) {           
      if (client.available()) {           
        char c = client.read();         
        Serial.write(c);                   
        header += c;
        if (c == '\n') {                 
         
          if (currentLine.length() == 0) {
           
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();

                    //با توجه به درخواست های دریافت شده پین فعال میشود
            if (header.indexOf("GET /5/on") >= 0)
            {
              Serial.println("GPIO 5 on");
              relay1State = "on";
              digitalWrite(relay1, LOW);
            }
            else if (header.indexOf("GET /5/off") >= 0)
            {
              Serial.println("GPIO 5 off");
              relay1State = "off";
              digitalWrite(relay1, HIGH);
            }
            else if (header.indexOf("GET /4/on") >= 0) {
              Serial.println("GPIO 4 on");
              relay2State = "on";
              digitalWrite(relay2, LOW);
            }
            else if (header.indexOf("GET /4/off") >= 0) {
              Serial.println("GPIO 4 off");
              relay2State = "off";
              digitalWrite(relay2, HIGH);
            }
            else if (header.indexOf("GET /0/on") >= 0)
            {
              Serial.println("GPIO 0 on");
              relay3State = "on";
              digitalWrite(relay3, LOW);
            }
            else if (header.indexOf("GET /0/off") >= 0)
            {
              Serial.println("GPIO 0 off");
              relay3State = "off";
              digitalWrite(relay3, HIGH);
            }
            else if (header.indexOf("GET /2/on") >= 0) {
              Serial.println("GPIO 2 on");
              relay4State = "on";
              digitalWrite(relay4, LOW);
            }
            else if (header.indexOf("GET /2/off") >= 0) {
              Serial.println("GPIO 2 off");
              relay4State = "off";
              digitalWrite(relay4, HIGH);
            }

            // صفحه HTML
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            
            // میتوانید مقادیر را با توجه به نیاز خود شخصی سازی کنید
            
            client.println("<style>html, body {background-color: #566573; font-family: Helvetica; display: block; color: #DD13DA; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #DD13DA; border: none; color: black; padding: 12px 24px;");
            client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: black; border: none; color: #DD13DA; padding: 12px 24px;}");
            client.println(".textbox {width: 60px; border: 1px  #333; padding: 16px 20px 0px 24px; background-image: linear-gradient(180deg, #fff, #ddd 40%, #ccc);}");
            client.println(".mytext {font-size: 16px; font-weight:bold; font-family:Arial ; text-align: justify;}");
            client.println("#container {width: 100%; height: 100%; margin-left: 5px; margin-top: 20px; padding: 10px; display: -webkit-flex; -webkit-justify-content: center; display: flex; justify-content: center;} ");
            
            client.println("</style></head>");

            
            client.println("<body><h1></h1>");

            // المان های داخل صفحه وب تعریف می شوند

            client.println("<div id=\"container\">");
            client.println("<p><div class=\"textbox mytext\">Relay 1 </div> ");
            if (relay1State == "off") {
              client.println("<a href=\"/5/on\"><button class=\"button\">OFF</button></a></p>");
            } else {
              client.println("<a href=\"/5/off\"><button class=\"button button2\">ON</button></a></p>");
            }
            client.println("</div>");
            
            client.println("<div id=\"container\">");
            client.println("<p><div class=\"textbox mytext\">Relay 2 </div> ");
            
            if (relay2State == "off") {
              client.println("<a href=\"/4/on\"><button class=\"button\">OFF</button></a></p>");
            } else {
              client.println("<a href=\"/4/off\"><button class=\"button button2\">ON</button></a></p>");
            }
            client.println("</div>");

            client.println("<div id=\"container\">");
            client.println("<p><div class=\"textbox mytext\">Relay 3 </div>");
            
            if (relay3State == "off") {
              client.println("<a href=\"/0/on\"><button class=\"button\">OFF</button></a></p>");
            } else {
              client.println("<a href=\"/0/off\"><button class=\"button button2\">ON</button></a></p>");
            }
            client.println("</div>");
            
            client.println("<div id=\"container\">");
            client.println("<p><div class=\"textbox mytext\">Relay 4 </div>");
            
            if (relay4State == "off") {
              client.println("<a href=\"/2/on\"><button class=\"button\">OFF</button></a></p>");
            } else {
              client.println("<a href=\"/2/off\"><button class=\"button button2\">ON</button></a></p>");
            }
            client.println("</div>");

            client.println("</body></html>");

            client.println();
            
            break;
          } else { 
            currentLine = "";
          }
        } else if (c != '\r') { 
          currentLine += c;      
        }
      }
    }
    
    header = "";
    
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

 


جمع بندی


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

 

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

 

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

 

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

CiferTech

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

۳۸ دیدگاه

  • سلام و تشکر
    وقتی کد رو آپلود کردم، بعد از اتصال nodemcu
    یک hotspot به نام farylink ساخته شد
    دلیلش چیه و چطور غیرفعالش کنم
    ممنون میشم پاسخ بفرمایید

    • با سلام، این پروژه بر روی سرور لوکال اجرا و با ip قابل دسترسی خواهد بود. همچنین با توجه به کد پروژه، APs جدیدی ساخته نخواهد شد.

    • سلام
      میگم من باید به مدار چقدر جریان بدم؟

      من وقتی وصل می کنم چراغ esp۸۲۶۶ زود میاد و می ره ؟

      و با این مشکل مواجه شدم

      Error: Failed to detect driver for UsbDevice[mName=/dev/bus/usb/002/002,mVendorId=6790,mProductId=21972,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=null,mProductName=USB Single Serial,mVersion=۴.۴۴,mSerialNumberReader=android.hardware.usb.IUsbSerialReader$Stub$Proxy@48186cf, mHasAudioPlayback=false, mHasAudioCapture=false, mHasMidi=false, mHasVideoCapture=false, mHasVideoPlayback=false, mConfigurations=[
      UsbConfiguration[mId=1,mName=null,mAttributes=160,mMaxPower=68,mInterfaces=[
      UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=2,mSubclass=2,mProtocol=1,mEndpoints=[
      UsbEndpoint[mAddress=131,mAttributes=3,mMaxPacketSize=16,mInterval=1]]
      UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=10,mSubclass=0,mProtocol=0,mEndpoints=[
      UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=32,mInterval=0]
      UsbEndpoint[mAddress=130,mAttributes=2,mMaxPacketSize=64,mInterval=0]]]]

  • Executable segment sizes:

    IROM : 245748 – code in flash (default or ICACHE_FLASH_ATTR)

    IRAM : 27264 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)

    DATA : 1260 ) – initialized variables (global, static) in RAM/HEAP

    RODATA : 2708 ) / 81920 – constants (global, static) in RAM/HEAP

    BSS : 25080 ) – zeroed variables (global, static) in RAM/HEAP

    Sketch uses 276980 bytes (28%) of program storage space. Maximum is 958448 bytes.
    Global variables use 29048 bytes (35%) of dynamic memory, leaving 52872 bytes for local variables. Maximum is 81920 bytes.
    سلام این ارور چطور برطرف کنم؟

    • قبل از این ارور پیام connecting رو دریافت می‌کنید؟ بنظر مشکل از حافظه برد هست. برای اطمینان از یک برد دیگه استفاده کنید.

  • درود بر سما بسیار سپاسگذارم بابت توضیحات و آموزشی که قرار دادید.
    من تازه با این ماژول آشنا شدم و دارم روش کارمیکنم که بتونم راه اندازیش کنم.
    با دستورات AT تونستم به مودم خونه وصل بشم ولی اینکه چطوری از طریق گوشی برای ماژول دستوری بفرستم و هنوز نمیدونم.
    البته ماژولی که من دارم ورژن ESP01 هست و تعداد GPIO کمتری داره.

    • سلام، ممنون از توجه شما. برای این مورد میتونید از نرم افزار های کمکی استفاده کنید یا از یک وب سرور استفاده کنید.

  • سلام؛ من از بخشی از کد های این مطلب استفاده کردم که دیتای ارسالی از طرف گوشی رو دریافت کنم و اوکیه و دریافت میکنم.
    اما مشکلی که من دارم این هست که تا دیتا رو بخوام دریافت کنم یه مدت زمان ۴-۵ ثانیه ای طول میکشه تا دریافت بشه. اگر مستقیم ماژول رو با میکرو راه بندازم و با کامند ها اینکار ها رو کنم سریع میگیره و اصلا دیلی نداره. ولی توی این حالت فعلی مورد اشاره در مطلب خیر و دیلی دارم.
    مشکل چیه و باید چه کنم ک سریع همون لحظه بگیره؟

    • با سلام، اگر درخواست ها پشت سر هم ارسال شود برای ثبات وب‌سرور این تاخیر زمانی لازم است، البته ممکن است در صورتی که وب سرور توسط خود برد یعنی بصورت soft AP ارائه شود، این تاخیر زمانی کاهش یابد.

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

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

      • اها ممنونم. عذر می خوام چند تا سوال دیگه داشتم . ممنون میشم کمکم کنید.
        ۱) الان من کدها رو آپلود کردم روی قطعه نود ام سی یو و فقط دو خط اول برنامه رو تغییر دادم که اسم وای فای و رمز وای فای خودم رو وارد کردم , دیگه نیازی به تغییرات در کدها نیست؟
        ۲) وقتی کدها آپلود می شوند با این اخطار مواجه میشم دلیلش چیه و میشه کمکم کنید چجوری رفع اش کنم؟

        Arduino: 1.8.2 (Windows 7), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:3MB OTA:~512KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”

        Archiving built core (caching) in: C:\Users\1\AppData\Local\Temp\arduino_cache_291890\core\core_esp8266_esp8266_nodemcuv2_xtal_80,vt_flash,exception_disabled,stacksmash_disabled,ssl_all,mmu_3232,non32xfer_fast,eesz_4M3M,led_2,ip_lm2f,dbg_Disabled,lvl_None____,wipe_none,baud_115200_5084ac14d216e795505e267b7730650a.a
        Executable segment sizes:

        ICACHE : 32768 – flash instruction cache

        IROM : 247988 – code in flash (default or ICACHE_FLASH_ATTR)

        IRAM : 27273 / 32768 – code in IRAM (IRAM_ATTR, ISRs…)

        DATA : 1504 ) – initialized variables (global, static) in RAM/HEAP

        RODATA : 2904 ) / 81920 – constants (global, static) in RAM/HEAP

        BSS : 25848 ) – zeroed variables (global, static) in RAM/HEAP

        Sketch uses 279669 bytes (26%) of program storage space. Maximum is 1044464 bytes.
        Global variables use 30256 bytes (36%) of dynamic memory, leaving 51664 bytes for local variables. Maximum is 81920 bytes.
        esptool.py v3.0
        Serial port COM4
        Traceback (most recent call last):
        File “C:\Users\1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py”, line 66, in
        esptool.main(cmdline)
        File “C:/Users/1/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py”, line 3551, in main
        esp = chip_class(each_port, initial_baud, args.trace)
        File “C:/Users/1/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py”, line 271, in __init__
        self._port = serial.serial_for_url(port)
        File “C:/Users/1/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/pyserial\serial\__init__.py”, line 90, in serial_for_url
        instance.open()
        File “C:/Users/1/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/pyserial\serial\serialwin32.py”, line 80, in open
        self._reconfigure_port()
        File “C:/Users/1/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/pyserial\serial\serialwin32.py”, line 224, in _reconfigure_port
        ‘Original message: {!r}’.format(ctypes.WinError()))
        serial.serialutil.SerialException: Cannot configure port, something went wrong. Original message: PermissionError(13, ‘A device attached to the system is not functioning.’, None, 31)
        serial.serialutil.SerialException: Cannot configure port, something went wrong. Original message: PermissionError(13, ‘A device attached to the system is not functioning.’, None, 31)

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

        ۳) بعد از آپلود کدها, زمانی که نود ام سی یو به لپ تاب توسط کابل یو اس بی متصل است , قسمت سریال مانیتور باید چیزی نمایش داده شود؟( یعنی ای پی ای که قرار است در اینجا نمایش داده شود) یا اینکه باید قطعه از لپ تاب جدا شود و بعد به رله متصل شده و تغذیه رسانی شود و بعد سریال مانیتور را باز کرد؟
        ۴) برای نمایش وب سرور فقط کافی است آی پی داده شده در مانیتور سریال در گوگل سرچ شود؟
        ۵) زمان آپلود کدها , آیا باید ای ای دی ای روی نود ام سی یو روشن بماند؟ یا یک بار چشمک زدن یکی از ال ای دی ها کافی است؟

        ببخشید سوالاتم طولانی شد. ممنون میشم واقعا کمکم کنید

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

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

  • سلام
    من رله Tongling مدل JQC-3FF-S-Z 5v خریدم اینطور که متوجه شدم این رله با خروجی ۳v nodemu روشن نمیشود و فقط با ۵v روشن می‌شود ممنون میشم راهنمایی کنید که همین رله راه بندازم یا یکی دیگه بخرم.

  • با سلام
    آیا امکان این وجود دارد که به برد esp وصل بشیم و نیاز نباشه به مودم؟ یعنی esp وایفای بشه و ما با گوشیمون به اون وصل بشیم و رله هارو کنترل کنیم؟

    • با سلام، بله این امکان وجود دارد و به روش های مختلفی انجام دادن آن امکان پذیر است، در این پروژه هم این امکان وجود دارد، میتوانید وب سرور موجود را با استفاده SOFT AP ایجاد کنید تا نیازی به اتصال به وای‌فای نداشته باشید.

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

  • سلام میشه با همین رله ها و برد esp 8266 وسایل برقی ۲۲۰ ولت مثل لامپ،تلویزیون و…. رو کنترل کنیم؟

    • این مورد ممکنه به دلیل اندازه تصویر در دستگاه های مختلف بوجود بیاد، از تنظیمات مرورگر خودتون حالت dekstop mode را فعال کنید.

  • سلام، من هرکاری می کنم در قسمت سریال مانیتور مراحل اجرای برنامه را نمی بینم ، مشکل از کجاست؟

  • سلام.
    ممنون از آموزش خوبتون
    من این برد رو خریدم و کد رو زدم اما این ارور زیر رو میده.
    Error compiling for board NodeMCU 1.0 (ESP-12E Module).
    لطفا کمکم کنید.

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

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

  • با سلام ممنون از مطالب بسیار مفید سایت شما
    ببخشید چطوری میتونم تعداد کانال ها رو بیشتر کنم مثلا الان واسه ۴ تا هستش و من میخوام ۱۰ تا ۱۲ تا باشه ایا میشه انجامش داد؟

  • سلام و عرض ادب
    ببخشید برای اینکه جای کلمه relay و on و off کلمه مد نظر خودمون رو بخوایم بنویسیم دقیقا کدوم قسمت از کد رو باید تغییر بدیم