Hello world
Jakiś czas temu @fervi pisał o tym w jaki sposób wygląda znane i lubiane hello world w języku PHP. Jako, że python podobnie jak PeHap jest językiem skryptowym, wypisanie takiego prostego komunikatu, będącego pierwszym krokiem w programowaniu jest bajecznie proste i zawiera się w jednej linii
print(”Hello World!”)
Jednak, moje wpisy związane z inteligentnym domem to przede wszystkim programowanie systemów embedded, dlatego też pokażę Wam różnicę w “elektronicznym” hello world, między pythonem a najbardziej popularnym językiem do kodzenia mikroprocesorów jakim jest C.
Migaj tak jak Ci każe!
Jeśli zaczynasz swoją przygodę z programowaniem mikroprocesorów, zazwyczaj pierwsze ćwiczenie dotyczy migania diodą. Jest to typowy hello world dla przyszłego programisty embedded. Całość tego zagadnienia składa się z następujących czynnośći:
- import odpowiedniej biblioteki
- ustawienie wybranego pinu jako wyjścia
- wystawienie na nim potencjału na określony czas
- wyłączenie napięcia
- zapętlenia dwóch ostatnich kroków.
Dla języka C, w którym chcemy zaprogramować mikroprocesor, kod ten przybierze mniej więcej taką strukturę:
#include <avr/io.h>
#include <util/delay.h>
int main(void){ }
DDRC |= (1<<PC7);
while(1){
PORTC &= ~(1<<PC7);
_delay_ms(1000);
PORTC |= (1<<PC7);
_delay_ms(1000);
Bez wgryzania się w szczegóły, dzieje się mniej więcej tutaj to co opisałem w punktach wyżej.
Dla porównania, równoważny kod napisany w Pythonie to następujące linijki:
Import Adafriut_BBIO.GPIO as GPIO
From time import sleep LED=”P9_12” GPIO.setup(LED, GPIO.OUT) For I in range(0,10):
GPIO.output(LED, GPIO.HIGH)
Sleep(1)
GPIO.output(LED, GPIO.LOW)
Sleep(1)
GPIO.cleanup()
Jak widzicie, kod jest delikatnie krótszy do tego wydaje się mniej skomplikowany. Spróbujmy rozgryźć co się dzieje w poszczególnych liniach.
Import Adafriut_BBIO.GPIO as GPIO
W pierwszej linii importujemy bibliotekę, która pozwala na sterowanie stanami na poszczególnych pinach i skracamy jej dość długą nazwę przypisując do niej skrót GPIO. Biblioteka ta jest bardzo zbliżona do tej używanej w Rasberry dlatego też ewentualna przesiadka z BB powinna być łatwa.
From time import sleep
Z biblioteki time importujemy funkcje sleep, która pozwoli nam wprowadzać opóźnienia.
LED=”P9_12”
Tutaj zmieniamy domyślną numerację pinu na taką nazwę, którą nam będzie łatwiej operować.
GPIO.setup(LED, GPIO.OUT)
Czwarta linijka to zdefiniowanie pinu, który wcześniej wybraliśmy, tak że ma on być wyjściem.
For I in range(0,10):
W tym miejscu programu inicjujemy pętle, która według naszych założeń ma zrobić 10 powtórzeń.
GPIO.output(LED, GPIO.HIGH)
Ta linijka to ustawienie stanu wysokiego na pinie.
Sleep(1)
Z kolei ta komenda służy do wywołania opóźnienia w programie. Wartość wpisana tutaj w liczbach mówi na ile sekund stan wywołany wcześniej pozostanie niezmieniony.
GPIO.output(LED, GPIO.LOW)
Kolejna punkt, zbliżony do tego z linii numer 6 oznacza wyłączenie napięcia na pinie
Sleep(1)
Opóźnienie po raz kolejny.
W taki o to sposób napisaliśmy elektroniczny hello world. Teraz musimy go w jakiś sposób zaimplementować do komputera. Możemy zrobić to bezpośrednio z poziomu naszego BB. Logujemy się przez terminal, wchodzimy do folderu, np. desktop:
i wpisujemy:
nano migacz.py
Tworzymy w ten sposób plik. Wklejamy do niego zawartość, którą przed chwilą napisaliśmy i zapisujemy klikając ctrl+o. Potwierdzamy nazwę i plik został zapisany.
Po podłączeniu diody tak jak na poniższym zdjęciu:
musimy jeszcze tylko uruchomić nasz plik.
Wchodzimy przez terminal do folderu gdzie jest nasz skrypt, możemy sobie wylistować jego zawartość by być pewnym, że on się tam znajduje.
ls
I wpisujemy polecenie
python migacz.py
Jeśli wszystko przebiegło pomyślnie nasz układ powinien zacząć migać 😊
Podsumowanie
W tym wpisie pokazałem Wam, jak w łatwy sposób można kontrolować za pomocą języka skryptowego, jakim jest Python, wyjścia w komputerze beagle bone. W kolejnym wpisie udoskonalimy trochę nasz skrypt by poznać inne tajniki i w pewien sposób zacząć łączyć sterowanie pinami komputera z danymi, które będą pobierane z zewnątrz. Już teraz serdecznie zapraszam! 😊
Jak zawsze propsuje
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Dziękuję :) chociaż przyznam że trochę koślawy mi ten post wyszedł.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Kurde mega ciekawe to jest :) chociaż wciąż dla mnie to czarna magia, choć już mniejsza :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ciesze sie, ze zaciekawilem :) Krok po kroku a nauczymy sie tego :) Polecam probowac!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit