Raspberry Pi – sterowanie LED i odczyt temperatury CPU i dysku

Parę dni temu zamówiłem opisywanego wcześniej Banana Pi, którego mam nadzieję użyć jako następcę Raspberry Pi w NAS. Nie wiem co stanie się z obecnym rpi, więc dla pamięci zapiszę parę przydatnych rzeczy, których używam.

Oczywiście do Raspberry Pi można podłączyć LEDy, termometry i ogólnie cuda na kiju (czy tam raczej na GPIO), ale warto też wiedzieć, że jest wbudowany czujnik, z którego można czytać temperaturę CPU. Podobnie jak LED, którym można sterować. Wszystko z wiersza poleceń Linuksa, bezpośrednio z powłoki, bez dodatkowych skryptów czy też bibliotek.

Temperatura CPU

Nie pamiętam już źródła, ale temperaturę CPU w Raspberry Pi odczytać można z /sys/class/thermal/thermal_zone0/temp Jednostka w której jest podawana to tysięczne stopnia Celsjusza, więc pewnie warto będzie zamienić na coś bardziej ludzkiego, np. na stopnie Celsjusza z dokładnością do jednej dziesiątej stopnia (zaokrąglanie):

awk '{printf("%.1f\n",$1/1e3)}' /sys/class/thermal/thermal_zone0/temp

Temperatura dysku

Skoro już sprawdzamy temperaturę, to warto też czytać ją z dysku, o ile taki mamy podłączony do Raspberry Pi. Główna zaleta jest taka, że mniej podatna na chwilowe zmiany i bardziej związana z temperaturą otoczenia. Praktycznie każdy dysk ma czujnik temperatury i można czytać z niego dane przy pomocy S.M.A.R.T. Pobranie samej wartości w stopniach Celsjusza z /dev/sda:

/usr/sbin/smartctl -A /dev/sda | grep -i temp | awk '{print $10}'

Ponieważ zdarzyło mi się raz, że nazwa dysku podczas pracy zmieniała się z /dev/sda na /dev/sdb (nie mam pojęcia czemu) i miałem dziurę w logach, to w skrypcie do logowania obu tych danych stosuję na to obejście (przy okazji pozwoli na czytanie z większej ilości dysków). Cały skrypt (który uruchamiam z crona co godzinę):

#!/bin/bashlogger -t temperature "RPi `awk '{printf("%.1f\n",$1/1e3)}' /sys/class/thermal/thermal_zone0/temp`"for i in `ls /dev/sd?`; dologger -t temperature "Disk `/usr/sbin/smartctl -A $i | grep -i temp | awk '{print $10}'`"done

Sterowanie LED

Większość opisów sterowania LED przy pomocy Raspberry Pi dotyczy tych podłączanych przez GPIO, ale samo rpirównież umożliwia użytkownikowi sterowanie jednym z wbudowanych LEDów. Od razu ostudzę zapał – jest to jedna zielona dioda z kilku LEDów w różnych kolorach świecących się i migających podczas pracy, więc użyteczność OOTB jest mierna. Można się oczywiście bawić w zasłonięcie pozostałych LEDów czy wyprowadzenie na obudowę „światłowodem” tej jednej, albo wyprowadzenie jej w określone miejsce na obudowie, co niewątpliwie zwiększy czytelność, ale to już trochę inna bajka. Polecenia przepisane z wpisu Raspberry Pi – Control the on board LED lights (polecam wpis; blogi znikają, wolę mieć backup).

Wyłączenie triggera (domyślnie pokazuje aktywność mmc0):

echo none > /sys/class/leds/led0/trigger

Zapalenie LED:

echo 1 >/sys/class/leds/led0/brightness

Zgaszenie LED:

echo 0 > /sys/class/leds/led0/brightness

Nie wykorzystuję tego w praktyce z uwagi na wspomnianą małą widoczność. Można w prosty sposób oprogramować i sygnalizować… cokolwiek, w dodatku na minimum 3 stanach (zgaszony/migający/zapalony). Przy odrobinie chęci można dodać obsługę częstotliwości migania. Jeśli chodzi o potencjalne zastosowania, to pierwsze co mi przyszło do głowy, to sygnalizacja temperatury z poprzednich akapitów. Wersja z kilkoma częstotliwościami świetnie nadaje się do informowania o aktualnym zużyciu pasma.

Upał

Przejście z jesieni w lato było dość gwałtowne w tym roku. Co prawda wiosna, i to ciepła przyszła już dawno, ale niedawno zrobiło się zimno, pochmurno i w ogóle nieciekawie. Ale od paru dni w Poznaniu zrobiło się lato pełną gębą, z temperaturami rzędu 30 C. Sporo i mocno odczuwalne, z uwagi na gwałtowność zmiany.

