Stacja pogodowa by shimano73

krycha88
Posty: 651
Rejestracja: pt lis 16, 2018 7:25 am

ndz gru 15, 2019 7:56 pm

shimano73 pisze:
ndz gru 15, 2019 5:36 pm

Kod: Zaznacz cały

Firmware version [year.month.day]: 18.11.16
Mode: active
Working period: 3 min cycles: work 30 seconds, measure and sleep
DS18B2 init
Parasite power is: OFF
Tryb konfiguracji: 2
teraz zobaczyłem, dlaczego urządzenie wchodzi Ci w tryb konfiguracji? tu bym szukał problemu.
Awatar użytkownika
shimano73
Posty: 1019
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze

ndz gru 15, 2019 8:02 pm

krycha88 pisze:
ndz gru 15, 2019 7:44 pm
shimano73 pisze:
ndz gru 15, 2019 7:33 pm
krycha88 pisze:
ndz gru 15, 2019 5:58 pm

pośpieszyłem się trochę abym mógł go zdecodować to byś musiał podesłać jeszcze wygenerowany plik *.elf

najlepiej zainstaluj sobie ten dodatek i wtedy tego exceptiona wklejasz w tego toolsa i zobaczysz gdzie jest problem
https://github.com/me-no-dev/EspExceptionDecoder
Zainstalowałem, nie obyło się bez problemów :D
No ale pojawił się dekoder , wklejam ten stack i ... nic sie nie dzieje, a o tego elfa pyta sie tylko gdy po uruchomieniu ardu nie dokonam kompilacji programu, no nieźle trzeba się go naszukać
*.elf znajduje się w tym samym miejscu co bin
musisz to robić na skompilowanym projekcie i wklejasz:

Kod: Zaznacz cały

Exception (0):
epc1=0x4020389c epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

ctx: cont 
sp: 3fff4510 end: 3fff4a90 offset: 01a0

>>>stack>>>
3fff46b0:  401073a8 feefeffe feefeffe feefeffe  
3fff46c0:  ffffffff 00000020 feefeffe feefeffe  
...... // tu jest tego duuużo więcej
3fff4a70:  3fffdad0 00000000 3fff3a5d 40213420  
3fff4a80:  feefeffe feefeffe 3fff3a70 40100718  
<<<stack<<<
u mnie elf nie zapisuje sie tam gdzie bin tylko w jakimś temp'ie
którą część muszę wkleić , bo jeśli wkleję całość od "Exception" wyskakuje Decode Failed a gdy wkleję liczby znajdujące pomiędzy
>>>stack>>> a <<<stack<<< to nic się nie dzieje
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Jak się dziś oddycha https://schimano73.aqi.eco/
https://github.com/shimano73
krycha88
Posty: 651
Rejestracja: pt lis 16, 2018 7:25 am

ndz gru 15, 2019 8:07 pm

shimano73 pisze:
ndz gru 15, 2019 8:02 pm
krycha88 pisze:
ndz gru 15, 2019 7:44 pm
shimano73 pisze:
ndz gru 15, 2019 7:33 pm


Zainstalowałem, nie obyło się bez problemów :D
No ale pojawił się dekoder , wklejam ten stack i ... nic sie nie dzieje, a o tego elfa pyta sie tylko gdy po uruchomieniu ardu nie dokonam kompilacji programu, no nieźle trzeba się go naszukać
*.elf znajduje się w tym samym miejscu co bin
musisz to robić na skompilowanym projekcie i wklejasz:

Kod: Zaznacz cały

Exception (0):
epc1=0x4020389c epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

ctx: cont 
sp: 3fff4510 end: 3fff4a90 offset: 01a0

>>>stack>>>
3fff46b0:  401073a8 feefeffe feefeffe feefeffe  
3fff46c0:  ffffffff 00000020 feefeffe feefeffe  
...... // tu jest tego duuużo więcej
3fff4a70:  3fffdad0 00000000 3fff3a5d 40213420  
3fff4a80:  feefeffe feefeffe 3fff3a70 40100718  
<<<stack<<<
u mnie elf nie zapisuje sie tam gdzie bin tylko w jakimś temp'ie
którą część muszę wkleić , bo jeśli wkleję całość od "Exception" wyskakuje Decode Failed a gdy wkleję liczby znajdujące pomiędzy
>>>stack>>> a <<<stack<<< to nic się nie dzieje
ja zawsze bin pobieram z tempa ;)

podeślij mi tego elfa zobaczę u siebie.
Awatar użytkownika
shimano73
Posty: 1019
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze

