Rozwiązanie problemu restartu przekaźników

User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

Zgodnie z poniższym opisem:

https://github.com/esp8266/Arduino/pull/7044

funkcja resetPins otrzymała atrybut __weak__ co oznacza, że można ją "nadpisać" własną wersją.

Oryginał wyglada tak:

Code: Select all

extern void __resetPins() {
  for (int i = 0; i <= 5; ++i) {
    pinMode(i, INPUT);
  }
  // pins 6-11 are used for the SPI flash interface
  for (int i = 12; i <= 16; ++i) {
    pinMode(i, INPUT);
  }
}
Na skutek wywołania funkcji ESP.restart() inicjalizowane są wszystkie piny ESP poza 6-11 jako INPUT, co powoduje chwilowy restart przekaźników podłączonych do konkretnych pinów.

Dzięki powyższej poprawce możemy umieścić w swoim kodzie następującą definicję:

Code: Select all

extern "C" {
void resetPins() {
  //do nothing
  }
}
i wtedy żaden z pinów nie zostanie zresetowany, ewentualnie możemy tam zainicjalizować tylko te piny, które docelowo będą w trybie INPUT chociaż wydaje mi się, że biblioteka SuplaDevice i tak to robi w przypadku buttonów/sensorów.

@krycha88 - możesz to dodać do kodu GG i ESP.restart() nie będzie już błyskać światłami ;-).
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277

Return to “Arduino IDE”