Na rynku dostępnych jest kilka rodzajów termometrów z różnymi sposobami komunikacji m.in. 1-wire, analogowe czy i2c. Przy wykorzystaniu Raspberry Pi najbardziej wygodnym i najprostszym rozwiązaniem jest wykorzystanie termometrów komunikujących się poprzez protokół 1-wire, który Raspberry Pi obsługuje na pinie 4 GPIO. Raspberry Pi jest w stanie obsłużyć do ośmiu urządzeń za pomocą protokołu 1-wire. W artykule tym pokażę jak łatwo można podłączyć i odczytać temperatury z termometrów DS18B20+.

Praktycznie wszystkie systemy maja już zainstalowane moduły dla protokołu 1-wire i obsługi termometrów po tym protokole. Aby sprawdzić czy moduły są zainstalowane możemy je ręcznie załadować

sudo modprobe w1-gpio
sudo modprobe w1-therm

Jeśli nie otrzymaliśmy żadnych błędów to warto aby powyższe moduły ładowały się wraz ze startem systemu dodając do pliku /etc/modules poniższe linijki.

w1-gpio
w1-therm

UWAGA:

W nowszych wersjach systemu należy jeszcze dodać poniższy wpis do pliku /boot/config.txt i zrestartować malinę.

dtoverlay=w1-gpio,gpiopin=4

Wybór czujników

Do naszych testów użyjemy cyfrowe termometry DS18B20+, które do komunikacji wykorzystują protokół 1-wire. Czujniki DS18B20+ można także kupić jako moduły oraz wodoodporne sondy.

Schemat podłączenia

Na poniższym obrazku pokazany jest schemat podłączenia termometrów do Raspberry Pi. Rezystor musi mieć wartość 4,7KΩ i być podłączony pomiędzy zasilaniem 3.3v (pin 1<>prawa nóżka) a kablem komunikacji (pin 7(GPIO4)<>środkowa nóżka). Trzecia lewa nóżka powinna być podłączona do GDN (pin 6)

ds1820 Raspberry pi

Odczytywanie informacji z czujników

Odczyt stanów i wartości z magistrali 1-wire odbywa się za pomocą odczytów z plików. Listę podpietych urządzeń można odczytać np. za pomocą poleceń

cd /sys/bus/w1/devices
ls

Po przejściu do katalogu sys/bus/w1/devices i wyświetleniu jego zawartości zobaczymy wszystkie podłączone urządzenia

28-0000045478fb  28-000004f3843c  28-0000054d14bc  28-0000054d6df0
28-000004f354e6  28-0000054cfeb2  28-0000054d52b8  w1_bus_master1

gdzie 28-00000xxxxxx to ID urządzeń a w1_bus_master1 określa pierwszy i jedyny główny kontroler w naszej malinie.

Możemy wyświetlić w łatwy sposób liczbę podłączonych czujników

cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
7

Możemy również wyświetlić listę ID podłączonych czujników

cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
28-0000054d6df0
28-0000054d52b8
28-000004f3843c
28-0000054d14bc
28-0000054cfeb2
28-000004f354e6
28-0000045478fb

Aby odczytać wartości temperatur oraz inne dane przykładowo z pierwszego czujnika z naszej listy wydajemy polecenie

cat /sys/bus/w1/devices/28-0000054d52b8/w1_slave

78 01 4b 46 7f ff 08 10 51 : crc=51 YES
78 01 4b 46 7f ff 08 10 51 t=23500

Temperatura podana jest w wartości t=23500, którą musimy podzielić przez 1000, dzięki czemu otrzymujemy ją w bardziej przyjaznym formacie – 23,5 (°C). Wartość crc=51 YES określa czy transmisja była wykonana bez błędów – w naszym przypadku się to udało.

Dzięki możliwości odczytu informacji o czujnikach z plików możemy praktycznie w każdym języku programowania odczytywać dane jak ze zwykłych plików tekstowych za pomoca wbudowanych funkcji i klas danego języka.