ndz gru 15, 2019 9:08 pm

krycha88 pisze:
ndz gru 15, 2019 8:07 pm
shimano73 pisze:
ndz gru 15, 2019 8:02 pm
krycha88 pisze:
ndz gru 15, 2019 7:44 pm


*.elf znajduje się w tym samym miejscu co bin
musisz to robić na skompilowanym projekcie i wklejasz:

Kod: Zaznacz cały

Exception (0):
epc1=0x4020389c epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

ctx: cont 
sp: 3fff4510 end: 3fff4a90 offset: 01a0

>>>stack>>>
3fff46b0:  401073a8 feefeffe feefeffe feefeffe  
3fff46c0:  ffffffff 00000020 feefeffe feefeffe  
...... // tu jest tego duuużo więcej
3fff4a70:  3fffdad0 00000000 3fff3a5d 40213420  
3fff4a80:  feefeffe feefeffe 3fff3a70 40100718  
<<<stack<<<
u mnie elf nie zapisuje sie tam gdzie bin tylko w jakimś temp'ie
którą część muszę wkleić , bo jeśli wkleję całość od "Exception" wyskakuje Decode Failed a gdy wkleję liczby znajdujące pomiędzy
>>>stack>>> a <<<stack<<< to nic się nie dzieje
ja zawsze bin pobieram z tempa ;)

podeślij mi tego elfa zobaczę u siebie.
Ale to już jutro , dziś jestem już w robocie ☹️
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Jak się dziś oddycha https://schimano73.aqi.eco/
https://github.com/shimano73
Awatar użytkownika
klew
Posty: 567
Rejestracja: czw cze 27, 2019 12:16 pm

pn gru 16, 2019 1:47 pm

Jak długo trwa pomiar? Jeśli nieco dłużej, to jest szansa, że zapętla się wywołanie obsługi timera i coś się krzaczy (np. wywołany jest drugi raz odczyt "pm", zanim pierwszy się skończył).

Wstaw tam coś z "millis()", żeby nie wchodziło w odczyt częściej niż trwa sam odczyt.
Albo wyrzuć odczyt poza timer.
Awatar użytkownika
shimano73
Posty: 1019
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze

pn gru 30, 2019 6:42 pm

Po długich bojach zaczął działać esp exception decoder , i napoczątku był problem z "iSR not IRAM" ale z tym sobie poradziłem,
teraz problem jest bardziej złożony z którym nie potrafię sobie poradzić dlatego załączam zdekodowany exception

Kod: Zaznacz cały

Exception 9: LoadStoreAlignmentCause: Load or store to an unaligned address
PC: 0x401059bc
EXCVADDR: 0x00000003

