Skocz do zawartości

Znikające czujniki BME280


voyt_eck

Pomocna odpowiedź

Dzień dobry:)

Od niedawna bawię się Raspberry Pi i różnymi elementami pogodowymi. Niestety napotkałem problem z czujnikiem BME280, który działa przez jakiś czas bezproblemowo, ale potem... znika.

BME280 podłączone jest do płytki stykowej, z której to idzie wyprowadzenie taśmą do Raspberry Pi 3B.

Na czym polega problem? Czujnik potrafi po jakimś czasie (od kilkudziesięciu minut do kilkudziesięciu godzin) po prostu zniknąć. Polecenie i2cdetect -y 1 zaczyna zwracać wtedy same puste sloty (same kreski).

Pomaga dopiero fizyczny "restart" poprzez odłączenie i podłączenie taśmy od płytki stykowej. Czasami potrzebny jest dodatkowo restart Raspberry.

 

I teraz moje dwa pytania:

1) Czy ktoś się z tym spotkał i czy jest na to jakieś lekarstwo?:)

2) Czy za pomocą jakichś komend w skrypcie Pythona można programowo dokonać takiego restartu magistrali jaki robię ręcznie żeby w razie czego zdalnie to naprawić?

 

Z góry dzięki za pomoc!

 

 

20191031_230415.jpg

  • Lubię! 1
Link do komentarza
Share on other sites

@voyt_eck witam na forum! 🙂

Najpewniej problem tkwi w połączeniach, płytka stykowa czasem nie styka - jeden z aktualnych problemów jednego z forumowiczów. Na zdjęciu widzę, że pomijając taśmę od RPi to sa jeszcze kabelki które łączą się z kolejnymi kabelkami. Takie połączenie może być problematyczne i z byle powodu coś się rozłączy i trzeba restartować.

Więc myślę, że jakbyś kabelki polutował i dał maksymalnie jedno połączenie goldpinami - do RPi to załatwi sprawę.

Ewentualnie, możesz pokusić się o program, który radzi sobie z wyjątkiem, gdy nie widać czujnika, to restartuje magistralę i szuka urządzeń na nowo. Ale to ww. powinno pomóc 😉 

Link do komentarza
Share on other sites

29 minut temu, Gieneq napisał:

@voyt_eck witam na forum! 🙂

Najpewniej problem tkwi w połączeniach, płytka stykowa czasem nie styka - jeden z aktualnych problemów jednego z forumowiczów. Na zdjęciu widzę, że pomijając taśmę od RPi to sa jeszcze kabelki które łączą się z kolejnymi kabelkami. Takie połączenie może być problematyczne i z byle powodu coś się rozłączy i trzeba restartować.

Więc myślę, że jakbyś kabelki polutował i dał maksymalnie jedno połączenie goldpinami - do RPi to załatwi sprawę.

Ewentualnie, możesz pokusić się o program, który radzi sobie z wyjątkiem, gdy nie widać czujnika, to restartuje magistralę i szuka urządzeń na nowo. Ale to ww. powinno pomóc 😉 

Hmm też myślałem, że to kwestia połączeń, ale... Jeśli często pomaga rozłączenie i podłączenie taśmy do przejściówki taśma-płytka, to akurat to się wydaje najpewniejszym połączeniem, które powinno kontaktować bez zarzutu:) Oczywiście to też sprawdzę, ale po kilku testach obawiam się, że to może nie być powód. Mam podłączony przez tę samą płytkę i taśmę DS18B20 i z nim nigdy nie było problemów ze zrywaniem połączenia.

A mógłbyś podpowiedzieć gdzie znajdę dokumentację z poleceniami, które pozwolą mi na napisanie takiego programu? Jakie moduły Pythona mogą mi w tym pomóc? W zwykłym RPi.GPIO nic takiego nie udało mi się znaleźć.

Link do komentarza
Share on other sites

33 minuty temu, voyt_eck napisał:

