Odświeżanie stanu ikony arduino ide

Zybi
Posty: 1511
Rejestracja: ndz cze 26, 2016 4:24 pm

Pamięć stanu nic do tego nie ma, a z jakiej funkcji skorzystać podał Przemek trochę wcześniej.
cino111
Posty: 714
Rejestracja: pn maja 07, 2018 8:00 pm

Podał podal, ale nie wiem jak to zastosować. W sofcie espablo tego nie widzę, a soft dziala prawidlowo.
vajera
Posty: 387
Rejestracja: śr paź 31, 2018 7:58 am

ESP8266 nie ma, w przeciwieństwie do Arduino, dedykowanej pamięci EEPROM. Biblioteka EEPROM emuluje tą pamięć za pomocą jednego sektora pamięci Flash (stąd maksymalna wielkość EEPROM = 4 kB).
Metoda begin przydziela pamięć RAM do buforowania EEPROM, commit zapisuje bufor do pamięci Flash.
Metoda end dodatkowo zwalnia pamięć RAM przydzieloną przez begin.
I tu jest chyba Twój problem:
begin w setup jest ok , ale później zapis powinien odbywać się za pomocą metody commit - bez end. End zwolni bufor RAM i metoda read niczego nie odczyta.
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

pzygmunt pisze: śr lip 24, 2019 3:12 pm Panowie. Zapisywanie to nie problem. Problemem jest to, że ta pamięć długo nie wytrzyma.
A może zamiast EEPROM wykorzystać do tego SPIFFS?

https://starter-kit.nettigo.pl/2018/02/ ... eci-flash/
https://gui-generic-builder.supla.io/
vajera
Posty: 387
Rejestracja: śr paź 31, 2018 7:58 am

krystianmen pisze: czw lip 25, 2019 8:54 am
A może zamiast EEPROM wykorzystać do tego SPIFFS?
Tak jak pisałem jeden post wyżej - w przypadku ESP8266 pamieć EEPROM jest emulowana poprzez zapis jednego sektoru pamieci Flash modułu ESP - tej samej pamięci, w której przechowywane są pliki w systemie SPIFFS. Tak czy inaczej pamięć flash w teorii powinna wytrzymać ok. 10 000 cykli zapisu - jeżeli zapisujesz stan 2x dziennie = 5000 dni = 13 lat.
Ostatnio zmieniony czw lip 25, 2019 11:52 am przez vajera, łącznie zmieniany 1 raz.
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

Ale to nie wiele zmienia EEPROM czy Flash ma ograniczona liczę zapisów , zamówiłem fram’y
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
buli
Posty: 44
Rejestracja: pn gru 26, 2016 8:57 am

A jak to jest zrobione w oficjalnym supla-espressif-esp? Jak jest zapamietywany stan przekaźnika oraz jak jest zapamiętana pozycja rolety?
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

krystianmen pisze: czw lip 25, 2019 8:54 am
pzygmunt pisze: śr lip 24, 2019 3:12 pm Panowie. Zapisywanie to nie problem. Problemem jest to, że ta pamięć długo nie wytrzyma.
A może zamiast EEPROM wykorzystać do tego SPIFFS?

https://starter-kit.nettigo.pl/2018/02/ ... eci-flash/
W oczekiwaniu na kości fram'ów spróbowałem zapamiętać i odczytać tan za pomocą SPIFFS'a,.
Potrzebuję zapamiętać na początek jeden stan - jeden bit :D , i ten tryb to trochę jakby po kilogram jabłek jechać ciężarówką :lol:
Udało się, ale jest pewien problem bo odświeżanie nie działa, aby nie zaśmiecać całym kodem pokażę najważniejsze jego elementy.
Zmodyfikowałem metodę supla_DigitalWrite

Kod: Zaznacz cały

void supla_DigitalWrite(int channelNumber, uint8_t pin, uint8_t val) {

char Relay[5];
  
    digitalWrite(pin, val);  
     if  (val==1) strcpy(Relay,"HIGH");     
     else strcpy(Relay,"LOW");
    Serial.println("Zapisywanie stanu przekaznika");
    DynamicJsonBuffer jsonBufferRelay;
    JsonObject& jsonState = jsonBufferRelay.createObject();
    jsonState["RelayState"] = Relay;
    File StateRelayFile = SPIFFS.open("/state.json", "w");
    if (!StateRelayFile) {
      Serial.println("Nie udaó się otworzyć pliku z zapisem stanu przekaźnika");
    }
    jsonState.printTo(StateRelayFile);
    StateRelayFile.close();
    Serial.println();
    Serial.println("Stan przekaźnika zapisany");
    
}
w pętli loop wstawiłem :

Kod: Zaznacz cały

// State initial relay's
  if (initialRelay == false) {
      initialRelay = true;    // aby wykonało sie tylko raz i/ lub po resecie/zaniku zasilania
      int st = strcmp(Relay_State,"HIGH");
      if (st == 0){
          Serial.println("Przywrócono stan przekaźnika ");
          digitalWrite(RelayPin,HIGH);
          SuplaDevice.channelValueChanged(0,1); // kanał 0, wartość 1       
      }
  }
Jak wspomniałem wyżej stan wejścia jest przywrócony ale ikona się nie uaktualnia.
Ale jeżeli zrobie coś takiego :

Kod: Zaznacz cały

void supla_timer() {
   if (digitalRead(14)==0) {
      SuplaDevice.channelValueChanged (0,1);
      Serial.println("timer");
   }
  } 
to podanie masy na gpio14 zmienia stan ikony .
Dlaczego nie działa w pętli loop a w timerze działa ?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
Awatar użytkownika
Espablo
Posty: 1754
Rejestracja: śr cze 29, 2016 5:04 pm
Lokalizacja: Oświęcim
Kontakt:

Wykonaj ta pętle co najmniej 2 razy. SuplaDevice.channelValueChanged(0,1) wykonuje się za wcześnie i chyba nie trafia do serwera.
Zainicjalizuj initialRelay = 2 i potem dekrementuj aż initialRelay != 0
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

Espablo pisze: pn lip 29, 2019 6:34 pm Wykonaj ta pętle co najmniej 2 razy. SuplaDevice.channelValueChanged(0,1) wykonuje się za wcześnie i chyba nie trafia do serwera.
Zainicjalizuj initialRelay = 2 i potem dekrementuj aż initialRelay != 0
Nic z tego :( , próbowałem nawet 10 razy :?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
ODPOWIEDZ

Wróć do „Pomoc”