Raspberry pi zero w +WiFi + ssh czyli jak ustawić nie mając odpowiedniej przejściówki

Uzupełniając vloga nr 16 – gdzie mówiłem o WiFi w Raspberry Pi zero W pora napisać jak skonfigurować WiFi i ssh jeśli nie mamy przejściówki MikroUSB <-> gniazdo USB. Zamiast kupować, szukać wystarczy:

Uruchamiamy SSH:

na karcie SD założyć plik o nazwie ssh i dowolnej treści. Możemy z poziomu dowolnego systemu operacyjnego to zrobić wkładając kartę SD do czytnika i zakładając plik. Treść nie ma zupełnie znaczenia. Znaczenie ma nazwa tego pliku. Przy starcie raspberry pi sprawdzi czy plik ssh istnieje i jeśli istnieje to się odpowiednio skonfiguruje. Prosta sprawa.

Uruchamiamy WiFi:

Z WiFi sprawa jest trochę bardziej skomplikowana. Musimy sięgnąć do bebechów na karcie. Dokładniej do pliku /etc/wpa_supplicant/wpa_supplicant.conf. Jeśli masz linuxa lub maca sprawa jest prosta. W przypadku Windowsa jest trudniej ponieważ Windows natywnie nie chce czytać systemu plików Linuxa, co więcej nawet nie widzi głównej części karty gdzie znajdują się wszystkie dane. Sprawa jednak jest prosta. Użyjmy linuxa. Najszybiej będzie zainstalować po prostu maszynę wirtualną – jeśli nie wiesz co to jest maszyna wirtualna to na początek najbardziej bezbolesny będzie Virtual Box. W Virtual Boxie zakładamy nową maszynę i jako nośnik CD wrzucamy ISO choćby pobrane ze strony Ubuntu (oczywiście może to być dowolny linux ale ubuntu wiem, że zadziała z Virtual Boxem i jest sporo materiałów o ubuntu gdyby chcieć wejść bardziej w świat linuksów). Po tej operacji będziemy mieli linuxa pod ręką.

Pozostaje jedynie udostępnić kartę SD maszynie (Menu-> Urządzenia -> USB -> Twój czytnik kart SD) i odpowiednio ustawić plik /etc/wpa_supplicant/wpa_supplicant.conf a odpowiednio to bardzo prosto:

network={
    ssid="nazwa_wifi"
    psk="haslo_wifi"
}

Tylko tyle i aż tyle. Po uruchomieniu maliny z tak zmienioną kartą malinka połączy się do naszego WiFi

Uruchomiło się i co dalej

Jeśli malinka się uruchomiła to pozostaje ją znaleźć w swojej sieci. Najłatwiej będzie zaglądnąć do routera i do klientów DHCP. Mając PI malinki lecimy już z górki:

ssh 192.168.x.x -l pi 

Podać hasło (defaultowe jest bodajże raspberry) i jesteśmy w środku. Stąd mamy klika możliwości. Albo uruchamiamy vnc (jak we vlogu) albo ustawiamy statyczne IP, żeby nie trzeba było szukać maliny po sieci albo aktualizyjemy albo robimy cokolwiek innego chcemy od naszej malinki 🙂

Odczytywanie temperatury za pomocą LM75A i Raspberry Pi

Ostatnio opisywałem czujnik LM75A, który jest banalny do podłączenia do Raspberry Pi i który jest banalny do odczytu za pomocą prostego skryptu w pythonie. Dzisiaj wgryziemy się w kod:

Zaczniemy od tego co lubię najbardziej: KOD. Najszybciej zaczniemy wpisując w terminalu

nano temperature.py

i zaczniemy kodować (rozumiem, że i2c jest skonfigurowane):


import smbus

sensorAddress = 0x48
i2c = smbus.SMBus(1)

print i2c.read_word_data(sensorAddress,0)

Czyli po kolej: importujemy bibliotekę smbus (zainstalowaną wcześniej)
podajemy adres czujnika (i2cdetect –y 1 żeby sprawdzić czy mamy coś podpięte i pod jakim adresem)

tworzymy obiekt reprezentujący szynę i2c (w raspberry pi rev2 jako parametr podajemy 1, w rev1 0)

i odczytujemy temperaturę. Wychodzimy z edytora i uruchamiamy skrypt:

python temperature.py

i mamy odczyt. Banalnie prosto. 🙂

A jeśli dziwi Cię dlaczego ten odczyt jest taki dziwny to dlatego, że odczytaliśmy surową wartość w formie jakiej wypluł czujnik. To jak to jest kodowane o co oznacza pisałem ostatnio zatem kod parsujący temperaturę z LM75A:

Zatem dodajemy kawałek kodu, który parsuje wartość odczytaną i zwraca prawidłową temperaturę

