Jual alat otomatis

Kamis, 26 Juni 2014

TUTORIAL JASPTER TO EXECUTE GPIO

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
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
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"]
     message = random.choice(messages)
     mic.say(message)
     pi = pigpio.pi()
     pi.write(18, 1)
def isValid(text):
    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 python
import RPi.GPIO as GPIO ## Import GPIO Library
import 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 numTimes
        print "Iteration " + str(i+1) ##Print current loop
        GPIO.output(7, True) ## Turn on GPIO pin 7
        time.sleep(speed) ## Wait
        GPIO.output(7, False) ## Switch off GPIO pin 7
        time.sleep(speed) ## Wait
    print "Done" ## When loop is complete, print "Done"
    GPIO.cleanup()
## ON OFF Function
def 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 numbering
   GPIO.setup(7, GPIO.OUT) ## Setup GPIO pin 7 to OUT
   type = ''
   try:
      opts, args = getopt.getopt(argv,"i:p:h",['input=', 'params=', 'help'])
   except getopt.GetoptError:
      print 'Wrong command'
      sys.exit(2)
   print opts,args
   for opt, arg in opts:
      if opt == '-h':
         print 'test.py -i <inputfile> -o <outputfile>'
         sys.exit()
      elif opt in ("-i", "--ifile"):
         input = arg
         if 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 input
if 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 parameters
Blink(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'