diambil dari web http://hendrakusumah.ilearning.me/?p=65 untuk dokumentasi saya pribadi.
Saya sudah berhasil menambahkan beberapa percakapan atau modul tambahan untuk jasper. Dan karena jasper ini dibuat untuk Raspberry Pi yang mempunyai GPIO (General Purpose Input Output) yang bisa saya fungsikan sebagai input atau output layaknya pada sebuah mikrokontroler. Maka terlintas ide untuk menggunakan framework pintar ini untuk mengendalikan benda yang ada di sekitar saya.
Untuk langkah pertama saya coba untuk menyalakan led melalui GPIO 18 pada raspberry pi, lalu saya coba untuk membuat module pada jasper dengan tambahan koding untuk memanggil GPIO tersebut.
Pada saat jasper sedang aktif pada saat saya bilang “LED on” saya ingin jasper merespon dengan”I will turned on the LED for you but don’t forget to turn it off again”.
Module “LED on” pun bisa saya panggil dan jasper pun merespon dengan kalimat yang saya buat, namun Led yang saya pasang pada GPIO 18 tidak mau menyala dan jasper pun menambahkan kalimat “I have some trouble with that operation”.
Setelah saya telisik ternyata untuk mengeksekusi perintah-perintah yang bersangkutan dengan GPIO dibutuhkan previlege sebagai root/sudo. Dan jasper berjalan sebagai user biasa pada linux.
Petualangan baru saya di google pun saya mulai. Karena jasper menggunakan bahasa pemrograman python maka saya mencari library python untuk mengeksekusi GPIO tanpa menggunakan “sudo”. Dan petualangan saya berakhir ke libary pigpio.
Saya lakukan instalasi library pigpio untuk raspberry pi saya dengan langkah-langkah:
pi@raspberry ~ $wget abyz.co.uk/rpi/pigpio/pigpio.zip
pi@raspberry ~ $unzip pigpio.zip
pi@raspberry ~ $cd PIGPIO
pi@raspberry ~ $make
pi@raspberry ~ $make install
pi@raspberry ~ $unzip pigpio.zip
pi@raspberry ~ $cd PIGPIO
pi@raspberry ~ $make
pi@raspberry ~ $make install
Setelah berhasil saya install maka saya kembali membuat membuat module tambahan untuk jasper dengan menambahkan library pigpio tersebut, dan berikut adalah coding sampel untuk “Ledon.py”:
import random
import re
import pigpio
import re
import pigpio
WORDS = ["LED", "ON"]
def handle(text, mic, profile):
messages = ["I will turned on the LED for you but don't forget to turn it off again"]
messages = ["I will turned on the LED for you but don't forget to turn it off again"]
message = random.choice(messages)
mic.say(message)
pi = pigpio.pi()
pi.write(18, 1)
mic.say(message)
pi = pigpio.pi()
pi.write(18, 1)
def isValid(text):
return bool(re.search(r’\bled on\b’, text, re.IGNORECASE))
return bool(re.search(r’\bled on\b’, text, re.IGNORECASE))
setelah itu saya simpan data tersebut, lalu saya memastikan modul pigpio selalu berjalan di background setiap kali saya menyalakan Raspberry Pi saya dengan menggunakan perintah:
pi@raspberry ~ $ crontab -e
pada crontab saya menambahkan satu baris perintah yaitu:
@reboot sudo pigpiod;
Setelah itu saya restart Jasper. Dan Voila Led sudah bisa saya nyalakan dengan kata-kata “LED on” pada Jasper.
Atau script python
#! /usr/bin/env pythonimport RPi.GPIO as GPIO ## Import GPIO Libraryimport time ## Import 'time' library. Allows us to use 'sleep'import sys, getopt#GPIO.cleanup()GPIO.setwarnings(False)## Define function named Blink()def Blink(numTimes, speed):for i in range(0,numTimes): ## Run loop numTimesprint "Iteration " + str(i+1) ##Print current loopGPIO.output(7, True) ## Turn on GPIO pin 7time.sleep(speed) ## WaitGPIO.output(7, False) ## Switch off GPIO pin 7time.sleep(speed) ## Waitprint "Done" ## When loop is complete, print "Done"GPIO.cleanup()## ON OFF Functiondef Switch(power):if power:GPIO.output(7, True)print 'lamp on'else:GPIO.output(7, False)GPIO.cleanup()print 'lamp off'def main(argv):GPIO.cleanup()GPIO.setmode(GPIO.BOARD) ## Use BOARD pin numberingGPIO.setup(7, GPIO.OUT) ## Setup GPIO pin 7 to OUTtype = ''try:opts, args = getopt.getopt(argv,"i:p:h",['input=', 'params=', 'help'])except getopt.GetoptError:print 'Wrong command'sys.exit(2)print opts,argsfor opt, arg in opts:if opt == '-h':print 'test.py -i <inputfile> -o <outputfile>'sys.exit()elif opt in ("-i", "--ifile"):input = argif input == 'switch' :#print opts,args[0]if args[0] == 'on':Switch(True)elif args[0] == 'off':Switch(False)else:print 'Please choose on or off'elif input == 'blink':## Prompt user for inputif len(args)==2 :iterations = args[0]speed = args[1]else:iterations = raw_input("Enter the total number of times to blink: ")speed = raw_input("Enter the length of each blink in seconds: ")## Start Blink() function. Convert user input from strings to numeric data types and pass to Blink() as parametersBlink(int(iterations),float(speed))## Start Blink() function. Convert user input from strings to numeric data types and pass to Blink() as parameters#if __name__ == "__main__":try:main(sys.argv[1:])except:GPIO.cleanup()print 'error in main block'
http://goo.gl/HL22LW
BalasHapus