• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Odczyt DS18B20 i publikacja przez MQTT - zawiesza się po kilku godzinach.
#1
Witam,

Mam problem ze stabilnością działania kodu zawartego w załączniku. Program kompiluje się i działa poprawnie przez 3 - 4 godziny, po tym czasie przestaje publikować wyniki odczytów.

Od strony sprzętowej konfiguracja wygląda tak:

- Arduino Uno R3 lub Mega (bez różnicy, Mega działa nawet trochę krócej)
- Ethernet Shield W5100 (ten ze slotem SD)
- zasilacz 12V 2A
- 4 czujniki DS18B20

Teraz program jest maksymalnie odchudzony. Domyślnie pomiędzy kolejnymi seriami odczytów była przerwa, ale użycie delay(); powodowało zawieszanie się po kilku minutach. Wyrzuciłem również komunikację przez monitor portu szeregowego.

W tym momencie przychodzą mi na myśl trzy rzeczy:

- Fragmentacja pamięci spowodowana zadeklarowaniem buforów jako zmiennych lokalnych. Problem mam taki, że jeżeli zadeklaruję je jako globalne to nie wiem jak je wyczyścić przed kolejnym odtworzeniem pętli. Efekt jest taki, że w pierwszym powtórzeniu wynik jest poprawny (np. { id1 : 20,1 }, a kolejne powtórzenia przepełniają bufor ({ id1 : 20,1 } { id1 : 20,2 } { id1 : 21,3 } i tak aż do przepełnienia.

- Zbyt częste / źle skonstruowane odczyty z czujników.

- Wadliwy Ethernet Shield - ma jakiś problem z inicjalizacją. Po podłączeniu zestawu do zasilania diody na module sieciowym kilkukrotnie zapalają się i gasną. Po czasie 10 - 30 sekund zapalają się na stałe, program działa (wyniki da się odcztać przez Serial.print(); ale komunikacja sieciowa nie działa. Po drugim lub trzecim resecie diody zapalają się natychmiast po zresetowaniu i wtedy komunikacja działa poprawnie aż do zawieszenia.

Jakiś czas temu używałem tego sprzętu do odczytu tych czterech termometrów, ale wyniki raportowałem bezpośrednio do Domoticza przez HTTP GET. Program miał kilometr tekstu, używał bardzo długich stringów, przesyłał mnóstwo danych... i potrafił działać 3 tygodnie bez przerwy. Przejście na MQTT miało zoptymalizować cały proces.

W tym momencie chcę dokupić kolejny Ethernet Shield  żeby wykluczyć ewentualny problem sprzętowy.

Jednocześnie zwracam się z prośbą o przejrzenie kodu pod kątem jakichś ewidentnych błędów.


Załączone pliki
.txt   ds18b20_mqtt.txt (Rozmiar: 1.45 KB / Pobrań: 14)
 
Odpowiedź
  


Wiadomości w tym wątku
Odczyt DS18B20 i publikacja przez MQTT - zawiesza się po kilku godzinach. - przez darkdude - 21-04-2018, 10:22

Skocz do:


Przeglądający: 1 gości