Перестаёт прошиваться и начинает греться esp-wroom-23

Тема в разделе "ESP8266, ESP32", создана пользователем Orionssv, 30 июл 2020 в 08:47.

  1. Orionssv

    Orionssv Нерд

    Доброго времени суток господа. Нужна ваша помощь. Уже спалил (перестали прошиваться и греются чипы даже от питания по USB) две отладочные платы ESP-wroom-23. Во избежание большего количества жертв решил обратиться сюда. В общем собрал на макетке контроллер уровня жидкости в ёмкости по такой схеме
    схема.png
    Питание от обычного компьютерного БП. Используются +12 и +5 вольт, земля платы и БП соединены. Прошивка по usb. Всё работает, светодиоды загораются, на сервер информация отправляется. Но в какой-то момент плата перестаёт жить. При этом на макетке я до момента выхода из строя плат ручонками ничего не трогал, не менял - просто узнавал об этом каждый раз (оба два раза) пытаясь прошить после мелких изменений в коде. Arduino ide не мог подключится к порту.
    GPIO вроде использую те что можно[​IMG]
    esp32_pinout.png
    #define Redled 23 //7-й Светодиод
    #define Yellowled2 22 //6-й Светодиод
    #define Yellowled1 21 //5-й Светодиодтчик
    #define Greenled4 19 //4-й Светодиод
    #define Greenled3 18 //3-й Светодиодтчик
    #define Greenled2 5 //2-й Светодиод
    #define Greenled1 17 //1-й Светодиод
    #define WiFiled 16 //Светодиод подключения к WIFI
    pinMode(Redled, OUTPUT);
    pinMode(Yellowled2, OUTPUT);
    pinMode(Yellowled1, OUTPUT);
    pinMode(Greenled4, OUTPUT);
    pinMode(Greenled3, OUTPUT);
    pinMode(Greenled2, OUTPUT);
    pinMode(Greenled1, OUTPUT);
    pinMode(WiFiled, OUTPUT);

    #define sensor_Redled 36 //7-й датчик
    #define sensor_Yellowled2 39 //6-й датчик
    #define sensor_Yellowled1 34 //5-й датчик
    #define sensor_Greenled4 35 //4-й датчик
    #define sensor_Greenled3 32 //3-й датчик
    #define sensor_Greenled2 33 //2-й датчик
    #define sensor_Greenled1 25 //1-й датчик
    #define TestLed 26 // кнопка тест светодиодов
    pinMode(sensor_Redled, INPUT_PULLUP);
    pinMode(sensor_Yellowled2, INPUT_PULLUP);
    pinMode(sensor_Yellowled1, INPUT_PULLUP);
    pinMode(sensor_Greenled4, INPUT_PULLUP);
    pinMode(sensor_Greenled3, INPUT_PULLUP);
    pinMode(sensor_Greenled2, INPUT_PULLUP);
    pinMode(sensor_Greenled1, INPUT_PULLUP);
    pinMode(TestLed, INPUT_PULLUP);
    Представлю любую доп.информацию по теме. Спасибо.
     
    Последнее редактирование: 30 июл 2020 в 09:02
  2. Daniil

    Daniil Гуру

    1. Код вставляете, пожалуйста, через теги.
    2. Код нужен весь.
    3. Можно заранее посчитать какой ток течет через мк, есть максимально допустимый для пина, а есть для пина питания - вот по питанию не берете ли вы слишком много?
     
  3. Orionssv

    Orionssv Нерд

    1. Да конечно, за теги прошу простить - исправлюсь
    2.
    Код (C++):


    #include <WiFi.h>
    #include <HTTPClient.h>
    //Светодиоды
    #define Redled 23       //7-й Светодиод
    #define Yellowled2 22   //6-й Светодиод
    #define Yellowled1 21   //5-й Светодиодтчик
    #define Greenled4 19    //4-й Светодиод
    #define Greenled3 18    //3-й Светодиодтчик
    #define Greenled2 5     //2-й Светодиод
    #define Greenled1 17    //1-й Светодиод
    #define WiFiled 16      //Светодиод подключения к WIFI
    //#define ServerOnline 27 //Светодиод исправности сервера
    //#define ServerOffline 14//Светодиод НЕисправности сервера

    #define sensor_Redled 36      //7-й датчик
    #define sensor_Yellowled2 39  //6-й датчик
    #define sensor_Yellowled1 34  //5-й датчик
    #define sensor_Greenled4 35   //4-й датчик
    #define sensor_Greenled3 32   //3-й датчик
    #define sensor_Greenled2 33   //2-й датчик
    #define sensor_Greenled1 25   //1-й датчик
    #define TestLed 26            // кнопкатест светодиодов
    //флаги датчиков
    bool sensor_Redled_fl = false;
    bool sensor_Yellowled2_fl = false;
    bool sensor_Yellowled1_fl = false;
    bool sensor_Greenled4_fl = false;
    bool sensor_Greenled3_fl = false;
    bool sensor_Greenled2_fl = false;
    bool sensor_Greenled1_fl = false;
    bool ClearSeptic = true;
    //Авторизация в сети WiFi
    const char* ssid     = "SmartHome";
    const char* password = "123456701";


    const String SendSensor = "http://192.168.0.13"; //адрес сервера

    unsigned long timing; // Переменная для хранения точки отсчета

    //Функция Отправки серверу информации
    String httpGETRequest(int sens) {
      HTTPClient http;
        http.begin(SendSensor+"/?sensor="+sens);
        Serial.println(SendSensor+"/?sensor="+sens);

      int httpResponseCode = http.GET();

      String payload = "--";

      if (httpResponseCode>0) {
    //   digitalWrite(ServerOffline, LOW);
    //   digitalWrite(ServerOnline, HIGH);
        Serial.print("HTTP Response code: ");
        Serial.println(httpResponseCode);
        payload = http.getString();
      }
      else {
    //   digitalWrite(ServerOffline, HIGH);
    //   digitalWrite(ServerOnline, LOW);
         Serial.print("Error code: ");
        Serial.println(httpResponseCode);
      }
      // Free resources
      http.end();

      return payload;
    }

    void setup() {
      Serial.begin(115200);
      //пины светодиодов на выход
      pinMode(Redled, OUTPUT);
      pinMode(Yellowled2, OUTPUT);
      pinMode(Yellowled1, OUTPUT);
      pinMode(Greenled4, OUTPUT);
      pinMode(Greenled3, OUTPUT);
      pinMode(Greenled2, OUTPUT);
      pinMode(Greenled1, OUTPUT);
      pinMode(WiFiled, OUTPUT);
    // pinMode(ServerOnline, OUTPUT);
    //  pinMode(ServerOffline, OUTPUT);

      //пины датчиков на вход
      pinMode(sensor_Redled, INPUT_PULLUP);
      pinMode(sensor_Yellowled2, INPUT_PULLUP);
      pinMode(sensor_Yellowled1, INPUT_PULLUP);
      pinMode(sensor_Greenled4, INPUT_PULLUP);
      pinMode(sensor_Greenled3, INPUT_PULLUP);
      pinMode(sensor_Greenled2, INPUT_PULLUP);
      pinMode(sensor_Greenled1, INPUT_PULLUP);
      pinMode(TestLed, INPUT_PULLUP);

      WiFi.begin(ssid, password);             // Connect to the network
      while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
        delay(500);
        digitalWrite(WiFiled, HIGH);
        delay(100);
        digitalWrite(WiFiled, LOW);
        delay(100);
        Serial.print('.');
      }
      digitalWrite(WiFiled, HIGH);
      Serial.println('\n');
      Serial.println("Connection established");
      Serial.print("IP address:\t");
      Serial.println(WiFi.localIP());

    }
    void loop() {
      while (!digitalRead(TestLed)){
        digitalWrite(Redled, !(digitalRead(TestLed)));
        digitalWrite(Yellowled2, !(digitalRead(TestLed)));
        digitalWrite(Yellowled1, !(digitalRead(TestLed)));
        digitalWrite(Greenled4, !(digitalRead(TestLed)));
        digitalWrite(Greenled3, !(digitalRead(TestLed)));
        digitalWrite(Greenled2, !(digitalRead(TestLed)));
        digitalWrite(Greenled1, !(digitalRead(TestLed)));
         }


         // замыкание датчика №7
      if (!digitalRead(sensor_Redled) && sensor_Redled_fl==false){
          sensor_Redled_fl = true;
          ClearSeptic = false;
          httpGETRequest(7);
          }
      // замыкание датчика №6
      if (!digitalRead(sensor_Yellowled2) && sensor_Yellowled2_fl==false){
          sensor_Yellowled2_fl = true;
          ClearSeptic = false;
          httpGETRequest(6);
          }
            // замыкание датчика №5
      if (!digitalRead(sensor_Yellowled1) && sensor_Yellowled1_fl==false){
          sensor_Yellowled1_fl = true;
          ClearSeptic = false;
          httpGETRequest(5);
          }
            // замыкание датчика №4
      if (!digitalRead(sensor_Greenled4) && sensor_Greenled4_fl==false){
          sensor_Greenled4_fl = true;
          ClearSeptic = false;
          httpGETRequest(4);
          }
            // замыкание датчика №3
      if (!digitalRead(sensor_Greenled3) && sensor_Greenled3_fl==false){
          sensor_Greenled3_fl = true;
          ClearSeptic = false;
          httpGETRequest(3);
          }
            // замыкание датчика №2
      if (!digitalRead(sensor_Greenled2) && sensor_Greenled2_fl==false){
          sensor_Greenled2_fl = true;
          ClearSeptic = false;
          httpGETRequest(2);
          }
            // замыкание датчика №1
      if (!digitalRead(sensor_Greenled1) && sensor_Greenled1_fl==false){
          sensor_Greenled1_fl = true;
          ClearSeptic = false;
          httpGETRequest(1);
          }
      //отчистка септика
    if (digitalRead(sensor_Redled)&&
         digitalRead(sensor_Yellowled2)&&
         digitalRead(sensor_Yellowled1)&&
         digitalRead(sensor_Greenled4)&&
         digitalRead(sensor_Greenled3)&&
         digitalRead(sensor_Greenled2)&&
         digitalRead(sensor_Greenled1)&&
         ClearSeptic == false){
         ClearSeptic = true;
         httpGETRequest(0);
         if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы
            timing = millis();
            Serial.println ("10 seconds");
             sensor_Redled_fl = false;
             sensor_Yellowled2_fl = false;
             sensor_Yellowled1_fl = false;
             sensor_Greenled4_fl = false;
             sensor_Greenled3_fl = false;
             sensor_Greenled2_fl = false;
             sensor_Greenled1_fl = false;
         }
       }
      // Управление светодиодами
      digitalWrite(Redled, !(digitalRead(sensor_Redled)));
      digitalWrite(Yellowled2, !(digitalRead(sensor_Yellowled2)));
      digitalWrite(Yellowled1, !(digitalRead(sensor_Yellowled1)));
      digitalWrite(Greenled4, !(digitalRead(sensor_Greenled4)));
      digitalWrite(Greenled3, !(digitalRead(sensor_Greenled3)));
      digitalWrite(Greenled2, !(digitalRead(sensor_Greenled2)));
      digitalWrite(Greenled1, !(digitalRead(sensor_Greenled1)));

    }
    3.
    • VIN: Пин для подключения внешнего источника напряжения в диапазоне от 5 до 14 вольт (рядом с GND). Используется стабилизатор AMS1117-3.3
    • 3V3: Пин от стабилизатора напряжения с выходом 3,3 вольта и максимальных током 1 А. Регулятор обеспечивает питание модуля ESP32-WROOM (рядом с GND)
    • Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 12 мА.
    • Максимальный ток на пинах: 12 мА
     
    Последнее редактирование: 30 июл 2020 в 11:53
  4. parovoZZ

    parovoZZ Гуру

    Либо 12 вольт где-то прошибает на МК, либо перегружаешь МК светодиодами. Максимум, что можно снимать с этих МК - ток для управления затворами или базами транзисторов. Про 10-20 мА с пина для МК такого типа- это чушь. Забудь и никогда так не делай.
     
    Andrey12 нравится это.
  5. Orionssv

    Orionssv Нерд

    Светодиоды с токоограничивающими резюками по 300 ом на светодиод думаете перегружают? I=3.3/300. Выходит 11мА. Вы хотите сказать, что на светодиоды ещё и транзисторные сборки ставить? А если повысить сопротивление до 550 - 600 ом?
     
  6. Daniil

    Daniil Гуру

    там должно быть (3.3-Vдиода)/300. Ладно, вы завысили результат. СД у вас 7, т.е. уже 77 мА. Далее wifi как-то питается? Тоже надо приплюсовать. Полученный ток течет через питающие линии мк они выдерживают такой ток?
    В дашике я видел 1.5А, поэтому помалкиваю. Слишком уж большой ток они гарантируют или я не туда посмотрел.

    Мне кажется, что СД и 1мА норм.

    Надо пэжелезку на руках иметь, чтобы что-то путное советовать.
     
  7. Orionssv

    Orionssv Нерд

    Верно напряжение падения на сд не учел, но значит там меньше даже...
    Не совсем понял строчку "СД и 1мА норм".
    По схеме косяков нет? После оптопар я уже сам придумывал. Резюки на 10к как подтяжки к плюсу, чтоб нога не болталась, не доверяю этим PULLUP. Ну и ограничивающие резюки по 300 на каждую ногу, которая дёргает светиком, как полагается (не один на все). Может 300 маловато?
     
  8. Daniil

    Daniil Гуру

    на мой вкус, светодиод хорошо горит и при 1 мА, у вас же 11(хоть и завышенных).
    А что за оптопары? Можно их схемужпо-подробнее?
     
    Последнее редактирование: 31 июл 2020 в 21:05
  9. Orionssv

    Orionssv Нерд

    Оптопары PC 817
     
  10. Orionssv

    Orionssv Нерд

    В общем светодиоды убивали мои платы есп. Когда горел один светодиод через огр. Резюки в 300 есп не парилась.А вот когда горети все 7 общий ток превышал максимальный и чтп умирал от перегрева... Поставил по 1к на Светик - 4 дня непрерывного свечения- 4 дня полет нормальный, 4 дня миеруха холодная. Тема закрыта. Всем спасибо
     
    Daniil нравится это.
  11. Daniil

    Daniil Гуру

    Любопытно, что ж я за дашик читал с 1.5 А допустимых?
     
  12. parovoZZ

    parovoZZ Гуру

    Это радиотракт.
     
    Daniil нравится это.
  13. Orionssv

    Orionssv Нерд

    Честно - не нашел таких чисел. Нашёл про 12мА на пин. 1А выход 3.3в. Так же нашел, что абсолютный максимальный ток это 40мА. Мои 7 светодиодов подключённых к земле через 300 Ом в сумме больше дают, что ли?
     
  14. parovoZZ

    parovoZZ Гуру

    это максимально допустимый ток. У таких МК это значит, что данным током можно перезаряжать паразитные емкости линий ПП, но не более. Просто потому, что не указан номинальный ток пина.
     
  15. Orionssv

    Orionssv Нерд

    Хорошо. Но я прав по поводу виновников в смертях моих есп?
     
  16. Daniil

    Daniil Гуру

    да хоть СДы и кушали по 5мА на ваших 300-омных резюках, их 7 шт. а это больше 40 мА.
    У нас же esp32?
    https://www.google.com/url?q=https:...FjAAegQICBAB&usg=AOvVaw31CP8RMyQCKXQM1gjnEgDZ
    стр. 35, табл 11. - 1.2А
     
  17. parovoZZ

    parovoZZ Гуру

  18. Daniil

    Daniil Гуру

    а должно быть? Я хочу узнать максимально допустимый ток который может потреблять есп и не сгореть.
     
  19. Orionssv

    Orionssv Нерд

    Я тоже хочу это знать. Кстати есп с включёнными сетиками до дю сих пор живая. Я радикально заменил резюки 300 на 1к. Светодиоды светят вполне информативно. Чип и рассыпуха комнатной температуры
     
  20. ivan_alexoff

    ivan_alexoff Нерд

    Согласно таблицы 24 на стр. 46 этого же даташита каждый цифровой выход может быть настроен в один из 4 "токовых" режимов.
    Each digital output pin is associated with its configurable drive strength. Column “DriveStrength” in TableIO_MUXlists the default values. The drive strength of the digital outputpins can be configured into one of the following four options:
    •0:~5 mA
    •1:~10 mA
    •2:~20 mA
    •3:~40 mA
    The default value is 2.
    По умолчанию должен быть включен второй режим на 20 мА. Возможно ваши ESP настроены на 0 режим, вот и горят.
     
    Daniil и parovoZZ нравится это.