Raspberry Pi2 i nowe media center

Jeśli ostatni tydzień spędziłeś pod kamieniem to pewnie nie wiesz, że na świat przyszła nowa wersja malinki, raspberry pi 2. Mamy teraz do dyspozycji 1GB ramu oraz 4 rdzenie. Spora różnica w porównaniu do poprzedniej wersji. Rozmiar jak i cena bez zmian. Jeśli dowiedziałeś się o tym czytając tego bloga to na prawdę musisz mieszkać w jaskini bo o tym wydarzeniu napisali już wszyscy – może poza pudelkiem i mną do teraz.

IMG_20150203_185617

Wszyscy pisali bo i jest o czym pisać, Microsoft ogłosił, że będzie wspierał raspberry Pi 2 swoim Windowsem 10, czekam na to bo może być wesoło. Ciekawe jak będzie działał na tym .net bo do tej pory uruchamiałem na malinie mono i nie miałem większych problemów z tym.

Media Center

Pierwsza malina, która zawitała do mnie do domu pracowała jako media center czyli RaspBMC + dysk zewnętrzny. Spokojnie hostowała sobie zdjęcia, filmy, trochę muzyki, radia internetowe, youtuby i takie tam inne. Ot smart tv w domowym wykonaniu. Demonem prędkości nigdy nie była ale też nie można było bardzo na nią narzekać. Nowe Raspberry Pi 2 na piewszy ogień ma zamienić stary model B (bez plusa) i dać kopa. Tylko, że Raspbmc nie działa z Pi2, na stronie jest oficjalna informacja, że nie ma już wsparcia. Projekt raspbmc jest niejako martwy bo Sam Nazarko (autor) skupia się na nowej platformie OSMC i to działa już na Pi2 i działa super szybko.

OSMC to na razie alpha. więc i choroby wieku dziecięcego się pojawiły. Pierwsza to brak sieci. Przez interfejs użytkownika nie działało u mnie ustawianie sieci – a chcę mieć statyczne ip na tym. Aby to obejść wystarczy wyłączyć ui – opcja wyłącz (bez restartu) i za pomocą esc możemy dostać się do konsoli tam już logowanie (nowe defaultowe hasło daje wam osmc i user osmc) i można brać się za konfigurację.

vi… nie działą, vim też nie, ale działą nano

niestety /etc/network/interfaces też nie działa bo osmc używa jakiegoś innego lepszego sposobu używania sieci, google mówi, że:

sudo nano /var/lib/connman/ethernet.config

i wpisujemy

[service_ethernet]
Type = ethernet
IPv4 = 192.168.1.100/255.255.255.0/192.168.1.1
Nameservers = 192.168.1.1

Czyli generalnie konfiguracja, w postaci

IPv4 = ip malinki/maska/gateway
Nameservers = dns

Restart i śmiga wszystko jak złoto. Jest internet, jest ssh, można szaleć.

I jeszcze jedna uwaga, Pi2 u mnie zaczął wyświetlać kolorowy tęczowy kwadrat na ekranie, czyli brakowało mu mocy z zasilacza. Działa stabilnie ale marudzi, że słabo. Ładowarka od Nexus-a 4 to dla niej za mało dlatego wymieniłem na ładowarkę z iPhone-a i już nie marudzi.

Na ratunek Raspberry Pi

O Raspberry Pi dawno nie pisałem, projekt termometrów wisi w martwym punkcie – kable po chałupie trzeba poprzeciągać. Klejem na gorąco przymocować gdzie trza i wrócić do pisania softu. Tymczasem gdzieś po drodze w trakcie eksperymentów ucierpiał slot na kartę SD. Już szukałem gdzie można przelugować takie gniazdo gdy internet przyniósł natchnienie. Wystarczy ułamany plastik wyrównać, oskrobać i kropelką czy innym takim wynalazkiem przykleić kawałek np. karty kredytowej czy innej tego typu. U mnie padło na kartę do zbierania punktów na stacjach Shell. Kiedyś tankowałem u nich więcej, teraz nie mam po drodze więc karta leżała odłogiem – aż się okazało, że może przysłużyć się ludzkości.

raspberrypi

Po operacji Malinka działa miodzio malina.

 

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.