#3 Kurs Raspberry Pi – programowanie w Pythonie i C

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

Witaj w trzeciej części kursu Raspberry Pi. Wiemy już czym jest RPI, jak je obsługiwać, poznaliśmy Raspbiana, teraz czas rozpocząć prawdziwe programowanie! Omówimy dzisiaj, podstawy Pythona, a także C. Z racji iż sam kurs nie zakłada nauki języków programowania, może Ci się przydać wiedza z kursu Arduino –> Kurs programowania Arduino (C/C++)

Do zrozumienia tego artykułu przyda Ci się również informacje z poprzedniego odcinka, dlatego warto abyś przed rozpoczęciem czytania, zapoznał się z tamtą częścią (http://www.mechatrobot.pl/rasp2/). Jeżeli nie chcesz przegapić kolejnych artykułów koniecznie obserwuj nasz profil na facebooku! 🙂


Programowanie w Pythonie – krótki wstęp

Python to język skryptowy, interpretowany – oznacza to, że najpierw piszemy skrypt, a następnie wykonujemy go za pomocą interpretera. Jest to język wyjątkowo łatwy w nauce, lecz mimo to bardzo potężny. Nie będę w tym kursie mocno omawiał samego Pythona, lub języka C, gdyż założeniem było ogólne przedstawienie Raspberry. Zajmiemy się tylko najważniejszymi i potrzebnymi aspektami tego zagadnienia. Zacznijmy może od napisania prostego programu i krótkim omówieniu co i jak.

baner11

import time

import os

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(2,GPIO.OUT)

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)

time.sleep(1)

print("GPIO2 - stan: OFF")

GPIO.output(2,GPIO.LOW)

time.sleep(1)

Jest to kod z poprzedniej części, jednak teraz rozbijemy sobie go na poszczególne elementy i omówimy co robią. Zaczynamy od pierwszych trzech linijek:

import time
import os
import RPi.GPIO as GPIO

Korzystając z „import time„, importujemy bibliotekę, która pozwoli nam na korzystanie z opcji opóźnienia czasowego, import os importuje bibliotekę odpowiedzialną za różne ciekawe funkcje związane z systemem, natomiast „import RPi.GPIO as GPIO„, analogicznie do poprzednich linijki, importuje bibliotekę pozwalającą na sterowanie pinami GPIO. Następna sekcja programu odpowiada za wstępne ustawienia:

Dzięki GPIO.setmode jesteśmy w stanie ustawić, w jaki sposób chcemy numerować piny. Mamy dwie opcje:

  1. GPIO.setmode(GPIO.BCM) – numery pinów, które podajemy w programie odnoszą się tylko do wyjść GPIO, oznacza to, że pisząc w kodzie „2”, mamy na myśli „GPIO2”, które (w modelu Pi 2 B) jest realnie na 3 pinie. (obrazek poniżej)

Raspberry-Pi-GPIO-Layout-Model-B-Plus-rotated-2700x900-1024x341

2. GPIO.setmode(GPIO.BOARD) – piny numerowane są według realnego położenia na płytce, czyli na przykład pisząc w kodzie „3” mamy na myśli pin „GPIO2”.

GPIO.setwarnings(False)

Funkcja ta powoduje, że program ignoruje wszystkie ostrzeżenia wysłane przez system.  To trochę zamiatanie ewentualnego problemu pod dywan ale obsługa komunikatów wysyłanych przez system jest bardzo złożona, dlatego tak na razie będzie lepiej.

GPIO.setup(2,GPIO.OUT)

Ustawiamy pin 2 jako wyjście, jeżeli chcielibyśmy, aby było to wejście wystarczy, abyśmy zminili „GPIO.OUT”, na „GPIO.IN.”

print("Jest aktualnie:")
os.system('date')
print("Rozpoczynam dzialanie programu")
print("Port GPIO2 ustawiony jako wyjscie...)")

print(„tekst”)” pozwala wyświetlić w konsoli dany komunikat, w tym wypadku wyświetlone zostanie „Rozpoczynam dzialanie programu”, natomiast os.system(‚date’) wyświetla w konsoli aktualną datę ustawioną w RPI.

while True:
  print("GPIO2 - stan: ON")
  GPIO.output(2,GPIO.HIGH)
  time.sleep(1)
  print("GPIO2 - stan: OFF")
  GPIO.output(2,GPIO.LOW)
  time.sleep(1)

