Odświeżanie stanu ikony arduino ide
-
Zybi
- Posts: 1511
- Joined: Sun Jun 26, 2016 4:24 pm
Pamięć stanu nic do tego nie ma, a z jakiej funkcji skorzystać podał Przemek trochę wcześniej.
-
cino111
- Posts: 714
- Joined: Mon May 07, 2018 8:00 pm
Podał podal, ale nie wiem jak to zastosować. W sofcie espablo tego nie widzę, a soft dziala prawidlowo.
-
vajera
- Posts: 7290
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 289 times
- Been thanked: 161 times
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.
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.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
krycha88
- Posts: 5575
- Joined: Fri Nov 16, 2018 7:25 am
- Been thanked: 5 times
A może zamiast EEPROM wykorzystać do tego SPIFFS?pzygmunt wrote: Wed Jul 24, 2019 3:12 pm Panowie. Zapisywanie to nie problem. Problemem jest to, że ta pamięć długo nie wytrzyma.
https://starter-kit.nettigo.pl/2018/02/ ... eci-flash/
https://gui-generic-builder.supla.io/
-
vajera
- Posts: 7290
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 289 times
- Been thanked: 161 times
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.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
buli
- Posts: 44
- Joined: Mon Dec 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?
-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
W oczekiwaniu na kości fram'ów spróbowałem zapamiętać i odczytać tan za pomocą SPIFFS'a,.krystianmen wrote: Thu Jul 25, 2019 8:54 amA może zamiast EEPROM wykorzystać do tego SPIFFS?pzygmunt wrote: Wed Jul 24, 2019 3:12 pm Panowie. Zapisywanie to nie problem. Problemem jest to, że ta pamięć długo nie wytrzyma.
https://starter-kit.nettigo.pl/2018/02/ ... eci-flash/
Potrzebuję zapamiętać na początek jeden stan - jeden bit
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");
}
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
}
}
Ale jeżeli zrobie coś takiego :
Code: Select all
void supla_timer() {
if (digitalRead(14)==0) {
SuplaDevice.channelValueChanged (0,1);
Serial.println("timer");
}
}
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
Wezmę udział w Supla Offline Party 2024
-
Espablo
- Posts: 1754
- Joined: Wed Jun 29, 2016 5:04 pm
- Location: Oświęcim
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
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.

-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
Nic z tegoEspablo 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
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Wezmę udział w Supla Offline Party 2024
Wezmę udział w Supla Offline Party 2024