def Decode(raw):
    tempA = raw & 0xFF
    tempB = (raw >> 8) & 0xFF
    temp = (tempA << 8) | tempB
    temp = temp >> 5
    return temp

def Parse(input):
    signBit = input >> 10
    if signBit > 0:
        negativeTemperature = input
        return (negativeTemperature * 0.125) - 256
    return input * 0.125

raw = i2c.read_word_data(sensorAddress,0)
temp = Decode(raw)
print Parse(temp)

czyli mamy dwie funkcje, Decode, która tak przestawia bity aby zgodnie z tym co ostatnio pisałem uzyskać prawidłową liczbę w pythonie oraz Parse, która odpowiednio przelicza to na nasze dobrze znane stopnie Andersa Celsiusa.

Po sieci krąży jeszcze jedne kod do odczytu temperatury z LM75A:

tempA = temp & 0xFF
tempB = (temp >> 8) & 0xFF
temp = (tempA  << 8) | tempB
temp = temp >> 5

r = temp >> 7
if (temp & 0x8000):
r = (~r & 0x1FF)
r = r - 1
r = -r
r = r / 2.0
return str(r)

ma on jednak małą wadę, zaokrągla odczyt do .5 więc tracimy na rozdzielczości czujnika i z .125 robi nam się 0.5 stopnia Wprawdzie w zastosowaniach domowych i meteo nie ma to wielkiego znaczenia to jednak piszę o tym, ponieważ jedna z pierwszych moich wersji bazowała na tym kodzie i zaokrąglała własnie do .5. Teraz znalazłem czas, żeby napisać to po swojemu i mam .125

Ostatnia sprawa to spięcie całości. Potrzebujemy połączyć kość LM75A z Malinką:

image

Łączymy piny:

LM75A Raspberry PI
1 (SDA) 2 (SDA)
2 (SCL) 3 (SCL)
4 (GND) 24 (Ground)
8 (VCC) 1(3V3 Power)
5 1 (3V3 Power)
6 1 (3V3 Power)
7 1 (3V3 Power)

Piny 5 6 7 możemy połączyć dowolnie z “plusem” lub “minusem” – w ten sposób ustalamy adres jednak należy pamiętać, że piny 5, 6 i 7 MUSZĄ BYĆ POŁĄCZONE.

Miłej zabawy a w następnym odcinku serii na warsztat weźmiemy ciśnienie ale dopiero w przyszłym tygodniu.

Raspbmc konfiguracja i backup

Moja malinka zdechła, ot tak pewnego dnia uruchamiam cudo a na ekranie widzę

Kernel Panic: VFS : Unable to mount root fs on unknown-block (179,2).

Nie wiem skąd i nie wiem dlaczego ale zawsze jak coś robię z linuxami to kernel panikuje. Chyba się za bardzo nie lubimy. Jak widzę konsolę i te wszystkie znaczki jakie trzeba wpisać to panikuję więc jest 1:1. Tym razem nie było za bardzo jak odratować instalację – ssh nie działało – a że nie chciało mi się cudować z kartą i próbować naprawiać to po prostu zainstalowałem całość na nowo (tak jak tutaj) proces bezobsługowy więc po przygotowaniu karty, wrzuciłem ją do malinki i zająłem się swoimi sprawami. Co do samego źródła problemu to w internetach piszą, że może być to spowodowane błędem zapisu danych na karcie przy zbyt małej wydajności prądowej zasilacza – czyli znowu wychodzi na to, że warto zainwestować w przyzwoity zasilacz a ładowarka nie zawsze jest najlepszym rozwiązaniem. Wracając do tematu:

Po instalacji spisałem co i jak skonfigurowałem – niech panika kernela na coś się przyda – zatem poniżej krok po kroku:

Najpierw ustawienia sieci:

Programs->Raspbmc Settings –>Network configuration

Oraz wgranie nowego nightbuilda (opcjonalnie bo przecież może nie chcemy mieć najnoweszej niestabilnej wersji):

Programs->Raspbmc Settings –>Nightly Build Config –> Install  XBMC Nightly (20130110)

Potem wybór pilota jaki posiadamy – mój MCE działa bez tego, jednak po wybraniu MCE RC6 działa mi dodatkowy przycisk, który otwiera menu “kontekstowe” wiec potrzebuję to ustawić:

Programs->Raspbmc Settings –>IR Remote

Wyłączamy dźwięki nawigacji:

System->Settings->Appearance->Skin->Navigation sounds

A teraz język polski:

System->Settings->Appearance->International->Language

I po wybraniu mamy już wszystko po naszemu:

System->Settings->Appearance->International->Kraj strefy czasowej

System->Settings->Appearance->International->Preferowany jezyk dźwięku i napisów