Podobne artykuły

  • Pingback: Polecane strony | portal()

  • Bartosz

    Polecam zamontować w ten sposób : http://www22.speedyshare.com/chMZs/download/2013-
    Na arduino śmiga bez problemu, a mamy oszczędność jednej żyły

    • Adrian

      Niestety Bartosz na malinie ten myk nie działa.

      @Cyryl fajny opis, to może teraz napiszesz jak zrobić wykresy w Highcharts do tych odczytów :)

  • Czy długość przewodu może mieć znaczenie na jakość dokonywanych pomiarów?
    Czy jest możliwość podpięcia czujnika do maliny z zainstalowanym raspbmc lub openelc, tak aby temperatura się wyświetlała zamiast tej pobranej dla lokalizacji z netu?

    • Nie powinna mieć. Z tego co czytałem przy 25m nie ma praktycznie problemów powyżej robi się jakieś zabiegi. Głównie są problemy z komunikacją a nie błędnymi odczytami. Powinieneś bez problemów dopiąć czujniki pod malinę z raspbmc, ale jak wyświetlić to w panelu xbmc to nie mam pojęcia.

    • Lucas

      tutaj: http://forum.xbmc.org/showthread.php?tid=101125 masz opis jak dodac temperatury CPU i GPU w xbmc na home screen. Analogicznie mozesz zrobic z temepratura z czujnika.

  • Pingback: BeagleBone Black - obsługa termometrów analogowych LM35DZ - Raspberry pi, XBMC, ODROID-X :: Portal osworld.pl()

  • nowy

    Ja mam pytanie odnośnie czujników. Jeszcze nie mam swojego zestawu, ale na wiosnę kupię i chciałbym za wczasu się trochę dowiedzieć. Czy te identyfikatory zawsze są takie same po starcie systemu? Chodzi o to, że umieszczę sobie kilka czujników temperatury w różnych miejscach i chciałbym wiedzieć który czujnik jest który. Nie żebym potem odczytywał temperaturę (skryptem co jakiś czas) i się okazało, że ten czujnik ma teraz inne id i nie mogę się do niego dostać. Ewentualnie czy można im nadać swoje identyfikatory.

    • Cyryl

      Tak każdy czujnik ma unikalny id. Możesz nadać własną nazwę w programie(który musisz sam napisać albo znaleźć ) do odczytu dodając nazwę wg ID.

    • nowy

      Dzięki za odpowiedź. To mi trzeba było wiedzieć

  • Cezary

    Przy ujemnej temperaturze za oknem (-4 )wyszło mi coś takiego :
    f3 ff 4b 46 7f ff 0d 10 e8 : crc=e8 YES
    f3 ff 4b 46 7f ff 0d 10 e8 t=-812
    Gdy podzielimy to przez 1000 nie daje to oczekiwanego wyniku. Co jest nie tak?

    • Cyryl

      Ciężko powiedzieć jest to prawie -1 st. więc któryś z termometrów kłamie :P

    • Cezary

      Też doszedłem do tego, ten który pokazywał -4 oszukiwał. Dzięki :)

  • Pingback: Raspberry Pi i obsługa czujnika temperatury i wilgotności DHT21/AM2301()

  • Adam

    Który opornik jest potrzebny: 4,7KOHM 1W, czy 4,7KOHM 0,25W?

    • FireEnd

      W tym przykładzie służy do podciągania, a więc wystarczy 0,25W. Oczywiście 1W też może być, ale 0,25 wystarczy ;)

  • FireEnd

    A ja miałem zainstalowane WebIOPi na raspberry i zainstalowałem sobie ten termometr i działa.
    Mam tylko pytanie, jak na stronie (np. takiej z WebIOPi) wyświetlić odczyt?

  • Pingback: CamJam Edukit 2 z sensorami()

  • Guest

    Witam, mam problem, bo nie widzę w devices w1_bus_master1.

  • Karol Cholewa

    Witam,
    Niestety nie widzę w Devices: w1_bus_master1. Sondy jeszcze nie podpiąłem ale zastanawiam się czy nie mam uszkodzonego kontrolera w tym przypadku…

    Macie jakieś pomysły?

    • Cyryl

      zaktualizowałem wpis. Należy dodać w pliku config.txt wpis dtoverlay=w1-gpio,gpiopin=4

  • Pingback: ElektroPrzewodnik numer 55: [Arduino] Termometr DS18B20 - OSWorld.pl()

  • kostek

    Dałoby radę naprawić zdjęcie schematu?

    • Ollbi

      Hej. Poprawiłem obrazek. Przepraszamy za problem :-)

  • Pingback: Kamera na Razpberry Pi z wydrukowana obudową | Aleksander Data()

  • Pingback: Kamera na Raspberry Pi z wydrukowana obudową | Aleksander Data()

  • vell

    można określić który z czujników jest podpięty do konkretnego gpio?

  • wiki

    cześć, czy ktoś może napisać jak podpiąć tak skonfigurowany czujnik do owfs i do openhaba. Wszyscy używają jakiś adapterów, przejściówek, a nikt nie pisze o bezpośrednim podłączeniu do gpio