• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нагрев NodeMCU и SDK

Noperkon

New member
Заметил что программы выполняющие одинаковые функции (простой блинк) написанные для NodeMCU и SDK вызывают разный нагрев контроллера (esp8266). Если сишная программа греет весьма заметно, то программа на Lua оставляет устройство практически холодным.
Соответственно вопрос - с чем это связано?
Если уже было то звиняйте, сильно не пинайте, просто ткните пальцем.
 

Юрий Ботов

Moderator
Команда форума
А вы в SDK задержку делаете большим циклом? Если да то вот он и нагрев.
 

Noperkon

New member
Кое-что стало прояснятся, но появились новые вопросы.
Нагрев под SDK удалось побороть вставив в loop небольшой delay. В простое все отлично - контроллер абсолютно холодный, но ведь под нагрузкой (к примеру будет отдавать в сеть большой файл) эта задержка будет как палка в колесах. Как бы так сделать чтобы и волки сыты были и овцы целы?
 

Noperkon

New member
Код:
#include <ESP8266WiFi.h>
#include <Ticker.h>
Ticker blinker;

#define LED_PIN 2  //On board LED
#define HALF_PERIOD 500
#define WIFI_SSID "********"
#define WIFI_PSWD "********"

void changeState() {
    digitalWrite ( LED_PIN, ! ( digitalRead ( LED_PIN ) ) );
}

void setup() {
    WiFi.mode ( WIFI_STA );
    WiFi.begin ( WIFI_SSID, WIFI_PSWD );
    Serial.begin ( 115200 );
    Serial.println();
    pinMode ( LED_PIN, OUTPUT );
    blinker.attach_ms ( HALF_PERIOD, changeState );
}

void loop() {
    delay ( 50 );  // Если убрать начинает греться.
}
Обнаружились еще непонятности. Если в сетапе ничего не упоминать про WIFI то греется независимо от задержки в основном цикле. Если же модем отправить в спячку то нагрева нет при любом раскладе.
 

Noperkon

New member
Так греется -
Код:
#include <ESP8266WiFi.h>

void setup() {
    WiFi.mode ( WIFI_STA );
    WiFi.begin ( "********", "********" );
}

void loop() {
}
Так нет-
Код:
#include <ESP8266WiFi.h>

void setup() {
    WiFi.mode ( WIFI_STA );
    WiFi.begin ( "********", "********" );
}

void loop() {
    delay ( 50 );
}
Нагрев не то чтобы критический, градусов 40, но хотелось бы обойтись без него.
 

enjoynering

Well-known member
я так понял вы пишите в arduino framework for ESP8266 который основан на SDK? похоже косяк разрабов.
заметили как аксакалы притихли:). так же было когда народ на глючный драйвер I2C под arduino framework жаловался - тишина и игнор.


а если с delay(1), меньше греется?
 

Noperkon

New member
Похоже с WiFi я немного погорячился. Сейчас еще немного поэкспериментировал, и независимо от состояния модема - если в лупе есть задержка (в том числе 1) - нет нагрева, нет задержки - есть нагрев.

Код:
cat ./package.json
{
    "name": "framework-arduinoespressif8266",
    "description": "Arduino Wiring-based Framework (ESP8266 Core)",
    "url": "https://github.com/esp8266/Arduino",
    "version": "2.5.0-dev"
}
 

enjoynering

Well-known member
а если в setup убрать все и заменить на это
Код:
WiFi.persistent(false);  //disable saving wifi config into SDK flash area
WiFi.forceSleepBegin();  //disable AP & station by calling "WiFi.mode(WIFI_OFF)" & put modem to sleep
и в loop оставить пустым. нагрев есть?
 

enjoynering

Well-known member
тогда это на 99.9% не wifi радио, тк команда forceSleepBegin() загоняет его в сон.
похоже delay(1) каким-то магическим образом притормаживает 80МГц-овый процессор так хорошо, что он начинает потреблять меньше. еще бы токи промерять.

чисто из любопыства, а

Код:
delayMicroseconds(1);
так-же уменьшает нагрев?
 

Сергей_Ф

Moderator
Команда форума
@enjoynering не радио, а реализация внутри ардуино. Надо смотреть исходники, но сдается там не ошибка, а "особенность реализации".
 

Noperkon

New member
Значит так.
delayMicroseconds со значениями 1,100,1000 - греется
delay(0) - греется
delay(1) - не греется
 

enjoynering

Well-known member
однако.

а если в loop в место delay(1) поместить пустой for

Код:
for (int i = 0; x < 10; i++)
{
  //empty
}
будет греться?
 

enjoynering

Well-known member
прикольно. вот это баг фича. теперь осталось понять будет ли уменьшение потребления с delay и for

Код:
#include <ESP8266WiFi.h>

void setup()
{
    WiFi.mode( WIFI_STA );
    WiFi.begin( "********", "********" );
}

void loop()
{
    delay(1);
    for (int i = 0; x < 10; i++)
    {
        //empty
    }
}
если не будет, то я вас поздравлю с открытием новой пасхалки от китайцев. а люди на них управление газовыми котлами делает - вот где безумие и отвага.
 
Сверху Снизу