РЕШЕНО Esp wroom 32 не выполняет программу (не работает) без подключенного usb

Тема в разделе "ESP8266, ESP32", создана пользователем Orionssv, 7 авг 2020.

  1. Orionssv

    Orionssv Нерд

    Доброго времени суток форумчане. Собственно суть сабжа в заголовке. Уточнения: Внешнее питание 5вольт (с макс током 2А). Подключено: общий на GND (перепробовал все два), +5вольт на VIN. Если USB с пк воткнуто в платку - всё работает. WI-FI цепляется, светодиод наличия wifi коннекта горит, сервер получает контрольные пакеты от девайса. Если запустить девайс и отключить usb - он продолжает работать, но если его запустить (перезагрузить) без usb - то просто горит красный smd-шный светодиодик питания и всё. Однако если к нему (запитанному от внешнего бп и неработающему) подключить usb - WI-FI цепляется, светодиод наличия wifi коннекта горит, сервер получает контрольные пакеты от девайса. В чём загадка? Моих знаний не хватает. Хотел попробовать подключить usb не от ПК, а от зарядки сотового. Но решил пока выслушать ваши предположения, советы, тыкания носом))). Спасибо
     
  2. SergeiL

    SergeiL Оракул Модератор

    Выкладывайте код с которым проблемы.
    По плате думаю проблем нет, все что я знаю - работают нормально.
     
  3. Orionssv

    Orionssv Нерд

    Ябы не сказал, что с кодом проблемы - всё работает так как я ожидаю)), но только с воткнутым USB. Bот код:
    Код (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)));
    }
     
    Последнее редактирование: 7 авг 2020
  4. SergeiL

    SergeiL Оракул Модератор

    Да, ничего того, что бы зависело от USB не видно, странно.
    А если просто светодиодом помигать...
     
  5. Orionssv

    Orionssv Нерд

    Помигать светодиодом без usb... то есть максимально простой код без библиотек и прочего... Попробую отпишусь. Кстати serial.print. не ожидает же ответа от порта? А то может при инициализации какой-нибудь while висит и ждет когда там ПК откликнется, нет?
     
  6. SergeiL

    SergeiL Оракул Модератор

    Не.
    Я поэтому и спрашивал код, так как для Leonardo добавляют ожидание подключения по последовательному порту.
    Тут нет такого.
     
  7. Orionssv

    Orionssv Нерд

    Ясно. В общем в понедельник я поставлю два опыта. Попробую помигать светиком без USB и, если мигать не будет, попробую подключить USB от зарядки, чтоб исключить обмен информации с ПК. По результатам отпишусь. Спасибо за совет
     
  8. SergeiL

    SergeiL Оракул Модератор

    Я всегда когда пишу код - вставляю мигание внутренним светодиодом.
    Мигание раз в секунду - все в норме. loop крутится, связь есть.
    Два раза мигаем, пауза - нет связи. И т.д.
    Так сразу понятно, что плата не зависла и что происходит. Это когда нет сообщений от устройства.
     
  9. Orionssv

    Orionssv Нерд

    У меня вроде как за это отвечает светодиод, который сигнализирует о подключении к wifi. Он мигает пока нет WiFi и начинает гореть ровно при подключении. В последствии я уберу delay, пераисав код для millis, но не суть. Светик не горит и не мигает - пока не дашь еспешке усбишку... Как ляльке соску...
    Код (C++):
    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());
     
     
  10. Orionssv

    Orionssv Нерд

    просто светодиод мигает без подключенной usb
    Код (C++):
    #define WiFiled 16      //Светодиод подключения к WIFI

    void setup() {
      // put your setup code here, to run once:
      pinMode(WiFiled, OUTPUT);

    }

    void loop() {
      // put your main code here, to run repeatedly:
    delay(500);
        digitalWrite(WiFiled, HIGH);
        delay(100);
        digitalWrite(WiFiled, LOW);
        delay(100);
    }
     
  11. issaom

    issaom Гуру

    На макетной плате прототип собираете?
     
  12. Orionssv

    Orionssv Нерд

    Да. На макетке. С проводочками. Которые со штырьками)))
     
  13. issaom

    issaom Гуру

    Питание проверяйте - эта штука во время подключения к Wi-Fi ток потребляет как сварочный аппарат. У меня на макетке заработала только когда провода воткнул прямо в дырки рядом с Vin и GND. Если воткнуть на пути хоть одну перемычку светиком мигала, а при попытке подключения уходила в перезагрузку.
    1597050206682..jpg
     
  14. Orionssv

    Orionssv Нерд

    Да лааадно?! Проверю конечно... Но это капец тогда как неожиданно
     
  15. Anger

    Anger Нерд

    Подниму тему. Появилась такая же проблема - плата не выполняет программу, если её запитывать отдельно (через лабораторный БП, например). Если подключить через шнур USB к компьютеру, то проблем нет и всё работает. Прошивку заливал через Arduino 1.8.13. Схема с анализатором спектра с данного видео (Ютуб)

    В чём может быть проблема?
    Схема уже распаяна, не на макетке. Ток потребления что при подключении к USB компа, при подключении к PowerBank или БП - 20 mA (usb tester)(матрица питается отдельно). Так что предложение выше, к сожалению, не подходит.
     
    Последнее редактирование: 10 май 2021
  16. Anger

    Anger Нерд

    В этом дело? А можно поподробнее для новичка? И как правильно залить в ПЗУ на ESP32? Недоработка кода или моих действий при прошивке? Заранее спасибо!
     
    Последнее редактирование: 10 май 2021
  17. Rumata

    Rumata Нерд

    Как питаете, каким напряжением на какие ноги?
     
  18. Anger

    Anger Нерд

    5v на VIN и GND. Не в этом вроде дело.. Плату я подключаю к компу через шнур USB - работает (на матрице есть реакция на звук). Через тот же шнур USB подключаю плату к PowerBank (мощному) - плата не работает (на матрице нет реакции, как будто прошивку и не заливал).
     
  19. b707

    b707 Гуру

    это абсолютно нереальная цифра для ЕСП32, там должно быть минимум в 5 раз больше.
    Похоже что у вас не получилось измерить ток. а на фоне этого и ваши рассказы о том. что "все подключено верно" выглядят не очень убедительно.
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Вроде измерял 150 ма.