„While True:” moglibyśmy porównać do pętli loop w Arduino, wszystko co jest tu zapisane będzie wykonywało się ciągle. W drugiej linijce ponownie znajdujemy, omówiony już „print”, a następnie „GPIO.output(2,GPIO.HIGH), co oczywiście włącza stan wysoki na pinie drugim, natomiast „Time.sleep(1)” oznacza sekundową przerwę.

Znamy dopiero garstkę, podstawowych elementów składowych Pythona, ale już teraz przejdziemy do pisania trochę bardziej skomplikowanego kodu. Oto i nasz nowy mini projekt do omówienia:

Program (Python)

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(2,GPIO.IN)
GPIO.setup(3,GPIO.OUT)
GPIO.setup(4,GPIO.OUT)

while True:
if(GPIO.input(2)==LOW):
    GPIO.output(3,GPIO.LOW)
    GPIO.output(4,GPIO.LOW)

if(GPIO.input(2)==HIGH):
    print("Stan (Pin 3 i 4): ON")
    GPIO.output(3,GPIO.HIGH)
    GPIO.output(4,GPIO.HIGH)
    time.sleep(5)
    print("Stan (Pin 3 i 4): OFF")

time.sleep(1)

Jak możecie się domyślać, program ten spowoduje, że po kliknięciu w przycisk, diody na pinie 3 i 4 zaświecą się na pięć sekund, po czym zgasną. Program jak i schemat nie powinny sprawiać problemów, aczkolwiek efekt jest na tyle zadowalający, że możemy się nazwać „programistami raspberry”. 😀

Uruchomienie programu

 Jak już wiemy z poprzedniej części, uruchomienie naszego skryptu jest banalnie proste. 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 nasz program powinien zacząć się wykonywać!

Programowanie w C – krótki wstęp

Dla tych, którzy albo nie przepadają za Pythonem, albo wolą poważniejsze programowanie przygotowałem, krótki rozdzialik w kursie, z którego dowiecie się jak zabrać się za programowanie Raspberry w C. Samego języka omawiać nie będę – trochę informacji znajdziecie w kursie programowanie Arduino – C/C++. Pokaże tylko jak utworzyć i uruchomić kod w RPI. Zaczynamy od sprawdzenia wersji kompilatora gcc, wpisując do konsoli: gcc v

Jako odpowiedź powinna nam się pojawić taka informacja:

gcc version 4.6.3 (Debian 4.6.3-14+rpi1)

Teraz gdy wiemy, że mamy kompilator nie pozostało nam nic innego jak zacząć kodować. Rozpoczynamy od utworzenia folderu program, a w nim plik program.c:

mkdir Program 
cd Program
nano program.c

W tym momencie powinna otworzyć nam się w konsoli aplikacja nano, dzięki której napiszemy pierwszy program w C. Teraz wpisujemy:

#include <stdio.h> 
int main() 
{ 
    printf("Witaj programisto Raspberry!\n"); 
    return  0; 
}

Jeżeli wszystko mamy już przepisane, klikamy „Ctrl + O” (= zapisz jako), następnie klikamy enter i „Ctrl” + „z”, co spowoduje, że zapiszemy kod i wyjdziemy z edytora. Teraz musimy zbudować, czyli skompilować nasz program. Aby to zrobić wystarczy wpisać:

gcc -o program program.c

Poinformuje to nasze Raspberry, że chcemy skompilować kod z pliku program.c do pliku program, który w tym momencie stanie się prostą aplikacją. Nie pozostaje nam teraz nic innego jak tylko uruchomić nasze „dzieło”:

./program

W tym momencie w naszej konsoli powinien wyświetlić się efekt naszej pracy, czyli napis „Witaj programisto Raspberry!”. Jeżeli Ci się udało, to gratuluję! 😀 Oczywiście nie zalecałbym edytora nano do tworzenia bardziej skompilowanych programów, aczkolwiek w tym przypadku nada się idealnie. Dzięki temu przykładowi możesz teraz wybrać, czy wolisz programować w C, czy też w Pythonie.

baner11

Podsumowanie

Bardzo dziękuję, że dotrwałeś/łaś do końca. Dowiedzieliśmy się dzisiaj jak mniej więcej wygląda programowanie w Pythonie, oraz w C i jak się za to zabrać, kiedy korzystamy z Malinki! 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ęść ⇒

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *