Termometr na USB

Dawno temu byłem zafascynowany prostym układem DS18S20, który działa za pośrednictwem 1-wire i umożliwia dokładny odczyt temperatury przez komputer. Schematów podłączenia termometru przez USB wtedy nie było, za to opisów podłączenia przez RS-232 była masa, koszt układu niewielki. Jedyne co powstrzymywało mnie wtedy przed uruchomieniem to… brak realnej potrzeby.

Potem sytuacja się zmieniła – port szeregowy zaczął w komputerach zanikać. A mnie coraz bardziej interesowała temperatura z wbudowanych czujników (płyta główna, dyski), a nie temperatura otoczenia. Były co prawda schematy jak to podłączyć przez USB, ale w stosunku do pierwowzoru rósł i poziom skomplikowania, i koszt.

Niedawno pojawiła się potrzeba (no dobra, powiedzmy, że potrzeba, bardziej pretekst), więc odświeżyłem temat. Okazało się, że istnieją tanie moduły PL2303HX USB UART, a także nieco nowsza wersja cyfrowych termometrów, oznaczona symbolem DS18B20. Różnica między wersjami w sumie pomijalna, z perspektywy tego wpisu. Każda z tych rzeczy to ok. 6 zł z dostawą (Allegro), a podłączenie jest jeszcze prostsze i nie wymaga żadnych dodatkowych elementów, jak widać na schemacie.

Do odczytu temperatury z termometru na USB służy digitemp. Opis użycia (zaczerpnięty stąd).

Instalacja pakietu:

apt-get install digitemp

Skanowanie układów:

digitemp_DS9097 -i -s /dev/ttyUSB0

Odczyt wartości:

digitemp_DS9097 -a

Bardziej zależało mi na sprawdzeniu, czy taka prosta wersja faktycznie będzie działać – w wielu miejscach podawane są bardziej skomplikowane schematy. Faktycznie, działa. Rozwiązanie zlutowane na krótko, bez żadnego przewodu ma jednak tę wadę, że moduł PL2303HX grzeje się na tyle, że wpływa na odczyt temperatury. Myślę, że ok. 10 cm kabla załatwi temat, ale gdyby ktoś był zainteresowany to można pomyśleć od razu o kupnie nieznacznie droższej wersji wodoodpornej, z przewodem. Mi akurat zależało żeby kabel się nie pałętał, ale wersję z kablem można zawsze skrócić…

Oczywiście gdyby ktoś chciał całkiem nowocześnie, to teraz czujniki temperatury montuje się do ESP8266 i odczytuje po WiFi. Tyle, że w moim wypadku to byłoby niewygodne. Miałbym problem z zasilaniem, a dane i tak mają trafić do pełnoprawnego komputera, ew. do SoC z Linuksem.

Gdyby ktoś bał się, że blog skręca całkiem w tematy elektroniczne – bez obaw, będzie najwyżej parę wpisów. I raczej w ramach wspomnienia o czymś, niż jako podstawowa tematyka.

Huawei E353/E3131 w Debianie

Kiedyś opisywałem uruchomienie Aero2 z modemem Huawei E3131. Kupiłem „taki sam” model i dziś przyszedł. Po podłączeniu do komputera spodziewałem się, że będzie tak samo, jak w poprzednim. Tak się nie stało, więc może komuś oszczędzę walki, na którą straciłem dziś dobry kwadrans, jak nie lepiej. Huawei E353/E3131 różni się od poprzednio opisywanego.

Otóż nowy modem przedstawia się w lsusb:

Bus 002 Device 016: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131

Natomiast po wpięciu Huawei E353/E3131 do portu USB w dmesg widać:

[11264.677637] usb 2-1.2: new high-speed USB device number 15 using ehci-pci
[11264.787001] usb 2-1.2: New USB device found, idVendor=12d1, idProduct=1f01
[11264.787005] usb 2-1.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[11264.787007] usb 2-1.2: Product: HUAWEI HiLink
[11264.787009] usb 2-1.2: Manufacturer: HUAWEI
[11264.788426] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[11264.788583] scsi host6: usb-storage 2-1.2:1.0
[11265.736276] usb 2-1.2: USB disconnect, device number 15
[11268.517690] usb 2-1.2: new high-speed USB device number 16 using ehci-pci
[11268.627263] usb 2-1.2: New USB device found, idVendor=12d1, idProduct=14db
[11268.627267] usb 2-1.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[11268.627269] usb 2-1.2: Product: HUAWEI HiLink
[11268.627271] usb 2-1.2: Manufacturer: HUAWEI
[11268.630336] cdc_ether 2-1.2:1.0 eth0: register 'cdc_ether' at usb-0000:00:1d.0-1.2, CDC Ethernet Device, 58:2c:80:XX:XX:XX
[11268.707401] cdc_ether 2-1.2:1.0 enx582c80xxxxxx: renamed from eth0

