Cześć
Próbuje zapisać zmienna którą sobie odbieram po serialu i po kanale czujnika dystansu wartość leci do Supli. Chcę zapisywać tą zmienną, żeby po resecie była zapamiętana, ale kiedy strzelam reset cały czas się zeruje.
Próbowałem eproma put, get i preferences i to samo. Bez Supli działa bez problemu a z Suplą lipton. Płytka ESP32.
--------- EDIT ------------
Temat opanowałem używając preferences.
Zapis zmiennej float do eprom, preferences ESP32 Problem
-
- Posts: 10405
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Dodam tylko, że tutaj problem był taki, że suplowa klasa "eeprom" była ustawiona na domyślny zerowy offset, więc Supla pisała do eeprom na adresach zacyznając od 0 w górę.
Zmienne u Zibi'ego też były zapisywane na niskich adresach i jedno z drugim się nadpisywało.
Metoda przechowywania danych "Preferences" to "NVS storage" z ESP-IDF. Używa on innego obszaru na flashu i można zapisywać dane w postaci klucz-wartość. Dlatego zmiana na preferences tutaj pomogła. Alternatywnie można było ustawić inny offset w suplowej klasie eeprom, albo zapisywać zmienne bezpośrednio do eeprom na adresach nieużywanych przez Suplę.
Zmienne u Zibi'ego też były zapisywane na niskich adresach i jedno z drugim się nadpisywało.
Metoda przechowywania danych "Preferences" to "NVS storage" z ESP-IDF. Używa on innego obszaru na flashu i można zapisywać dane w postaci klucz-wartość. Dlatego zmiana na preferences tutaj pomogła. Alternatywnie można było ustawić inny offset w suplowej klasie eeprom, albo zapisywać zmienne bezpośrednio do eeprom na adresach nieużywanych przez Suplę.
-
- Posts: 110
- Joined: Sat Jul 21, 2018 4:26 pm
Zibi podpowiesz, też korzystam z preferences i tak samo bez Supli działa a Suplą już nie. Wiesz może w czym tkwi problem?Zibi wrote: Sun Jan 29, 2023 12:15 pm Cześć
Próbuje zapisać zmienna którą sobie odbieram po serialu i po kanale czujnika dystansu wartość leci do Supli. Chcę zapisywać tą zmienną, żeby po resecie była zapamiętana, ale kiedy strzelam reset cały czas się zeruje.
Próbowałem eproma put, get i preferences i to samo. Bez Supli działa bez problemu a z Suplą lipton. Płytka ESP32.
--------- EDIT ------------
Temat opanowałem używając preferences.
-
- Posts: 639
- Joined: Wed Jul 31, 2019 9:20 am
- Location: Białogard
Hej
Ja koniec końców zastosowałem to co Krzysztof napisał. Zastosowałem się do zapisów do flashu na adresach nieużywanych przez Suplę.
Ja koniec końców zastosowałem to co Krzysztof napisał. Zastosowałem się do zapisów do flashu na adresach nieużywanych przez Suplę.
-
- Posts: 110
- Joined: Sat Jul 21, 2018 4:26 pm
Szkoda, bo Preferences jest bardzo wygodne w stosowaniu i nie trzeba myśleć o offsetach dla kolejnych danych. No nic przechodzę również na standardowe EEPROM.put() i EEPROM.get() bo kilkudniowa walka nie pozwoliła mi na znalezienie przyczyny braku współpracy z SD choć Supla jak i Preferences używają LittleFS wiec niby nie powinny z sobą kolidować.
Dzięki za info.
Dzięki za info.
-
- Posts: 724
- Joined: Wed Oct 31, 2018 7:58 am
A dlaczego nie skorzystasz z możliwości jakie daje SuplaConfig? Pozwala na zapisywanie różnych zmiennych przy pomocy kluczy, ma nawet opcję zapisywania blobów, z której korzystam przy przechowywaniu 4 kB tablicy danych.petione wrote: Wed Jan 29, 2025 7:16 am Szkoda, bo Preferences jest bardzo wygodne w stosowaniu i nie trzeba myśleć o offsetach dla kolejnych danych. No nic przechodzę również na standardowe EEPROM.put() i EEPROM.get() bo kilkudniowa walka nie pozwoliła mi na znalezienie przyczyny braku współpracy z SD choć Supla jak i Preferences używają LittleFS wiec niby nie powinny z sobą kolidować.
Dzięki za info.
-
- Posts: 110
- Joined: Sat Jul 21, 2018 4:26 pm
vajera wrote: Wed Jan 29, 2025 10:07 amA dlaczego nie skorzystasz z możliwości jakie daje SuplaConfig? Pozwala na zapisywanie różnych zmiennych przy pomocy kluczy, ma nawet opcję zapisywania blobów, z której korzystam przy przechowywaniu 4 kB tablicy danych.petione wrote: Wed Jan 29, 2025 7:16 am Szkoda, bo Preferences jest bardzo wygodne w stosowaniu i nie trzeba myśleć o offsetach dla kolejnych danych. No nic przechodzę również na standardowe EEPROM.put() i EEPROM.get() bo kilkudniowa walka nie pozwoliła mi na znalezienie przyczyny braku współpracy z SD choć Supla jak i Preferences używają LittleFS wiec niby nie powinny z sobą kolidować.
Dzięki za info.
Masz na myśli własne dane? Mam do zapisu kilka tablic typu int po 100 elementów ( int tab[100] ).
Jeśli tak to podpowiedz coś proszę bo nigdy nie zapisywałem swoich danych z wykorzystaniem Supli ( jakiś przykład).
P.S. Prefereneces działa właśnie w oparciu o klucze.
-
- Posts: 10405
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Supla::Config też działa w oparciu o klucze i to takie same.
Ogólnie historia jest taka, że esp-idf dodał kiedyś coś co się nazywa NVS (non-volatile storage), który polega na zapisywaniu wartości różnych typów przy pomocy 16 B kluczy.
SuplaDevice dla esp-idf na esp32 polega na NVS i udostępnia swój interfejs Supla::Config, który opakowuje NVS.
Dla Arduino IDE i esp8266 nie było kiedyś dostępnego NVS, więc w SD napisałem coś co się nazywa Supla::KeyValue, który potem został opakowany w LittleFsConfig (oparty o KeyValue, używający LittleFs do przechowywania danych).
Natomaist od strony Arduino historia wyglądała tak:
NVS w esp32 był fajny, więc w boardach pojawiły się Preferences dla esp32.
W esp8266 chcieli użyć tego samego, ale tam nie ma NVS, więc ludzie zaczęli tworzyć biblioteki w stylu Preferences dla ESP8266, które robią w zasadzie to samo co LittleFsConfig.
Supla::LittleFsCofig to klasa dziedzicząca między innymi po Supla::Config.
Supla::Config wystawia settery i gettery podobne do tego co robi NVS:
https://github.com/SUPLA/supla-device/b ... e/config.h
Do zapisu większych fragmentów danych, jak np. int[100], można użyć setBlob/getBlob.
Tylko pamiętaj, że domyślnie LittleFsConfig daje 1000 B, co dość szybko się kończy, szczególnie, że int[100] zajmie 400 B. Możesz to zwiększyć podając w konstruktorze większą wartość, tylko ta wartość będzie odpowiadała zaalokowanej ilości pamięci, której na ESP8266 i tak jest mało.
Ogólnie historia jest taka, że esp-idf dodał kiedyś coś co się nazywa NVS (non-volatile storage), który polega na zapisywaniu wartości różnych typów przy pomocy 16 B kluczy.
SuplaDevice dla esp-idf na esp32 polega na NVS i udostępnia swój interfejs Supla::Config, który opakowuje NVS.
Dla Arduino IDE i esp8266 nie było kiedyś dostępnego NVS, więc w SD napisałem coś co się nazywa Supla::KeyValue, który potem został opakowany w LittleFsConfig (oparty o KeyValue, używający LittleFs do przechowywania danych).
Natomaist od strony Arduino historia wyglądała tak:
NVS w esp32 był fajny, więc w boardach pojawiły się Preferences dla esp32.
W esp8266 chcieli użyć tego samego, ale tam nie ma NVS, więc ludzie zaczęli tworzyć biblioteki w stylu Preferences dla ESP8266, które robią w zasadzie to samo co LittleFsConfig.
Supla::LittleFsCofig to klasa dziedzicząca między innymi po Supla::Config.
Supla::Config wystawia settery i gettery podobne do tego co robi NVS:
https://github.com/SUPLA/supla-device/b ... e/config.h
Do zapisu większych fragmentów danych, jak np. int[100], można użyć setBlob/getBlob.
Tylko pamiętaj, że domyślnie LittleFsConfig daje 1000 B, co dość szybko się kończy, szczególnie, że int[100] zajmie 400 B. Możesz to zwiększyć podając w konstruktorze większą wartość, tylko ta wartość będzie odpowiadała zaalokowanej ilości pamięci, której na ESP8266 i tak jest mało.