Inteligentny dom #4

in polish •  6 years ago  (edited)

logo.png

W dzisiejszym wpisie spróbujmy do programu migającego diodą, dodać pewną interakcję z użytkownikiem. Będzie to początek obustronnej komunikacji z minikomputerem.
Zapraszam do wpisu!

Środowisko

Zanim jednak przejdziemy do modyfikowania pierwszego skryptu, zaopatrzmy się w dwa programy. Jeden z nich będzie naszym edytorem. Tutaj jest mnogość różnych rozwiązań, od tych darmowych, przez komercyjne.
Na komputerze domowym z Windowsem zainstalowany mam SublimeText i sprawuje się całkiem dobrze. Postanowilem również zainstalowac go na Linuxie, z którego aktualnie korzystam na delegacji.

sublime.png

Można również korzystać z wszelkich notatników, ale kolorowanie składni zdecydowanie pomaga w pisaniu skryptów i programów.

Drugim programem, który nam się przyda to WINscp dla środowiska windows i program o zbliżonych możliwościach dla niego jakim jest Filezilla, dostępna również dla Linuxa.
Program ten pozwala nam w łatwy sposób, napisany przez nas skrypt, przesłać bezpośrednio do BeagleBone (czy też maliny).

Konfiguracja tych programów jest bardzo prosta, zrzut z moich ustawień poniżej.

ustawienia .png

Porozmawiajmy!

Pierwszą rzeczą jaką możemy wprowadzić w ramach usprawnienia naszego pierwszego skryptu to możliwość definiowania ilość powtórzeń pętli. Zanim zaczniemy ją wykonywać, dodajmy następujące polecenie:

ilosc = input(" Hej! Ile raz chcesz mrugnac? ")

Funkcja ta napisze prośbę do użytkownika o podanie ilości powtórzeń przejść pętli i zapisze tą wartość w zmiennej „ilosc”.

Teraz z kolei musimy z edytować naszą pętle i zamiast wstawiać tam ilość powtórzeń w postaci liczby – wstawimy nowo powstałą zmienną.

Cały kod wygląda tak:

import Adafruit_BBIO.GPIO as GPIO
from time import sleep
LED= "P9_12"
GPIO.setup(LED, GPIO.OUT)
ilosc = input(" Hej! Ile raz chcesz mrugnac? ")

for i in range(0,ilosc):
GPIO.output(LED, GPIO.HIGH)
sleep(1)
GPIO.output(LED, GPIO.LOW)
sleep(1)

GPIO.cleanup()

Sprawdźmy jak to działa:

ile razy.png

Musicie mi uwierzyć, że dioda faktycznie mrugnęła 7 razy 😊

Co się stanie gdy zamiast liczby wstawimy jakiś inny znak?
Program zareaguje tak.

zabezpieczenie.png

W analogiczny sposób, możemy poprosić, żeby użytkownik podał czas opóźnienia. Możemy zdefiniować różne zmienne dla delaya przy świeceniu i przy zgaszeniu.

delay_on = input("Jak dlugo ma sie swiecic? ")
delay_off = input("A jak dlugo ma byc ciemno? ")

Analogicznie jak w przypadku ilosci krokow, sztywna wartosc zamieniamy na nazwe zmiennej.

import Adafruit_BBIO.GPIO as GPIO
from time import sleep
LED= "P9_12"
GPIO.setup(LED, GPIO.OUT)
ilosc = input(" Hej! Ile raz chcesz mrugnac? ")
delay_on = input("Jak dlugo ma sie swiecic? ")
delay_off = input("A jak dlugo ma byc ciemno? ")

for i in range(0,ilosc):
GPIO.output(LED, GPIO.HIGH)
sleep(delay_on)
GPIO.output(LED, GPIO.LOW)
sleep(delay_off)

GPIO.cleanup()

I naszym oczom ukazuje się taki rezultat:

ostatni.png

Podsumowanie

W taki oto sposób zmodyfikowaliśmy nasz program by moc się komunikować bezpośrednio z minikomputerem. Stad już bliska droga by robić to za pomocą np. telefonu. Uruchomiony na BB bardzo prosty serwer, na którym wgrana jest strona WWW, gdzie naciskając wirtualny przycisk jesteśmy w stanie załączać jakiś odbiornik podłączony do naszego BeagleBone.

Nie wybiegajmy jednak w przód za bardzo!
Zostało do omówienia jeszcze kilka funkcji, które są wbudowane w bibliotekę Adafruit, a które przydadzą nam się w sterowaniu inteligentnym domem.

Dziękuje za uwagę i do następnego razu!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @reinmar! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the number of posts published

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!