Co prawda świtało mi coś o hilink i zauważyłem kartę sieciową w systemie. Jednak stwierdziłem, że to tylko jeden z trybów i można używać „po staremu” z /dev/ttyUSB0 i wvdial, który to sposób mam obcykany. Zmyliło mnie też to, że nie mogłem wejść na wskazywany przy opisach wersji hilink adres 192.168.1.1.

Robiłem różne cuda, o których pisać nie będę. Na szczęście zapytałem na IRCu i dobrzy ludzie naprowadzili me zawiłe rozumowania na proste tory.

No więc ostatecznie „po staremu” mi się nie udało, natomiast żeby uzyskać adres IP wystarczy wydać polecenie:

dhclient enx582c80xxxxxx

I wtedy po wpisaniu w przeglądarkę 192.168.1.1 mamy dostęp do klikalnego interfejsu zarządzania modemem i wszystko działa od kopa.

Niestety, opisy są chyba obliczone albo na ludzi, którzy robią wszystko z ręki, albo na tych, którzy mają wszystko automatycznie. Pobieranie IP z DHCP też.

Uruchomienie karty Wi-Fi Mediatek MT7601U na Banana Pi

Jakiś czas temu kupiłem małe, tanie karty USB Wi-Fi w Chinach. Stwierdziłem, że przydadzą się do niewyposażonych we wbudowane karty płytek z ARM. Czy nawet do podpięcia komputera na szybko do sieci Wi-Fi w standardzie N. Karty przetestowałem na szybko na laptopie i wszystko było fajnie, ale… uruchomienie ich wymagało rzeźby i dokompilowania modułu. Dla jasności: chodzi o karty, które sprzedawane są jako Mediatek MT7601U USB bgn WiFi dongle.

MT7601U wg lsusb

Po podłączeniu w wyniku lsusb widać:

Bus 002 Device 002: ID 148f:7601 Ralink Technology, Corp.

a wymagany driver dla tej karty to mt7601u. W momencie podłączania karty USB w dmesg pojawia się:

[ 1075.027898] usb 2-1: new high-speed USB device number 2 using ehci-platform
[ 1075.189356] usb 2-1: New USB device found, idVendor=148f, idProduct=7601
[ 1075.196330] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1075.203764] usb 2-1: Product: 802.11 n WLAN
[ 1075.208160] usb 2-1: Manufacturer: MediaTek

Banana Pi

Dziś potrzebowałem uruchomić Banana Pi pod kontrolą dystrybucji Bananian z tą kartą, wetknąłem ją w lapka, żeby odświeżyć sobie budowanie modułu i… Bananian miło mnie zaskoczył – działało od kopa. Stwierdziłem, że może zasługa nowszego kernela (4.5), ale prawdopodobnie nie – brakujący firmware jest dostarczany w Debianie w pakiecie firmware-misc-nonfree. Niedostępnym w Jessie, ale nie jest to wielki problem. Poniżej krótka instrukcja, co zrobić, żeby zadziałało (dla Bananiana 16.04 (released 2016-04-23)). Być może zadziała także na starszym kernelu, ale nie testowałem. Zgodnie z tym, co piszą na GitHubie projektu, driver jest dołączony do mainline kernela. Opisany poniżej sposób powinen działać dla kerneli od 4.2 w górę.

Instalacja kernela z linii 4.x na Banana Pi (niezalecana w FAQ Bananiana, ale…):

wajig install linux-image-4.4-bananian

Następnie reboot, by Banana Pi działało z nowym kernelem. Kolejnym krokiem jest pobranie pakietu z firmware dla karty:

wget http://ftp.de.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-misc-nonfree_20160110-1_all.deb

Usunięcie pakietów, które konfliktują z ww. pakietem (oczywiście wajig; wykonać dla wszystkich pakietów, które zgłoszą konflikt):

wajig remove firmware-ralink

Ostatnim krokiem jest instalacja pobranej paczki:

wajig install firmware-misc-nonfree_20160110-1_all.deb

Od tej pory karta USB Mediatek powinna po prostu działać po włożeniu do USB. Oczywiście należy połączyć się jeszcze z siecią bezprzewodową, ja polecam do tego wicd i wygodny konsolowy wicd-curses. Zadziała także dla Debiana w wersji stable (Jessie) – w zasadzie Bananian różni się tylko kernelem.

UPDATE Dobrzy ludzie słusznie donoszą, że firmware-misc-nonfree jest w repozytorium backports, więc instalacja jest prostsza. Wystarczy dodać stosowne repozytorium do źródeł. Przyznaję, że nie sprawdzałem, bo jakoś mi się błędnie zakodowało, że ani armel, ani armhf nie są dostępne w backports.