System->Settings->Appearance->Wygaszacz->

Wizualizacja podczas odtwarzania muzyki (wyłącz) i włącz wygaszacz po upływie 2 min (dim)

Ustawienia pogody – podajemy swoje miasto:

Pogoda –> ogólne –> ustawienia –>lokalizacja

Nazywamy urządzonko jakoś po ludzku – ta nazwa będzie wyświetlana w AirPlay

Ustawienia-Usługi Ogólne –> nazwa urządzenia

Włączamy UPnP

Ustawienia->Usługi->UPnP

I AirPlay

Ustawienia->Usługi->AirPlay

Teraz chciałbym żeby malinka jakoś po ludzku się  nazywała w otoczeniu sieciowym zatem użyjemy cudownego narzędzia Putty, wystarczy podać ip naszej malinki i wybrać ssh. Standardowy użytkownik to pi,  hasło to raspberry. I edytujemy dwa pliki /etc/hostname i /etc/hosts za pomocą poniższych komend

sudo nano /etc/hostname

sudo nano /etc/hosts

Tutaj warto wspomnieć, nazwy piszemy małymi literami.

Tak skonfigurowana malinka jest gotowa do zainstalowania dodatkowych pakietów. Ten, który instaluję to smuto dla xbmc. Pobieramy zipa na komputerze i wrzucamy na malinkę wybierając ją w otoczeniu sieciowym komputera. Zipa również można przenieść za pomocą pendrive-a i  po prostu wpiąc go w malinkę ale po co skoro mamy tam podpiętą sieć.

Instalacja wtyczki jest banalnie prosta:

System->Wtyczki->..-> .. –> ok na instaluj z pliku zip

..->..->.. czyli wybieramy .. i przechodzimy tak długo aż zobaczymy opcję instaluj z pliku zip. W domyślnej sytuacji powinniśmy tam być od razu.

Po zainstalowaniu smuto repo czas na wybór wtyczek. Poniżej lista tych, które mi przypadły do gustu:

Wtyczki-> Wtyczki filmów:

Revision 3, TED, TVN Player, Vod.Tvp.pl, YouTube, Trailery (Trailery z FilmWeb)

TVN, TVP i Trailery są właśnie z smuto repository, które wcześniej instalowaliśmy. Fajną rzeczą jest możliwość podpięcia wtyczek wideo (i nie tylko) do menu głównego. Aby to zrobić wystarczy:

System->Ustawienia—>Wygląd->Skóra->Ustawienia:

Przy okazji włączymy pokazywanie pogody na głównym ekranie:

Ekran główny->Pokazuj info o pogodzie

Wtyczka skróty->Podmenu wideo Ekranu głównego

ustawiamy te wtyczki wideo, które chcemy mieć pod ręką w menu głównym (najbardziej używane).

To jest podstawowa konfiguracja, która spełnia moje potrzeby jeśli chodzi i wideo z internetów.  Jeśli chodzi o muzykę i radia internetowe to procedura jest dokładnie taka sama jak z wideo – chociaz  tutaj nie potrzebuję instalować żadnego repozytorium pluginów. W standardowym zestawie jest jazz radio oraz world radio, które spełniają więcej niż wszystkie moje internetowo radiowe potrzeby.

Na tym etapie mam wszystko co potrzebuję więc warto zrobić backup.

Możliwości mamy dwie:

Pierwsza to backup samej konfiguracji z poziomu ssh:

sudo initctl stop xmbc

sudo tar –cpf  /home/pi/Shared/xbmc_backup.tar /home/pi/.xbmc

sudo initctl start xbmc

taką konfigurację możemy teraz przez udział sieciowy zapisać w bezpiecznym miejscu.

Druga możliwość to backup całej karty za pomocą programu win32DiskImager. Wrzucamy kartę do czytnika i wybieramy w programie opcję read.

Proponuję najpierw wykonać pełny backup karty a później stworzyć sobie skrypt, który raz dziennie będzie wykonywał backup samej konfiguracji i najlepiej sam wysyłał ten backup w bezpieczne miejsce ale o tym już innym razem.

Jak zrobić smart tv czyli Raspberry Pi jako centrum multimedialne

Coraz więcej telewizorów sprzedawanych jest jako SMART czyli takich, które potrafią odtwarzać muzykę, zdjęcia i filmy z internetu lub naszych lokalnych zasobów. Jest to dosyć zrozumiałe bo przecież dlaczego oglądać zdjęcia z wakacji na komputerze (szczególnie, że coraz więcej z nich to małe laptopy) skoro mamy w salonie XX-dziesiąt cali, które lepiej się do tego nadają. Co jednak jeśli nie mamy “smart” tv? Nic prostszego, trzeba sobie zrobić.