Decoding stack results
0x401005d8: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 160
0x401009dc: millis() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 188
0x40215698: Twi::write_stop() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_si2c.cpp line 300
0x402159f0: Twi::readFrom(unsigned char, unsigned char*, unsigned int, unsigned char) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_si2c.cpp line 426
0x40213060: Stream::timedRead() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\Stream.cpp line 31
0x402130bb: Stream::readBytes(char*, unsigned int) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\Stream.cpp line 215
0x40217458: Stream::readBytes(unsigned char*, unsigned int) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/Stream.h line 92
0x40100a44: delayMicroseconds(unsigned int) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 210
0x40210f26: ClosedCube_SHT31D::read(unsigned short*, unsigned char) at C:\Users\Darek\Documents\Arduino\libraries\ClosedCube_SHT31D\src\ClosedCube_SHT31D.cpp line 417
0x4020e248: OneWire::reset() at C:\Users\Darek\Documents\Arduino\libraries\OneWire\OneWire.cpp line 178
0x4020e767: DallasTemperature::readScratchPad(unsigned char const*, unsigned char*) at C:\Users\Darek\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp line 127
0x40214d8c: __esp_yield() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 100
0x40215cc2: __delay(unsigned long) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 54
0x4020ea6f: DallasTemperature::blockTillConversionComplete(unsigned char, unsigned char const*) at C:\Users\Darek\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp line 361
0x4020eaae: DallasTemperature::requestTemperatures() at C:\Users\Darek\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp line 320
0x40201aed: get_temperature(int, double) at C:\Users\Darek\Documents\Arduino\Primary_GUI-V2_Stacja_pogodowa_sds011/Primary_GUI-V2_Stacja_pogodowa_sds011.ino line 733
0x4020c39d: SuplaDeviceClass::begin_thermometer(SuplaChannelPin*, TDS_SuplaDeviceChannel_B*, int) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 378
0x4020c88b: SuplaDeviceClass::begin(IPAddress*, char*, unsigned char*, char const*, int, char const*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 339
0x402175f4: supla_arduino_data_read(void*, int, void*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 48
0x4020cde0: supla_arduino_data_write(void*, int, void*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 52
0x4020d8bc: supla_arduino_on_remote_call_received(void*, unsigned int, unsigned int, void*, unsigned char) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 100
0x4010136f: free(void*) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\umm_malloc\umm_malloc.cpp line 362
0x4020c8f0: SuplaDeviceClass::begin(char*, unsigned char*, char const*, int, char const*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 351
0x40213a48: String::~String() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\WString.cpp line 125
0x402072d6: setup() at C:\Users\Darek\Documents\Arduino\Primary_GUI-V2_Stacja_pogodowa_sds011/Primary_GUI-V2_Stacja_pogodowa_sds011.ino line 257
0x40214e9c: loop_wrapper() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 177

W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Jak się dziś oddycha https://schimano73.aqi.eco/
https://github.com/shimano73
krycha88
Posty: 651
Rejestracja: pt lis 16, 2018 7:25 am

pn gru 30, 2019 7:04 pm

shimano73 pisze:
pn gru 30, 2019 6:42 pm
Po długich bojach zaczął działać esp exception decoder , i napoczątku był problem z "iSR not IRAM" ale z tym sobie poradziłem,
teraz problem jest bardziej złożony z którym nie potrafię sobie poradzić dlatego załączam zdekodowany exception

Kod: Zaznacz cały

Exception 9: LoadStoreAlignmentCause: Load or store to an unaligned address
PC: 0x401059bc
EXCVADDR: 0x00000003

Decoding stack results
0x401005d8: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 160
0x401009dc: millis() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 188
0x40215698: Twi::write_stop() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_si2c.cpp line 300
0x402159f0: Twi::readFrom(unsigned char, unsigned char*, unsigned int, unsigned char) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_si2c.cpp line 426
0x40213060: Stream::timedRead() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\Stream.cpp line 31
0x402130bb: Stream::readBytes(char*, unsigned int) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\Stream.cpp line 215
0x40217458: Stream::readBytes(unsigned char*, unsigned int) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/Stream.h line 92
0x40100a44: delayMicroseconds(unsigned int) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 210
0x40210f26: ClosedCube_SHT31D::read(unsigned short*, unsigned char) at C:\Users\Darek\Documents\Arduino\libraries\ClosedCube_SHT31D\src\ClosedCube_SHT31D.cpp line 417
0x4020e248: OneWire::reset() at C:\Users\Darek\Documents\Arduino\libraries\OneWire\OneWire.cpp line 178
0x4020e767: DallasTemperature::readScratchPad(unsigned char const*, unsigned char*) at C:\Users\Darek\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp line 127
0x40214d8c: __esp_yield() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 100
0x40215cc2: __delay(unsigned long) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 54
0x4020ea6f: DallasTemperature::blockTillConversionComplete(unsigned char, unsigned char const*) at C:\Users\Darek\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp line 361
0x4020eaae: DallasTemperature::requestTemperatures() at C:\Users\Darek\Documents\Arduino\libraries\DallasTemperature\DallasTemperature.cpp line 320
0x40201aed: get_temperature(int, double) at C:\Users\Darek\Documents\Arduino\Primary_GUI-V2_Stacja_pogodowa_sds011/Primary_GUI-V2_Stacja_pogodowa_sds011.ino line 733
0x4020c39d: SuplaDeviceClass::begin_thermometer(SuplaChannelPin*, TDS_SuplaDeviceChannel_B*, int) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 378
0x4020c88b: SuplaDeviceClass::begin(IPAddress*, char*, unsigned char*, char const*, int, char const*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 339
0x402175f4: supla_arduino_data_read(void*, int, void*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 48
0x4020cde0: supla_arduino_data_write(void*, int, void*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 52
0x4020d8bc: supla_arduino_on_remote_call_received(void*, unsigned int, unsigned int, void*, unsigned char) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 100
0x4010136f: free(void*) at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\umm_malloc\umm_malloc.cpp line 362
0x4020c8f0: SuplaDeviceClass::begin(char*, unsigned char*, char const*, int, char const*) at C:\Users\Darek\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp line 351
0x40213a48: String::~String() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\WString.cpp line 125
0x402072d6: setup() at C:\Users\Darek\Documents\Arduino\Primary_GUI-V2_Stacja_pogodowa_sds011/Primary_GUI-V2_Stacja_pogodowa_sds011.ino line 257
0x40214e9c: loop_wrapper() at C:\Users\Darek\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 177

Bez kodu to ciężko będzie, wrzuć na jakiegoś githuba.

zacznij poszukiwania problemu od

Kod: Zaznacz cały

setup() at C:\Users\Darek\Documents\Arduino\Primary_GUI-V2_Stacja_pogodowa_sds011/Primary_GUI-V2_Stacja_pogodowa_sds011.ino line 257
Awatar użytkownika
klew
Posty: 567
Rejestracja: czw cze 27, 2019 12:16 pm

pn gru 30, 2019 11:36 pm

Wrzuć gdzieś kod tego programu. Wygląda jakbyś coś z pamięcią namieszał - np. pisanie do nieistniejących obiektów lub poza zakres. W takich sytuacjach nawet dodanie/usunięcie fragmentu niezwiązanego kodu może powodować, że crash się pojawi lub zniknie.
Awatar użytkownika
shimano73
Posty: 1019
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze

czw sty 02, 2020 5:16 pm

Po wielkich bojach udało mi się uporać z tymi błędami. Problemem była, chyba, zbyt częsta kontrola czy są wyniki pomiaru z czujnika SDS011. Zauważyłem że gdy zablokuję odczyt danych z czujnika smogu to reszta programu działa poprawnie. Wpadłem na pomysł aby dokonywać kontroli co jakiś czas, np minutę i problem się rozwiązał, program działa i się nie wysypuje.
W głównym loop'ie dodałem

Kod: Zaznacz cały

 if (millis() - pm_lastmillis >= 60000) {
        pm_lastmillis = millis();  
        read_from_sds011();
  }  
gdzie

Kod: Zaznacz cały

void read_from_sds011() {
   
      PmResult pm = mySDS011.readPm();
      Serial.print("Data request from SDS011 -> ");
      if (pm.isOk()) {
          Serial.println("Valid data received");
          pomiar25 = double(pm.pm25);
          pomiar10 = double(pm.pm10);        
       }                     
       else {
         Serial.print("Could not read values from sensor, reason : ");
         Serial.println(pm.statusToString());
       }      
 }
 
Dalej chciałem rozszerzyć stronę konfiguracyjną o możliwość wpisania czasookresu pracy czujnika jak i norm aby wyliczać procent zanieczyszczenia powietrza
I tu prosiłbym o podpowiedź , jak wyliczyć , ustawić kolejny adres w EEPROM'ie bo mam z tym zagwozdkę . Ostania zapamiętywana dana jest "elevation" i adres ma postać :

Kod: Zaznacz cały

 int start = 1 + MAX_SSID + MAX_PASSWORD + MAX_MLOGIN + MAX_MPASSWORD + MAX_SUPLA_SERVER + MAX_SUPLA_ID + MAX_SUPLA_PASS + MAX_HOSTNAME + (SUPLA_GUID_SIZE * 2) + MAX_BUTTON + MAX_RELAY +  MAX_RELAY_STATE + (MAX_DS18B20_SIZE * MAX_DS18B20) + (MAX_DS18B20_NAME * MAX_DS18B20);
np. ... + sizeof(bme_channel.elevation) ?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Jak się dziś oddycha https://schimano73.aqi.eco/
https://github.com/shimano73
krycha88
Posty: 651
Rejestracja: pt lis 16, 2018 7:25 am

czw sty 02, 2020 7:13 pm

shimano73 pisze:
czw sty 02, 2020 5:16 pm
Dalej chciałem rozszerzyć stronę konfiguracyjną o możliwość wpisania czasookresu pracy czujnika jak i norm aby wyliczać procent zanieczyszczenia powietrza
I tu prosiłbym o podpowiedź , jak wyliczyć , ustawić kolejny adres w EEPROM'ie bo mam z tym zagwozdkę . Ostania zapamiętywana dana jest "elevation" i adres ma postać :

Kod: Zaznacz cały

 int start = 1 + MAX_SSID + MAX_PASSWORD + MAX_MLOGIN + MAX_MPASSWORD + MAX_SUPLA_SERVER + MAX_SUPLA_ID + MAX_SUPLA_PASS + MAX_HOSTNAME + (SUPLA_GUID_SIZE * 2) + MAX_BUTTON + MAX_RELAY +  MAX_RELAY_STATE + (MAX_DS18B20_SIZE * MAX_DS18B20) + (MAX_DS18B20_NAME * MAX_DS18B20);
np. ... + sizeof(bme_channel.elevation) ?
Pewnie, że tak możesz zrobić. Też możesz po prostu zrobić sizeof(int)
ODPOWIEDZ