NodeMCU ESP8266 12E теряет код после повторного подключения питания

Я загрузил простой код для управления 8-канальным реле путем включения и выключения отдельных реле. Когда я загружаю код, он работает правильно, код работает правильно, и реле включаются и выключаются в нужном порядке. Однако, когда я отсоединяю USB-кабель от компьютера и снова подключаю его, код больше не работает, никаких видимых действий не происходит. Стирается ли код из памяти после отключения питания?

int pins[] = {D0, D1, D2, D4, D5, D6, D7, D8};
int i;

void setup() 
{
  Serial.begin(115200);
  for(i=0;i<8;i++)
  {
    pinMode(pins[i],OUTPUT);
    digitalWrite(pins[i],HIGH);
  }
}
void loop() 
{
  for(i=0;i<8;i++)
  {
    digitalWrite(pins[i],LOW);//Включает это реле
    Serial.println(pins[i]);
//Выключаем предыдущее реле
    if(i==0)
    {
      digitalWrite(pins[7],HIGH);
    }
    else
    {
      digitalWrite(pins[i-1],HIGH);
    }
    delay(700);
  }
}

Моя схема:
узелMCU | Реле
D0 IN1
D1 IN2
D2 IN3
D4 IN4
D5 IN5
D6 IN6
D7 IN7
D8 IN8
Вин ВКК
ЗАЗЕМЛЕНИЕ ЗАЗЕМЛЕНИЕ

, 👍0

Обсуждение

Ваше использование D0 заставляет режим загрузчика запускаться при загрузке ...?, @Majenko

@Majenko D0 - это io16, @Juraj

Что ж, тогда какой бы случайный номер D они не решили присвоить GPIO 0... Почему они не могли просто пронумеровать их такими, какие они есть, вместо того, чтобы случайным образом назначать им другие номера?, @Majenko

У меня была такая же проблема, и я решил ее по следующей ссылке: https://github.com/esp8266/Arduino/issues/1074#issuecomment-258669539., @Sadegh Ghanbari


2 ответа


2

D3 (GPIO0) и D4 (GPIO2) должны иметь высокий уровень при запуске, чтобы пользовательская программа могла выполняться. Релейная плата, подключенная к этим контактам, предотвращает достаточное высокое напряжение на этих контактах.

Если вам нужно использовать эти контакты, попробуйте подключить к ним более мощный подтягивающий резистор. Попробуйте 330-470 Ом.

Или так, или вам потребуется добавить дополнительную схему между контактами порта и драйвером реле. Также имейте в виду, что это установит высокий уровень на вход драйвера реле и попытается включить реле. Ваши условия включения могут отличаться от ожидаемых.

,

1

Ваш код заблокирует цикл более чем на 5 секунд. Для NodeMcu я обнаружил, что если основной цикл задерживается на долгое время, могут происходить странные вещи. Таким образом, вы также можете попробовать провести рефакторинг, чтобы избавиться от цикла for и использовать простой счетчик для переключения реле в каждой итерации основного цикла. так что ваш основной цикл будет заблокирован менее чем на секунду.

,