A mógłbyś podpowiedzieć gdzie znajdę dokumentację z poleceniami, które pozwolą mi na napisanie takiego programu? Jakie moduły Pythona mogą mi w tym pomóc? W zwykłym RPi.GPIO nic takiego nie udało mi się znaleźć.

A jak komunikujesz się z modułem, tam sa chyba 2 opcje I2C albo SPI. Najlepiej podeślij swój skrypt.

W Pythonie masz blok przechwytywania wyjątków try - catch. Jeżeli podczas funkcja z modułu jest przygotowana na takie sytuacji, a najpewniej jest, to powinna zwrócić jakiś rodzaj wyjątku. Tu jest przykład, co prawda dla innej biblioteki ale nakreśli ci sposób postępowania. Tu akurat jest próba wysłania:

# try up to 3 times on a failure
success = False
caught_exception = None
for _ in range(3):
    try:
        pi.i2c_write_byte(...etc...)
        # if we get here, we succeeded, so break out of the loop
        success = True
        break
    except pigpio.error as e:
        print "error: %s"%(e)
        # wait a second for the retry
        time.sleep(1)

if not success:
    print "Failed after 3 retries!"

Ewentualnie coś takiego, znowu tylko do nakreślenia sposobu postępowania. Tu jest próba zainicjowania, ale nie ma konkretnego błędu i żadnego sposobu jego obsługi, więc tak nie polecam robić, ale widać że jest coś na rzeczy 🙂 

while 1==1:
 try:
    bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
   file.write("\n%0.6f " %bme280.pressure)
 except:
   continue

Sprawdź jaki błąd jest podczas zerwania połączenia, wygooglaj skąd pochodzi wyjątek i jak go przechwycić. Coś w stylu "nazwa błędu catch exception python" i coś powinno być.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Drobne nieporozumienie:)

Ja generalnie obsługuje BME280 przez Domoticza. Bardziej myślałem, żeby gdzieś w tle wrzucić do schedulera zupełnie oddzielny skrypt, którego rolą byłoby sprawdzić raz na jakiś czas czy magistrala jest ok (to pokrywa Twój kod), a jeśli nie jest ok, to przeprowadzić jakieś jej wymuszone wyłączenie/restart/przeczyszczenie etc. Ogólnie zmusić znowu do działania. No i nie wiem jak się zabrać za tę drugą część:) bo teraz jak się wywali to już na amen dopóki fizycznie nie odepnę i wepnę taśmy.. 

Link do komentarza
Share on other sites

To tu raczej nie pomogę. Możesz sprawdzić czy w skryptach nie ma czegoś - możesz zrobić cyklicznie wyzwalane zdarzenie, które będzie sprawdzać czy czujnik jest widoczny. Tam masz do wyboru bloczki albo skrypty lua. W bloczkach pewnie się nie uda, ale w lua pewnie tak.

Edytowano przez Gieneq
  • Lubię! 1
Link do komentarza
Share on other sites

Spotkałem się z takim problemem z czujnikami BME280 z dodatkowymi tranzystorami pozwalającymi na pracę modułu z dwoma rodzajami zasilania i szyny i2c  3v3 lub 5V  a dokładnie z tą wersją 

https://botland.com.pl/czujniki-multifunkcyjne/13463-bme280-czujnik-wilgotnosci-temperatury-oraz-cisnienia-i2cspi-33v5v-waveshare-15231.html.

Takiego problemu nigdy na przestrzeni  3 lat nie zauważyłem z modułem BME280 w wersji na jedno napięcie 3v3 

https://botland.com.pl/czujniki-cisnienia/11803-bme280-czujnik-wilgotnosci-temperatury-oraz-cisnienia-110kpa-i2cspi-33v.html

 

Patrząc na Twoje zdjęcie problemem mogą być zbyt długie kable. Spróbuj podłączyć czujnik na krótkich przewodach (dołączonych do niego) bezpośrednio do pinów RPi. 

Nie mniej jednak u mnie ten czujnik w wersji  dwunapięciowej regularnie znika, jedyne co pomaga to chwilowe odłączenie od zasilania.

 

 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.