Skip to content

RobinDvorak/mip-raspberry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Smart Home (Raspberry Pi)

Úvod

Projekt Smart Home jsme vytvořili v rámci předmětu s názvem Minipočítače a jejich praktické aplikace. Klíčovým prvkem je Raspberry Pi model B, které nám umožňuje jednotné propojení a komunikaci s jednotlivými místnostmi. Pomocí Raspberry Pi, několika LED diod (dále jen LED) a tlačítkových spínačů jsme tedy nasimulovali „chytrou domácnost“. Jednotlivé místnosti v domácnosti je možné ovládat jak přes tlačítkové spínače, tak pomocí webového rozhraní. Domácnost se skládá z následujících místností: Koupelna, Chodba, Obývací pokoj, Ložnice a Kuchyně. Popis jednotlivých místností najdete v příslušné záložce.

Použité technologie

Pro realizaci projektu jsme použili následující technologie a knihovny:

  • Python 2
  • WebIOPi pro webové rozhraní
  • Python modul RPi.GPIO pro detekci stisknutí tlačítek

Instalace závislostí

apt-get install git python-dev python-rpi.gpio python-smbus i2c-tools python-serial minicom
tar xvzf WebIOPi-x.y.z.tar.gz
cd WebIOPi-x.y.z
./setup.sh

WebIOPi

Knihovna WebIOPi zajišťuje webový server a poskytuje REST API, které se nadefinuje v Python skriptu, který potom zpracovává REST požadavky a ovládá periferie. V internetovém prohlížeči kienta jsou REST požadavky zasílány pomocí Javascriptu.

Nastavení

Pro nastavení serveru je potřeba upravit konfigurační soubor, do kterého se zapíše cesta k Python skriptu, který beží na serveru, a také kořenová cesta k adresáři webového serveru:

webiopi -d -c /etc/webiopi/config

Pomocí následujícího příkazu se aplikace spustí po spuštění počítače:

update-rc.d webiopi defaults

Webové rozhraní poté beží na RaspberryPi (ve výchozím nastavení na portu 8000) a je možné k němu přistoupit přes lokální síť. Pro připojení je vyžadována autentizace pomocí HTTP s přihlašovacími údaji, které jsou uvedeny ve výše zmíněném konfiguračním souboru.

Serverová část

import webiopi
import RPi.GPIO

button = 15
led = 14

def setup():
    # set LED as output
    webiopi.GPIO.setFunction(L1, webiopi.GPIO.OUT)

    # setup buttons
    RPi.GPIO.setmode(RPi.GPIO.BCM)
    RPi.GPIO.setup(B1, RPi.GPIO.IN, pull_up_down=RPi.GPIO.PUD_UP)
    RPi.GPIO.add_event_detect(button, RPi.GPIO.FALLING, callback=button_clicked, bouncetime=500)

def loop():
    pass

def destroy():
    # turn off LEDS
    webiopi.GPIO.digitalWrite(led, webiopi.GPIO.LOW)

    RPi.GPIO.cleanup()

@webiopi.macro
def button_clicked(pin):
    value = webiopi.GPIO.LOW
    state = webiopi.GPIO.digitalRead(led)
    if not state:
       value = webiopi.GPIO.HIGH
    webiopi.GPIO.digitalWrite(led, value)

WebIOPi ze skriptu spoští následující funkce:

  • setup() pro nastavení perfierií při spuštění
  • loop() jako aplikační smyčku, jejíž kód probíhá neustále dokola
  • destroy() se spustí před ukončením aplikace

Ve funkci setup() se nastaví pin s LED jako výstupní pomocí webiopi.GPIO. Tlačítka se nastaví pomocí RPi.GPIO, protože má podporu pro detekci hran a je možné na ně zareagovat pomocí callbacku. Tento callback se pomocí dekorátoru @webiopi.macro zároveň nastaví jako makro, které je možné spustit z webového rozhraní. Funkce button_clicked se tedy spustí jak při stisku fyzického tlačítka tak i při kliku z webového rozhraní přes REST.

Klientská část

webiopi().ready(function() {
    // Call when button is clicked.
    webiopi().callMacro("button_clicked", [], update);
}

Na klientovi zajišťuje komunikaci s WebIOPi Javascript. Po naimportování souboru webiopi.js je možné použít výše uvedený kód pro vygenerování a odeslání REST požadavku na zavolání makra. Zavoláním funkce callMacro() dojde k REST požadavku, který zpracuje WebIOPi na serveru a spustí příslušnou funkci, která je definována v serverovém Python skriptu.

Místnosti a jejich zapojení osvětlení (LED)

Koupelna

Ložnice

Chodba

Kuchyň

Obývací pokoj

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published