Zmiany temperatury o dziwo dotknęły też mojego NAS opartego o Raspberry Pi. Piszę o dziwo, bo w sumie stoi blisko grzejnika i myślałem, że głównie zimą będzie tam gorąco. O ile 40 C na dysku (samo rpi mnie mało interesuje, dopóki się nie wiesza itp.) zostało przekroczone już dawno, to do tej pory utrzymywało się 41-42 C. No chyba, że pojemnik został czymś przykryty, co się zdarzyło raz czy dwa, ale można uznać za nieistotne odstępstwo od normy. Natomiast odkąd zaczęły się upały, dysk zgłaszał cały czas temperatury 44-45 C. Nawet i 46 się zdarzyło, a tak przecież nie mogło zostać. Tym bardziej, że bliźniak leżący luzem (OK, inna lokalizacja) ma w tej chwili 35 C, a 46 to jego życiowy rekord.

Postanowiłem machnąć ręką na uptime (nie, nie zbieram i generalnie nie zwracam uwagi, ale nie lubię wyłączać sprzętu) i dorobić otwory. Z poprzednich sześciu otworów wylotowych u góry obudowy (po 3 sztuki na dwóch ściankach) zrobiło się… 20 (po 5 na każdej ściance). Dodatkowo dorobiłem po 3 sztuki otworów wlotowych w dolnej części ścianek. Mam wrażenie, że filcowe nóżki są jednak trochę za niskie. Zobaczę, czy to coś pomoże… Jeśli nie, to będzie trzeba pomyśleć o jakimś separatorze pomiędzy rpi a kieszenią z dyskiem i może o podwyższeniu nóżek. W sumie w odwrotnej kolejności, bo wpływ podwyższenia nóżek łatwo przetestować prowizorycznie podkładając choćby dwa ołówki. 😉

Przy okazji, skoro już było wyłączenie z prądu, skorzystałem z watomierza i sprawdziłem, ile prądu bierze Raspberry Pi. No, w zasadzie cały zestaw, bo samego rpi nie mierzyłem. Więc hub USB + rpi + dysk 2,5″ biorą u mnie przy normalnym działaniu 5,2W. Przy obciążeniu CPU (prosty Perl) wzrasta to do 5,9W. Najbardziej obciążające jest kopiowanie na dysku USB z partycją NTFS – typowo 7,3W, maksymalnie 8W.

Banana Pi – alternatywa dla Raspberry Pi

Zwykle nie piszę o hardware, nawet opartym na ARM, ale tu zrobię wyjątek. Raspberry Pi od początku średnio mi się podobało, ale nowy projekt czyli Banana Pi, zrobiony przez inną ekipę jest naprawdę ciekawy. Jak to ktoś ładnie ujął, Chińczycy wezmą i zrobią lepiej.

Zmiany w stosunku do Raspberry Pi:

  • Ethernet 10/100/1000 (przy NAS po kablu może robić kolosalną różnicę, choć wątpię, by faktycznie wyciągało pełen gigabit),
  • Wbudowane złącze SATA (znowu spora różnica dla NAS),
  • Procesor Corex A7 dual core, czyli dwa rdzenie prawdopodobnie po 1 GHz każdy, czyli niemal trzy razy tyle MHz ile ma niepodkręcane Raspberry Pi,
  • 1 GB RAM, czyli dwa razy więcej,
  • wbudowany IR (odbiornik podczerwieni), czyli teoretycznie trywialne do zrobienia sterowanie pilotem

Zachowane złącza GPIO, wymiary i niska cena. Z tego co piszą, działa dedykowany dla Raspberry Pi Raspbian. Wspierany jest także Debian (czyżby niemodyfikowany?). Co lepsze, użycie nowszego procesora oznacza, że będzie działać architektura armhf, więc nie ma potrzeby stosowania protezy w postaci Raspbiana.

Koszt to niby 43 dolary, ale za mniej niż 50 nie znalazłem do kupienia. Tak czy inaczej IMO zdecydowanie warto dopłacić. Niebawem zamówię i najprawdopodobniej wymienię silnik obecnego NAS opartego na Raspberry Pi.

I jeszcze stronka w Wikipedii poświęcona Banana Pi.

UPDATE: Dzięki namiarom z komentarzy (thx Zal!) wiemy więcej. Zapowiadało się dobrze i jest dobrze. Przynajmniej jeśli chodzi o benchmark Banana Pi vs. Raspberry Pi. Dla niecierpliwych: banan ma sieciówkę (o go głównie były obawy) 6-7 razy szybszą (iperf). Za to uwaga, Banana Pi jest nieco większe od Raspberry Pi i nie wszędzie się zmieści. Jak donosi też mniej pochlebna recenzja, nie wszystkie rozszerzenia będą pasowały z uwagi na przesunięcie niektórych złącz.

UPDATE: W jednym z kolejnych wpisów opisuję, jak zrobić z maszynki z Linuksem router, GSM/LTE z Wi-Fi. Z uwagi na niewielkie rozmiary i mały pobór energii Banana Pi świetnie się do tego nada.