#2 Raspberry Pi – instalacja OS, Raspbian i sterowanie GPIO ‚


Witaj w drugiej części Kursu Raspberry Pi. Do zrozumienia tego artykułu przyda Ci się wiedza z poprzedniego odcinka, dlatego warto abyś przed rozpoczęciem czytania, zapoznał się z tamtą częścią (#1 Raspberry Pi – wstęp, zestaw startowy, instalacja Raspbiana). Jeżeli trafiłeś tutaj trochę przez przypadek i nie wiesz nawet, czym jest malina (=Raspberrry Pi), nie wychodź na razie – możesz przeczytać artykuł, w którym wyjaśniam to i owo na temat tej platformy i dowiedzieć się chociażby o czym właściwie jest ten kurs 🙂 –> Raspberry Pi – wstęp i podstawowe informacje.

Rozpoczniemy dzisiaj prawdziwą „zabawę” z RPI. Po pierwsze zainstalujemy, skonfigurujemy i uruchomimy system Raspbian, który przygotowaliśmy w poprzedniej części, omówimy sobie krótko jak wygląda i czym się cechuje ta dystrybucja Debiana, a następnie rozpoczniemy programowanie i napiszemy pierwszy program w Pythonie!! Zapraszam!

poprzednia część  «-» kolejna część ⇒

>> Urządzenia wykorzystywane w kursie pochodzą od Kamami.pl <<

Instalacja i uruchomienie Raspbiana

IMG_20150926_163722
Zaczniemy od instalacji systemu Raspbian. Skorzystamy narzędzia NOOBS, które wgraliśmy na kartę w poprzedniej części. Dowiedzieliśmy się już także co będzie nam potrzebne do uruchomienia naszego komputera – szybkie przypomnienie: klawiatura, myszka, monitor, zasilacz, kabel HDMI, karta pamięci, RPI. 

Gdy mamy już wszystko gotowe możemy przejść do uruchomienia naszego komputera. Z racji, że malina nie ma żadnego włącznika, jedyne co musimy zrobić to podłączyć ją do prądu. Powinny nam się zaświecić dwie diody led, informujące nas o działaniu całego komputera i o przesyłaniu danych pomiędzy RPI a kartą pamięci (grafika 1.).  Na naszym monitorze powinien pojawić się kolorowy obrazek, który niejako jest testem kolorów. Teraz uruchomi się nasz NOOBS (grafika 2.). Wybieramy pierwszą pozycję – „Raspbian [RECOMMENDED]” i klikamy „Install” (grafika 3.).

Rozpocznie się proces rozpakowywania plików i instalacji systemu. Może to potrwać około kilkanaście minut, w tym czasie możesz na przykład przeczytać sobie artykuł o czytaniu schematów. 🙂 Po zakończeniu wszystkich potrzebnych procesów, ukaże nam się panel ustawień Raspbiana, czyli Raspiconfig.


Raspi-config – podstawowa konfiguracja

Mamy teraz przed sobą panel konfiguracji Raspbiana. Jeżeli nie masz takiej potrzeby, to nic nie zmieniaj, gdy będziesz chciał wrócić do ustawień, wystarczy, że wpiszesz w konsoli sudo raspi-config. Omówmy teraz czego dotyczą poszczególne opcje:

  • Expand Filesystem – Zwiększa systemową partycję. RPi domyślnie nie zajmuje całej wielkości karty pamięci. Jeśli mam kartę 4 GB lub większą, po wyborze tej opcji będziemy mieli więcej dostępnego miejsca, bo nic nie pozostanie niezagospodarowane.
  • Change User Password – – zmiana hasła naszego użytkownika. W Raspberry Pi nazwa użytkownika to “pi”, a hasło “raspberry”. Nazwy użytkownika nie musimy zmieniać, ale hasło lepiej ustawić sobie swoje.
  • Enable Boot to Desktop/Scratc – Możliwość wyboru czy przy uruchamianiu Raspberry Pi ma włączyć interfejs graficzny, czy tylko sam tryb tekstowy (sami możemy włączyć tryb graficzny poleceniem startx)
  • Internationalization Options zawiera dość istotne ustawienia, pierwsza opcja w nowym oknie: 
    • Change Locale, pozwala na wybranie pakietów językowych używanych przez programy. 
    • Change Timezone pozwala ustawić naszą strefę czasową Europa -> Warsaw [Raspberry Pi nie posiada zegara czasu rzeczywistego (RTC – Real Time Clock), ale może go pobierać z zewnętrznego układu lub internetu.]
    • Change Keyboard Layout pozwala dostosować klawiaturę do naszego języka.
  • Enable Camera – pozwala włączyć/wyłączyć kamerkę dedykowaną do RPi.
  • Add to Rastrack umożliwia dodanie lokalizacji naszego komputerka do mapy Rastrack.co.uk.
  • Overclock pozwala na zwiększenie wydajności poprzez ustawienie większego taktowania procesora i pamięci, zbyt wysokie ustawienia mogą doprowadzić do uszkodzenia malinki.
  • Advanced Options zawiera kilka bardzo przydatnych opcji:
raspi-config-audio
  1. A1 Overscan umożliwia dopasowanie obrazu do monitora/telewizora;
  2. Hostname pozwala na zmianę nazwy, pod jaką malinka będzie widoczna w sieci;
  3. Memory Split pozwala na przydzielenie pamięci dostępnej dla procesora graficznego (GPU);
  4. SSH – bardzo przydatna opcja włączająca serwer SSH, dzięki czemu uzyskujemy zdalny dostęp do konsoli Raspberry Pi;
  5. SPI – włączenie magistrali szeregowej SPI;
  6. Audio – pozwala ustawić na sztywno wyjście dźwięku (auto, HDMI lub jack 3,5″);
  7. Update – aktualizacja przez internet raspi-config do najnowszej wersji.

Po skończonym konfigurowaniu klikamy po prostu „Finish”. Jeśli w przyszłości zajdzie potrzeba zmiany któregoś z powyższych ustawień, narzędzie można wywołać w każdej chwili poleceniem:


Tryb graficzny – interfejs raspbiana

tumblr_nhlp797veM1s29bjuo1_1280

Zakończyliśmy już konfigurowanie wszystkiego, uruchomiliśmy komputerek od nowa i nie pozostało nam nic innego jak wejść do świata graficznego. Wystarczy, że wpiszemy startxPo krótkiej chwili powinien wyświetlić się nam intefejs systemu (grafika poniżej) – nie zmienił się on praktycznie od samego początku. W zasadzie nic się w nim nie zmienia od lat. Dopiero na początku tego roku przeniesiono dolny pasek na górę oraz zmieniono część ikonek. Po kliknięciu „menu” otworzy się nam  ..menu 😀 , gdzie znajdziemy kilka domyślnie zainstalowanych podstawowych programów, np. kalkulator, menedżer plików, przeglądarkę internetową.

Ponieważ malina w założeniu ma być tanią platformą do nauki programowania, znajdziecie tu również języki Scratch oraz Python wraz ze środowiskiem IDLE. Dodano także kilka przykładowych gier napisanych w Pythonie, w tym Ottela, Węża i Sokobana. O ile o Pythonie większość słyszała, to Scratch raczej można zaliczyć do tych mniej znanych. To edukacyjny „język programowania” zaprojektowany z myślą o nauczaniu dzieci od lat ośmiu. To kompletne środowisko graficzne, w którym można projektować (w całości w sposób wizualny) i uruchamiać swoje aplikacje.

Jeśli ktoś chciałby wirtualnie sprawdzić, jak radzi sobie Raspberry Pi, może pobrać gotowy pakiet emulatora QEMU z obrazem Raspbiana. Powinien on dać namiastkę tego, czego można się spodziewać po malince. Dodatkowo może posłużyć do przygotowania własnego obrazu z systemem, gdyż wszystkie wprowadzane w emulatorze zmiany są zapisywane w pliku obrazu, który później można umieścić na karcie pamięci, aby użyć go w prawdziwym Raspberry Pi.


GPIO i wstęp do programowania

  • GPIO – General Purpose Input/Output
GPIO
Pinout Raspberry Pi B+ (GPIO)

Opanowaliśmy już w miarę system, wiemy co i jak, czas przejść do programowania. Z racji, iż jest to strona traktująca o elektronice/robotyce, głównym elementem, który będzie nas interesował będzie GPIO (General Purpose Input/Output). Jest to interfejs służący do komunikacji pomiędzy elementami systemu komputerowego, takimi jak mikroprocesor czy różne urządzenie peryferyjne. Wyprowadzenia takiego urządzenia (piny) mogą pełnić zarówno rolę wejść, jak i wyjść i jest to zazwyczaj właściwość konfigurowalna. Piny GPIO są często grupowane w porty. W przypadku Raspberry takich pinów mamy aż 40! Oprócz standardowych zastosowań często mają one również dodatkowe funkcje.

  • I2C (Pin 3 i 5)

Porty odpowiadające za I2C znajdują się na wyjściach o numerach 3 i 5. Służą one do przesyłania danych między układami elektronicznymi. Po bardziej szczegółowe informacje odsyłam do wikipedii. Używa się tych portów do komunikacji z niektórymi układami wyświetlaczy, czujników przyspieszenia i odległości.

  • SPI (Port 19, 21, 23, 24 i 26)

Serial Peripheral Interface to szeregowy interfejs urządzeń peryferyjnych.
MOSI (19) –  dane dla układu peryferyjnego;
MISO (21) – dane z układu peryferyjnego;
SCLK (23) – sygnał zegarowy (taktujący).

  • UART (Port 8 i 10)

Universal Asynchronous Receiver and Transmitter używany jest do asynchronicznej transmisji danych. W sieci można znaleźć kilka przykładów użycia tych portów do obsługi czujników, czy też do komunikacji z Arduino. Więcej przeczytacie o nim na wikipedii.

  • Instalacja wiringPi

Do sterowania pinami GPIO przyda nam się biblioteka wiringPi, dzięki której będziemy w stanie obsługiwać poszczególne wyjścia/wejścia z poziomu konsoli (wiersza poleceń), co pozwoli nam pisać programy. Pobieramy wiringPi (pobierz) i przenosimy do pamięci Raspberry, do swojego katalogu domowego, czyli /home/pi (dostaniemy się tam chociażby przez menedżer plików). Jeżeli mamy dostęp do internetu w naszej malinie wystarczy w konsoli wpisać:

wget http://project-downloads.drogon.net/files/wiringPi.tgz

Jeżeli nasza spakowana biblioteka jest już w folderze home/pi wpisujemy do konsoli:

tar xfz wiringPi-98bcb20.tar.gz
cd wiringPi-98bcb20
./build

Oczywiście po każdej wpisanej linijce klikamy enter i czekamy na koniec danego procesu. Jeżeli nie wystąpiły żadne błędy i wszystko poprawnie się zainstalowało, to możemy już zacząć sterowanie pinami. Aby upewnić się, że wszystko poprawnie działa, proponuję wpisać polecenie:

gpio -v
gpio readall

Powinien wyświetlić nam się komunikat dotyczący biblioteki/gpio oraz opis pinów. Od teraz mamy dostęp do polecenia gpio, dzięki któremu możemy m.in. skonfigurować linie i ustawiać ich stany. Skoro wszystko gotowe zróbmy pierwszy projekt! Montujemy na szybko prosty układzik podłączając masę z rpi do katody LED, natomiast anodę LED podpinamy przez 300Ω rezystor do pinu GPIO2 (pin 3). Teraz skonfigurujemy linię 2, tak aby pracowała jako wyjście. Wpisujemy:

gpio -g mode 2 out

Teraz jeszcze ustawiamy na tym właśnie pinie stan wysoki (+3.3V). Wystarczy wpisać:

gpio -g write 2 1

Jeżeli nie popełniłeś żadnego błędu to właśnie powinna zaświecić dioda, co oznacza, że potrafisz już obsługiwać wyjścia/wejścia w malinie z poziomu wiersza poleceń! Gratulacje! 😀

  • Pierwszy Program w pythonie

Dioda świecie, ale czas na prawdziwe programowanie. W tym kursie omówimy dwie opcje: programowanie w Pythonie oraz w C. Zaczniemy od Pythona! Więcej informacji o programowaniu w Pythonie jak i w C (jak wygląda program, kilka słów o samych językach), znajdziesz w kolejnej części kursu, natomiast teraz zajmiemy się tylko jednym programem, dzięki któremu nasza dioda zamruga!

Pisanie rozpoczniemy w edytorze tekstowym, domyślnie zainstalowany jest Leafpad i to własnie go użyjemy. Rozpoczynamy pisanie:

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12

13.

14.

import time

import RPi.GPIO as GPIO //importowanie biblioteki z GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(2,GPIO.OUT) //ustawienie pinu GPIO2 jako wyjście

GPIO.setup(3,GPIO.OUT) //ustawienie pinu GPIO3 jako wyjście

 

while True:

GPIO.output(2,GPIO.HIGH) //ustawienie stanu wysokiego na pinie GPIO2

GPIO.output(3,GPIO.HIGH)

time.sleep(1) //przerwa – 1 sekunda

GPIO.output(2,GPIO.LOW)

GPIO.output(3,GPIO.LOW)

time.sleep(1)

UWAGA! Przy przepisywaniu należy pominąć komentarze, które są w szarym kolorze. Jeżeli miałeś już do czynienia z C++ lub C, nie powinieneś mieć większych problemów ze zrozumieniem tego programu. Jak zapewne się domyślasz, włącza i wyłącza stan wysoki (+3.3V) na pinie GPIO2 i GPIO3. Mamy już napisany kod, co teraz? Klikamy File –> Save As –> wybieramy nazwę i lokalizację (najłatwiej będzie, jak zapiszesz w folderze głównym /pi) –> dodajemy końcówkę .py (np. „program.py”) –> klikamy Save. Teraz uruchamiamy konsolę i wpisujemy:

sudo python naszanazwa.py

I klikamy enter. W tym momencie nasze dwie diody powinny zacząć regularnie mrugać. Jeżeli udało Ci się zrobić wszystko bezbłędnie, gratuluję! 🙂 Skoro umiemy już pisać takie programy, to zabawmy się w coś trudniejszego! Dodamy do naszego programu kilka „gadżetów”:

 

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12

13.

14.

import time

import os

import RPi.GPIO as GPIO //importowanie biblioteki z GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(2,GPIO.OUT) //ustawienie pinu GPIO2 jako wyjście

print(„Jest aktualnie:)

os.system(‚date’)

print(Rozpoczynam dzialanie programu)

print(Port GPIO2 ustawiony jako wyjscie…))

 

