Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Вопрос Высокий ток в режиме сна на ESP8266-01

Тема в разделе "Железные вопросы по esp8266", создана пользователем ArDi, 27 ноя 2019.

  1. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    Доброго времени суток всем.
    Есть проблема: в режиме DeepSleep модуль ESP8266-01 потребляет примерно 30мА, хотя вроде должен в пределах микроампер. Во время работы потребление вроде адекватное, в районе 100мА.
    Проект - отправка данных с DHT-22 датчика на свой веб-сервер раз в 10 минут. Поэтому нужен DeepSleep, дабы не разряжать аккумулятор.
    Для пробуждения из сна пропаял Wake ногу МК к Reset пину.
    В попытках снизить потребление выпаял оба светодиода, результата никакого не дало.

    Можеть есть у кого идеи, откуда такое высокое потребление во сне?
    Фото модуля (раскрыть)

    [​IMG]

    Код (раскрыть)

    Код (C):
    1. #include <ESP8266WiFi.h>
    2. #include <DNSServer.h>
    3. #include <ESP8266WebServer.h>
    4. #include <WiFiManager.h>
    5. #include <ESP8266HTTPClient.h>
    6. #include <DHTesp.h>
    7.  
    8. #define DEBUG_MODE 0
    9. #define DHT_PIN 0
    10. #define SLEEP_TIME 10 * 1e6
    11.  
    12. ADC_MODE(ADC_VCC);
    13. DHTesp dht;
    14.  
    15. void setup() {
    16.     #ifdef DEBUG_MODE
    17.         Serial.begin(115200);
    18.     #endif
    19.     WiFiManager wifiManager;
    20.     wifiManager.autoConnect("WeatherSensor");
    21.  
    22.     #ifdef DEBUG_MODE
    23.         Serial.println(ESP.getVcc());
    24.         Serial.println("WiFi connected...");
    25.         Serial.println();
    26.         Serial.println("Status\tHumidity (%)\tTemperature (C)\tHeatIndex (C)");
    27.     #endif
    28.  
    29.     dht.setup(DHT_PIN, DHTesp::DHT22);
    30.  
    31.     float humidity = NAN;
    32.     float temperature = NAN;
    33.     int attempts = 5;
    34.     do
    35.     {
    36.         delay(2000);
    37.         humidity = dht.getHumidity();
    38.         temperature = dht.getTemperature();
    39.         attempts--;
    40.     } while (isnan(temperature) && attempts);
    41.    
    42.     #ifdef DEBUG_MODE
    43.         Serial.print(dht.getStatusString());
    44.         Serial.print("\t");
    45.         Serial.print(humidity, 1);
    46.         Serial.print("\t\t");
    47.         Serial.print(temperature, 1);
    48.         Serial.print("\t\t");
    49.         Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1);
    50.     #endif
    51.    
    52.     if (!isnan(temperature)) {
    53.         HTTPClient http;
    54.         http.begin("<URL>");
    55.         http.addHeader("Content-Type", "application/json");
    56.         http.POST(String(String("{\"temp\": ") + temperature + String(", \"hum\":") + humidity + String("}")));
    57.         http.writeToStream(&Serial);
    58.         http.end();
    59.     }
    60.  
    61.     delay(2000);
    62.    
    63.     ESP.deepSleep(SLEEP_TIME);
    64. }
    65.  
    66. void loop()
    67. {
    68. }
     
  2. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    10 * 1e6 - 1 секунда
    //1,000,000=1 second
    ESP.deepSleep(300e6); //5 min
     
  3. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    Сейчас стоит 10 секунд (1e6 - 1 секунда), для теста.
    Проблема не в этом, а в энергопотреблении Deep Sleep.
     
  4. nikolz

    nikolz Гуру

    Сообщения:
    5.092
    Симпатии:
    465
    возможно у вас программа виснет в цикле и не доходит до deepsleep
     
  5. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    580
    Симпатии:
    58
    nikoloz прав

    у вас весь код в setup :). esp спит одни раз (потому что setup запускается один раз при старте), а потом молотит без остановки пустой главный цилк loop()
     
  6. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    Вроде во всех примерах со Sleep'ом он находится в setup'e. После Sleep'a он дергает ногу Wake, которая в свою очередь дергает Reset и МК перезагружается. Это работает, т.к. код отправки данных из setup'а срабатывает также с каждый пробуждением (в данном случае каждые 10 секунд)
     
  7. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    Это не при чем, выход из сна через ресет.
    А вот, то что минимальное время работы 4 секунды, а если датчик не ответит то целых 12 секунд.
     
  8. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    Проверьте, увеличив время сна до минуты, а то и время для подключения к сети бывает долгим.
     
  9. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    Попробовал, никакой разницы. Все равно потребление около 30мА
     
  10. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    Тогда вставьте в loop Serial.println("ja ne splu");
     
  11. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    Увы, из loop ничего не выводится.
     
  12. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    580
    Симпатии:
    58
    Да точно, через reset. Забыл. Извинте.
     
  13. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    И не должно выводится.
    Как ток измеряете, на самой есп или вместе со стабилизатором и датчиком?
     
  14. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    В разрыв плюсового провода от БП (подаю 3.3 В с него). Датчик доставал с брэдборда - никакой разницы.
     
  15. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    Не ясно куда он должен подключиться
    Код (Text):
    1.  http.begin("<URL>");
    Попробуйте выкиньте из программы
    Код (Text):
    1.    if (!isnan(temperature)) {
    2.         HTTPClient http;
    3.         http.begin("<URL>");
    4.         http.addHeader("Content-Type", "application/json");
    5.         http.POST(String(String("{\"temp\": ") + temperature + String(", \"hum\":") + humidity + String("}")));
    6.         http.writeToStream(&Serial);
    7.         http.end();
    8.     }
    И покажите, что выводит есп в сом порт.
     
  16. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    Тоже попробовал поэксперементировать с таким esp.
    Получилась странная вещь.
    С амперметром esp не стартует, без амперметра все нормально.
    Не стартует - т.е. в монитор порта ничего не выводится, точки доступа нет.
     

    Вложения:

  17. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    WebServer (раскрыть)
    Код (Text):
    1. //arduino 1.8.2
    2. //Generic ESP8266 Module
    3. //Flash Size  1M(64K SPIFFS)
    4. #include <ESP8266WiFi.h>        //Содержится в пакете
    5. #include <ESP8266WebServer.h>   //Содержится в пакете
    6. #include <OneWire.h>            // Подключаем библиотеку Wire
    7. #include <DallasTemperature.h>  // Подключаем библиотеку DallasTemperature
    8. //#include <ESP8266WiFiMulti.h>
    9. #define ONE_WIRE_BUS 2                                  // Указываем, к какому выводу подключена датчик
    10. #define SLEEP_TIME 60 * 1e6
    11. ADC_MODE (ADC_VCC);
    12. float voltag;
    13. int v;
    14. //ESP8266WiFiMulti wifiMulti;
    15. IPAddress apIP(192, 168, 4, 1);
    16.  
    17. // Web интерфейс для устройства
    18. ESP8266WebServer HTTP(80);
    19. const int analogInPin = A0;
    20. int Value = 0;
    21. String _ssidAP = "LAW_ESP8266";   // SSID AP точки доступа
    22. String _passwordAP = "30272609"; // пароль точки доступа
    23. OneWire oneWire(ONE_WIRE_BUS);
    24. DallasTemperature DS18B20(&oneWire);
    25. void setup() {
    26. Serial.begin(9600);
    27. delay(10);                                            // Пауза 10 мкс
    28. Serial.println("Step 1-DS18B20 begin");
    29. DS18B20.begin();                                      // Инициализация DS18B20
    30.  
    31. //Serial.println("");
    32. Serial.println("Step 2-WIFIinit");
    33. //Запускаем WIFI
    34. WIFIinit();
    35. //Настраиваем и запускаем HTTP интерфейс
    36. HTTP_init();
    37. Serial.println("Step 3 - WebServer");
    38. }
    39.  
    40. void loop() {
    41. HTTP.handleClient();
    42. delay(1);
    43. }
    44.  


    HTTP_init (раскрыть)
    Код (Text):
    1. void HTTP_init(void) {
    2. HTTP.onNotFound(handleNotFound); // Сообщение если нет страницы.
    3. HTTP.on("/", handleRoot); // Главная страница http://192.168.4.1/
    4. HTTP.on("/restart", handle_Restart); // Перезагрузка модуля по запросу вида http://192.168.4.1/restart?device=ok
    5. HTTP.on("/sleep0", handle_Sleep0);
    6. HTTP.on("/sleep1", handle_Sleep1);
    7. HTTP.on("/sleep2", handle_Sleep2);
    8. HTTP.on("/analog", handle_Analog);
    9. // Запускаем HTTP сервер
    10. HTTP.begin();
    11. }
    12.  
    13. // Ответ если страница не найдена
    14. void handleNotFound(){
    15. String message = "File Not Found\n\n";
    16. message += "URI: ";
    17. message += HTTP.uri();
    18. message += "\nMethod: ";
    19. message += (HTTP.method() == HTTP_GET)?"GET":"POST";
    20. message += "\nArguments: ";
    21. message += HTTP.args();
    22. message += "\n";
    23. for (uint8_t i=0; i<HTTP.args(); i++){
    24.    message += " " + HTTP.argName(i) + ": " + HTTP.arg(i) + "\n";
    25. }
    26. HTTP.send(404, "text/plain", message);
    27. }
    28. void handle_Analog() {
    29. //Value = analogRead(analogInPin);
    30. v=ESP.getVcc ()/10;
    31. voltag=v/100;
    32. //String message = "analogValue = ";
    33. //message += Value;
    34. String message = "Power = ";
    35. message += voltag;
    36. message += " B";    
    37. HTTP.send(200, "text/plain", message);
    38. }
    39. // Ответ при обращении к основной странице
    40. void handleRoot() {
    41.       DS18B20.requestTemperatures();                   // Запрос на считывание температуры
    42. String message = "Temp = ";
    43. message += DS18B20.getTempCByIndex(0);
    44. message += " *C";  
    45. HTTP.send(200, "text/plain", message);
    46. v=ESP.getVcc ()/10;
    47. voltag=v/100;
    48. message += " Power = ";
    49. message += voltag;
    50. message += " B";
    51. Serial.println(message);
    52. }
    53.  
    54. // Перезагрузка модуля по запросу вида http://192.168.4.1/restart?device=ok
    55. void handle_Restart() {
    56. String restart = HTTP.arg("device");
    57. if (restart == "ok") ESP.restart();
    58. HTTP.send(200, "text/plain", "OK");
    59. }
    60.  
    61. void handle_Sleep0() {
    62. HTTP.send(200, "text/plain", "Sleep0");
    63. //1,000,000=1 second
    64. ESP.deepSleep(0);  
    65. }
    66.  
    67. void handle_Sleep1() {
    68. HTTP.send(200, "text/plain", "Sleep1 60e6");
    69. //1,000,000=1 second
    70. ESP.deepSleep(60e6); //1 min  
    71. }
    72.  
    73. void handle_Sleep2() {
    74. HTTP.send(200, "text/plain", "SLEEP_TIME 60 * 1e6");
    75. //1,000,000=1 second
    76. ESP.deepSleep(SLEEP_TIME);  
    77. }
    78.  


    WIFI (раскрыть)
    Код (Text):
    1. void WIFIinit() {
    2. // Отключаем WIFI
    3.   WiFi.disconnect();
    4.   //WiFi.setOutputPower(100);  
    5.   // Меняем режим на режим точки доступа
    6.   WiFi.mode(WIFI_STA);
    7.   // Задаем настройки сети
    8.   WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
    9.   // Включаем WIFI в режиме точки доступа с именем и паролем
    10.   // хронящихся в переменных _ssidAP _passwordAP
    11.   WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
    12.   //wifiMulti.addAP(_ssidAP.c_str(), _passwordAP.c_str());
    13. }
     
  18. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    Значит проблема в амперметре или неправильно пользуетесь.
     
  19. ArDi

    ArDi Новичок

    Сообщения:
    9
    Симпатии:
    0
    Я в этом коде вырезал свой URL просто, чтоб сюда его не постить.

    Пробовал вообще код с без каких либо библиотек, просто вывод в Serial порт строки и последующего сна, результат был тот же.
    Кусок программы не вырезал, но вот вывод полной версии:
    Вывод с терминала (раскрыть)

    Код (Text):
    1. ␀;l␀d��|␀�$�|␂␄␌␄�␌d�␌c<��␃�␛�{�c�␌#��og�lgo���␌c␜p��${$sdp�g�␐␂␄␌�␄l␄��␄␌␄c␌n�|␃$�␄␌�c��g'�␀l��d`␃�␒␛og␄l ␃␇␃o;���g␄␌c␌�␇l␇{ۓo␌␄#␌�␎d�␃�␃ld�␓�l ␃��g�␃*WM:
    2. *WM: AutoConnect
    3. *WM: Connecting as wifi client...
    4. *WM: Using last saved values, should be faster
    5. *WM: Connection result:
    6. *WM: 3
    7. *WM: IP Address:
    8. *WM: 192.168.1.65
    9. 3500
    10. WiFi connected...
    11.  
    12. Status  Humidity (%)    Temperature (C) HeatIndex (C)
    13. OK      31.1            22.4            21.5sd␀$ܟ<␀�l�<␃␌␄␄�␄l�␄c|��␃�␓�;�c�␄c��gn�dog���␄c␜8��lrl;l8�o�␐␃␌␄�␄$␌��␄␄␌b␌'�|␂d�␄␄�b��og�␀l��l ␃�␛␓og␄l ␃␏␂n{���g␄␌c␄�␇l␇s��'␌␌c␌�␇d�␃�␃ll�␒�l`␃��o�␃*WM:
    14. *WM: AutoConnect
    15. *WM: Connecting as wifi client...
    16. *WM: Using last saved values, should be faster
    17. *WM: Connection result:
    18. *WM: 3
    19. *WM: IP Address:
    20. *WM: 192.168.1.65
    21. 3499
    22. WiFi connected...
    23.  
    24. Status  Humidity (%)    Temperature (C) HeatIndex (C)
    25. OK      31.1            22.5            21.6;l␀d��|␀�d�|␂␄␌␌�␌d�␌c<��␃�␛�{�c�␌#��ng�lgn���␌c␜p��${$sdp�'�␘␃␄␌�␌l␄��␌␌␄c␄o�<␃l�␌␌�c��gn�␀d��d`␃�␓␛gn␌d`␂␇␃gs�ۓn␌␄#␌�␎d␎;��g␄␌c␄�␏l�␃�␂d$�␛�d`␂��'�␃*WM:
    26. *WM: AutoConnect
    27. *WM: Connecting as wifi client...
    28. *WM: Using last saved values, should be faster
    29. *WM: Connection result:
    30. *WM: 3
    31. *WM: IP Address:
    32. *WM: 192.168.1.65
    33. 3424
    34. WiFi connected...
    35.  
    36. Status  Humidity (%)    Temperature (C) HeatIndex (C)
    37. OK      31.1            22.7            21.8
     
  20. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.705
    Симпатии:
    183
    Какой используете переходник на Serial.
    Какие поставили резисторы подтяжки.
    Подайте на ресет низкий уровень и померьте ток потребления схемы.
     

Поделиться этой страницей