Odświeżanie stanu ikony arduino ide

Zybi
Posts: 1378
Joined: Sun Jun 26, 2016 4:24 pm

Wed Jul 24, 2019 3:48 pm

Pamięć stanu nic do tego nie ma, a z jakiej funkcji skorzystać podał Przemek trochę wcześniej.
cino111
Posts: 684
Joined: Mon May 07, 2018 8:00 pm

Wed Jul 24, 2019 4:01 pm

Podał podal, ale nie wiem jak to zastosować. W sofcie espablo tego nie widzę, a soft dziala prawidlowo.
vajera
Posts: 179
Joined: Wed Oct 31, 2018 7:58 am

Wed Jul 24, 2019 5:06 pm

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
Posts: 435
Joined: Fri Nov 16, 2018 7:25 am

Thu Jul 25, 2019 8:54 am

pzygmunt wrote:
Wed Jul 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/
vajera
Posts: 179
Joined: Wed Oct 31, 2018 7:58 am

Thu Jul 25, 2019 10:58 am

krystianmen wrote:
Thu Jul 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.
Last edited by vajera on Thu Jul 25, 2019 11:52 am, edited 1 time in total.
User avatar
shimano73
Posts: 915
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Thu Jul 25, 2019 11:13 am

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
buli
Posts: 19
Joined: Mon Dec 26, 2016 8:57 am

Thu Jul 25, 2019 11:52 am

A jak to jest zrobione w oficjalnym supla-espressif-esp? Jak jest zapamietywany stan przekaźnika oraz jak jest zapamiętana pozycja rolety?
User avatar
shimano73
Posts: 915
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Mon Jul 29, 2019 5:52 pm

krystianmen wrote:
Thu Jul 25, 2019 8:54 am
pzygmunt wrote:
Wed Jul 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

Code: Select all

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 :

Code: Select all

// 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 :

Code: Select all

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
User avatar
Espablo
Posts: 1458
Joined: Wed Jun 29, 2016 5:04 pm
Location: Oświęcim
Contact:

Mon Jul 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
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
https://github.com/Espablo
User avatar
shimano73
Posts: 915
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Mon Jul 29, 2019 7:29 pm

Espablo wrote:
Mon Jul 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
Post Reply