while True:

print(GPIO2 – stan: ON)

GPIO.output(2,GPIO.HIGH) //ustawienie stanu wysokiego na pinie GPIO2

time.sleep(1) //przerwa – 1 sekunda

print(GPIO2 – stan: OFF)

GPIO.output(2,GPIO.LOW)

time.sleep(1)

 

Postępujemy analogicznie do poprzedniego przykładu. Tutaj również myślę, że nie ma sensu tłumaczyć na razie programu, ale oczywiście nie myślcie, że tak będę omawiał tutaj Pythona! Pythonem jako takim, zajmiemy się dopiero w kolejnej części kursu. Omówię wszystkie ważne zagadnienia, stworzymy kilka bardziej skomplikowanych programów itd. Na ten moment to już wszystko.

>> Urządzenia wykorzystywane w kursie pochodzą od Kamami.pl <<Kamami.pl

Podsumowanie

Bardzo dziękuję, że dotrwałeś/łaś do końca. Dowiedzieliśmy się dzisiaj: jak zainstalować raspbiana, skonfigurować go, uruchomić tryb graficzny, jak korzystać z tej dystrybucji linuksa i napisaliśmy pierwsze dwa programy w Pythonie! Jeżeli spodobał Ci się ten artykuł, proszę – udostępnij go. Jeszcze raz dziękuję firmie Kamami, dzięki której mam zaszczyt 😉 być posiadaczem Raspberry Pi oraz innych przydatnych elementów, które zapewne nie raz mi się jeszcze przydadzą. Na teraz to wszystko, zapraszam do komentowania.  🙂

 Autor: Karol Wojsław

poprzednia część  «-» kolejna część ⇒

>>> Kursy www.MechatroBot.pl <<<

Karol Wojsław

Karol Wojsław -- licealista, założyciel i redaktor Mechatrobot.pl. Interesuje się robotyką i elektroniką oraz informatyką. Z racji swojego wieku nie ma ogromnej wiedzy, ale wytrwale dąży do tego, aby artykuły, które publikuje były coraz lepsze.