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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.