صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 10 از 11
Like Tree2 لایک

موضوع: عدم پایداری ماژول esp8266

  1. #1
    Member
    تاریخ عضویت
    Apr 2015
    نوشته ها
    39

    عدم پایداری ماژول esp8266

    سلام دوستان. خوبین؟ یه سوال!
    من با استفاده از آردوینو و یه ماژول esp8266، یه سیستم کنترل از راه دور ساختم. چیز پیچیده ای نیست. فعلا فرض کنیم یه LED رو کنترل میکنه. مشکل اینه که مثلا وقتی دکمه مربوط به فلان LED رو میزنیم (از طریق مرورگر وب)، LED رو تاگل میکنه. منتها بعد از چندبار برنامه کرش میکنه و دیگه عمل نمیکنه. خواستم ببینم کسی این مشکل رو داشته؟ آیا مربوط به آردوینوئه؟ حدس خودم اینه که احتمالا بافر ماژول overflow میشه که چنین اتفاقی میفته. این درسته؟
    ویرایش توسط masoudamirian : 10-05-2016 در ساعت 10:38 AM

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    کد سمت اردوینوتون رو قرار بدید تا ببینم وقتی کامند میاد داره چیکار می کنه.
    یه چیزی که هست اینه که هر بار که بافر اطلاعات دریافتی از وب پر شد باید وقتی وارد تابع تاگل شد ترجیحا یه دور خالی بشه

    باز هم با دیدن کدتون بهتر میشه نظر داد

  3. #3
    Member
    تاریخ عضویت
    Apr 2015
    نوشته ها
    39
    ممنون. این کدشه. سه تا پین 11و12و13 رو از طریق وب پیج کنترل میکنیم.
    کد:
    #include <SoftwareSerial.h>
     
    #define DEBUG true
     
    SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.
                                 // This means that you need to connect the TX line from the esp to the Arduino's pin 2
                                 // and the RX line from the esp to the Arduino's pin 3
    void setup()
    {
     
      esp8266.begin(9600); // your esp's baud rate might be different
      
      pinMode(11,OUTPUT);
      digitalWrite(11,LOW);
      
      pinMode(12,OUTPUT);
      digitalWrite(12,LOW);
      
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
       
      sendData("AT+RST\r\n",2000,DEBUG); // reset module
      sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point
      sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address
      sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
      sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80
    }
     
    void loop()
    {
      if(esp8266.available()) // check if the esp is sending a message 
      {
     
        
        if(esp8266.find("+IPD,"))
        {
         delay(1000); // wait for the serial buffer to fill up (read all the serial data)
         // get the connection id so that we can then disconnect
         int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns 
                                               // the ASCII decimal value and 0 (the first decimal number) starts at 48
              
         esp8266.find("pin="); // advance cursor to "pin="
         
         int pinNumber = (esp8266.read()-48)*10; // get first number i.e. if the pin 13 then the 1st number is 1, then multiply to get 10
         pinNumber += (esp8266.read()-48); // get second number, i.e. if the pin number is 13 then the 2nd number is 3, then add to the first number
         
         digitalWrite(pinNumber, !digitalRead(pinNumber)); // toggle pin    
         
         // make close command
         String closeCommand = "AT+CIPCLOSE="; 
         closeCommand+=connectionId; // append connection id
         closeCommand+="\r\n";
         
         sendData(closeCommand,1000,DEBUG); // close connection
        }
      }
    }
     
    
    String sendData(String command, const int timeout, boolean debug)
    {
        String response = "";
        
        esp8266.print(command); // send the read character to the esp8266
        
        long int time = millis();
        
        while( (time+timeout) > millis())
        {
          while(esp8266.available())
          {
            
            // The esp has data so display its output to the serial window 
            char c = esp8266.read(); // read the next character.
            response+=c;
          }  
        }
        
        if(debug)
        {
          Serial.print(response);
        }
        
        return response;
    }

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط masoudamirian نمایش پست ها
    ممنون. این کدشه. سه تا پین 11و12و13 رو از طریق وب پیج کنترل میکنیم.
    کد:
    #include <SoftwareSerial.h>
     
    #define DEBUG true
     
    SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.
                                 // This means that you need to connect the TX line from the esp to the Arduino's pin 2
                                 // and the RX line from the esp to the Arduino's pin 3
    void setup()
    {
     
      esp8266.begin(9600); // your esp's baud rate might be different
      
      pinMode(11,OUTPUT);
      digitalWrite(11,LOW);
      
      pinMode(12,OUTPUT);
      digitalWrite(12,LOW);
      
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
       
      sendData("AT+RST\r\n",2000,DEBUG); // reset module
      sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point
      sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address
      sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
      sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80
    }
     
    void loop()
    {
      if(esp8266.available()) // check if the esp is sending a message 
      {
     
        
        if(esp8266.find("+IPD,"))
        {
         delay(1000); // wait for the serial buffer to fill up (read all the serial data)
         // get the connection id so that we can then disconnect
         int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns 
                                               // the ASCII decimal value and 0 (the first decimal number) starts at 48
              
         esp8266.find("pin="); // advance cursor to "pin="
         
         int pinNumber = (esp8266.read()-48)*10; // get first number i.e. if the pin 13 then the 1st number is 1, then multiply to get 10
         pinNumber += (esp8266.read()-48); // get second number, i.e. if the pin number is 13 then the 2nd number is 3, then add to the first number
         
         digitalWrite(pinNumber, !digitalRead(pinNumber)); // toggle pin    
         
         // make close command
         String closeCommand = "AT+CIPCLOSE="; 
         closeCommand+=connectionId; // append connection id
         closeCommand+="\r\n";
         
         sendData(closeCommand,1000,DEBUG); // close connection
        }
      }
    }
     
    
    String sendData(String command, const int timeout, boolean debug)
    {
        String response = "";
        
        esp8266.print(command); // send the read character to the esp8266
        
        long int time = millis();
        
        while( (time+timeout) > millis())
        {
          while(esp8266.available())
          {
            
            // The esp has data so display its output to the serial window 
            char c = esp8266.read(); // read the next character.
            response+=c;
          }  
        }
        
        if(debug)
        {
          Serial.print(response);
        }
        
        return response;
    }
    به نظر من درست بعد از
    کد:
    digitalWrite(pinNumber, !digitalRead(pinNumber));
    باید pinNumber ات رو 0 کنی.
    این رو تست کن .

  5. #5
    Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    54
    نقل قول نوشته اصلی توسط masoudamirian نمایش پست ها
    سلام دوستان. خوبین؟ یه سوال!
    من با استفاده از آردوینو و یه ماژول esp8266، یه سیستم کنترل از راه دور ساختم. چیز پیچیده ای نیست. فعلا فرض کنیم یه LED رو کنترل میکنه. مشکل اینه که مثلا وقتی دکمه مربوط به فلان LED رو میزنیم (از طریق مرورگر وب)، LED رو تاگل میکنه. منتها بعد از چندبار برنامه کرش میکنه و دیگه عمل نمیکنه. خواستم ببینم کسی این مشکل رو داشته؟ آیا مربوط به آردوینوئه؟ حدس خودم اینه که احتمالا بافر ماژول overflow میشه که چنین اتفاقی میفته. این درسته؟
    سلام دوست من مشکلتون حل شد؟؟؟؟ اگر شده یک بار کامل مراحل حل مشکل رو توضیح بدید . ممنون

  6. #6
    Member
    تاریخ عضویت
    Oct 2013
    نوشته ها
    70
    با سلام
    اینکه برنامه ابتدا درست اجرا میشه یعنی کدت درسته ولی این اتفاق میتونه چند تا دلیل داشته باشه
    یکی اینکه فریموری که روی ماژولت هست ناپایداره و در نتیجه مجبوری فریمور رو ارتقا بدی
    دلیل دوم میتونه از تغذیه ی ماژولت باشه طوریکه جریان کافی برای مصرف ماژول تامین نمیشه

  7. #7
    Member
    تاریخ عضویت
    Apr 2015
    نوشته ها
    39
    سلام به همه عزیزان و تشکر از همه دوستان. همچنین پوزش بابت تاخیر.
    والا روش magmagmary رو امتحان کردم. کلا برنامه از کار افتاد.
    am.koshesh@gmail.com جان والا مشکل که عرض کردم. یه پروژه کنترل LED با وب هستش (البته ساده شده اش اینه)، پروژه کار میکنه. اما بعد از چندبار که دکمه موجود در فرم وب رو فشار میدی، دیگه هیچ اتفاقی نمیفته. چراغ آبی رنگ ماژول هم دیگه عکس العملی نشون نمیده. اینه مشکل.

    engamanc عزیز، والا فیرمور ماژول که تا آپدیت نکنی اصلا کار نمیکنه. نسخه اش هم همون فکر کنم 9.2 هستش. واسه جریان هم بعید میدونم. چون اولا که منبع تغذیه اکسترناله. ثانیا اگه جریان کم باشه چرا از اول مشکل نداره؟؟ میگم، حدس خودم اینه که احتمالا بافر ماژول پر میشه. منتها دستور خالی کردنش رو نمیتونم پیدا کنم. چیزی که از فروم خود آردوینو پیدا کردم واسه این ماژول این بود که از نوع داده ای string استفاده نشه واسه دستورات. منتها هرکار کردم مشکل حل نشد.
    ویرایش توسط masoudamirian : 10-15-2016 در ساعت 07:24 PM

  8. #8
    Junior Member
    تاریخ عضویت
    Sep 2016
    نوشته ها
    4
    منم یه مشکل تقریباً مشابه داشتم
    از برد nodemcu استفاده کردم . کدها با این چیزی که شما نوشتین کمی فرق میکنه
    من موقعی که از طریق یه دستگاه دیگه آی پی و پورت سیستم رو تو مرورگر میزدم بعضی وقتا اصلا صفحه باز نمیشد
    این مشکل وقتی رخ میداد که قرار بود ماژول از طریق اینترنت کنترل بشه نه از شبکه داخلی
    در واقع بعضی وقتا بعد از رفرش شدن صفحه، دیگه مرورگر صفحه وب ماژول رو باز نمیکرد
    لایک کردن

  9. #9
    Member
    تاریخ عضویت
    Apr 2015
    نوشته ها
    39
    واقعا نمیدونم دیگه چیکارش کنم! تو چندتا فروم، ازجمله انجمن رسمی خود esp8266، هم دیدم این مشکل رو داشتن و مشکل از سرریز بافر بوده. منتها هیچکدام از راه حل ها برای من کاربرد نداشت.

  10. #10
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط masoudamirian نمایش پست ها
    واقعا نمیدونم دیگه چیکارش کنم! تو چندتا فروم، ازجمله انجمن رسمی خود esp8266، هم دیدم این مشکل رو داشتن و مشکل از سرریز بافر بوده. منتها هیچکدام از راه حل ها برای من کاربرد نداشت.
    کاری که من بهتون گفتم انجام بدید دقیقا برای حل مشکل سر ریز بافره

    اجازه بدید خودم تست بگیرم احتمالا جایی که باید این دستور گذاشته بشه باید تغییر کنه.
    لایک کردن

صفحه 1 از 2 12 آخرینآخرین

مجوز های ارسال و ویرایش

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

SEO by vBSEO