Do wykonania smart tv będziemy potrzebować:

  1. raspberry PI
  2. Kartę SD
  3. Ładowarkę lub zasilacz
  4. Kabel hdmi
  5. kabel sieciowy (ethernet)
  6. pilot
  7. trochę internetu

Raspberry Pi to nic innego jak komputer na małej płytce drukowanej. Posiada całkiem przyzwoity SoC ARM1176JZFS @ 700Mhz i Videocore 4 GPU. Procesorek graficzny ma moc wystarczającą (rzekomo) do odtwarzania materiały w jakości BluRay dzęki wsparciu sprzętowemu dla H.264. Generalnie aby to cudo uruchomić potrzebujemy trochę kabli i trochę prądu.

raspberry pi (3 of 4)

raspberry pi (4 of 4)

raspberry pi (2 of 4)

Jeśli chodzi o prąd to ważna sprawa. Nasze cudo wymaga min 700mA i 5V. Generalnie wystarczy ładowarka z w miarę nowoczesnego smartfona ponieważ wiele z nich ma wydajność ~1A co w zupełności wystarcza. W praktyce może się okazać, że wygrawerowane 1A na ładowarce nie ma nic wspólnego z prawdzimym 1A  a prądu dostajemy tyle co kot napłakał. Poblem z brakiem prądu może objawiać się problemami przy korzystaniu z sieci przez urządzenie lub z czasowym przywieszaniem się (ale nie uprzedzajmy faktów) – dlatego warto wybrać się do sklepu z elektroniką i kupić przyzwoity zasilacz.

Kolejna sprawa to karta sd. Raspberry Pi posiada wbudowany czytnik a karta jest po prostu dyskiem dla urządzenia. Na potrzeby naszego smart tv warto kupić szybką i dobrą kartę. Osobiście użyłem klass 10 8GB SanDisk, sprawuje się bardzo przyzwoicie.

Ostatni element niezbędny to kabel HDMI. Wprawdzie płytka ma wyjścia audio i video out ale myślę, że lepiej skorzystać z dobroci hdmi – 1 kabel, lepsza jakość. Od razu przypominam, jeśli chcecie schować raspberry za telewizorem to wystarczy najtańszy kabel. Przy długości rzędu 1-2 metrów jakość wykonania tego kabla nie ma żadnego znaczenia i nie ma sensu przepłacać.

To wszystko to minimum jakie potrzebujemy aby nasze smart tv ożyło.

Dalej użyjemy xbmc jako serce całego systemu. Najprościej będzie skorzystać z Raspbmc. Pobieramy installer, wrzucamy kartę sd do czytnika i wskazujemy ją w instalerze. Reszta praktycznie robi się sama. Jak instaler powie że skończył, wrzucamy kartę do malinki podłączamy hdmi, kabel z internetem,  zasilanie i czekamy. Reszta dzieje się sama

WP_000508

WP_000509

Raspbmc samo pobierze aktualizacje z internetu i wszystko pozostałe co potrzebuje. I tutaj może pojawić się problem. Jeżeli użyte źródło zasilania jest zbyt słabe wówczas to tutaj czasem mogą się pojawić problemy. Urządzenie oprócz normalnej konsumpcji dosyć mocno korzysta z karty sieciowej, jeśli prądu zaczyna brakować bo zasilacz czy ładowarka mizerne są to wszystko padnie. Jeśli zaś są przyzwoite proces powinien przejść bez problemu a jeśli przejdzie bez problemu zobaczymy takie piękne logo Smile

WP_000511

Po zainstalowaniu przydała by się jakaś forma komunikacji z urządzeniem. Osobiście korzystam z pilota z Microsoft Media Center 1039 (http://www.mythtv.org/wiki/MCE_Remote) do kupienia czasem na allegro. Ruszył bez konfiguracji, bez kombinacji ot zaraz po wpięciu.

Można też użyć aplikacji w telefonie które dostępne są  na iOS-a, Windows Phone i Androida.

Co zrobić po zainstalowaniu Raspbmc? Osobiście pierwsze co to włączyłem AirPlay  (System->Network->Allow XBMC to receive AirPlay content) dzięki czemu mogę teraz wysyłać obraz i dzwięk z iPhone-ów  iPad-ów i iTunes-ów na telewizor. Jest to chyba najtańszy sposób na airplay-a w telewizorze. Nie trzeba kupować całego AppleTv aby korzystać z tego dobrodziejstwa.

WP_000512

Instalacja całości jest bardzo prosta i niewymagająca – ja adept sztuk linuksowych na poziomie prawie zero dałem radę – dlatego polecam poskładanie takiego cuda bo może to być początek bardzo fajnej przygody.

Jeśli macie jakieś pytania to zapraszam, postaram się odpowiedzieć w miarę możliwości.