import webiopi import time import wiringpi def getServoDutyForWebIOPi(val): val_min = 0.0 val_max = 1.0 servo_min = 0 servo_max = 1024 duty = int((servo_max-servo_min)*(val-val_min)/(val_max-val_min) + servo_min) return duty wiringpi.wiringPiSetupGpio() # GPIO名で番号指定 wiringpi.pinMode(18, wiringpi.GPIO.PWM_OUTPUT) # PWM出力ポートはGPIO-18 wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS) # 周波数固定 wiringpi.pwmSetClock(2) # 18750/9kHz=2 wiringpi.pwmWrite(18, 61) # 初期値 x=92、duty=61 GPIO = webiopi.GPIO # デバッグ出力を有効に webiopi.setDebug() # WebIOPiの起動時に呼ばれる関数 def setup(): webiopi.debug("Script with macros - Setup") GPIO.setFunction(23, GPIO.OUT) GPIO.setFunction(24, GPIO.OUT) GPIO.setFunction(20, GPIO.OUT) GPIO.setFunction(21, GPIO.OUT) GPIO.digitalWrite(23, GPIO.LOW) GPIO.digitalWrite(24, GPIO.LOW) GPIO.digitalWrite(20, GPIO.LOW) GPIO.digitalWrite(21, GPIO.LOW) # WebIOPiにより繰り返される関数 def loop(): webiopi.sleep(5) # WebIOPi終了時に呼ばれる関数 def destroy(): webiopi.debug("Script with macros - Destroy") GPIO.setFunction(23, GPIO.IN) GPIO.setFunction(24, GPIO.IN) GPIO.setFunction(20, GPIO.IN) GPIO.setFunction(21, GPIO.IN) GPIO.setFunction(18, GPIO.IN) # 各種のマクロ処理 @webiopi.macro def rightON(): GPIO.digitalWrite(23, True) @webiopi.macro def rightOFF(): GPIO.digitalWrite(23, False) @webiopi.macro def leftON(): GPIO.digitalWrite(24, True) @webiopi.macro def leftOFF(): GPIO.digitalWrite(24, False) @webiopi.macro def point1ON(): GPIO.digitalWrite(20, True) @webiopi.macro def point1OFF(): GPIO.digitalWrite(20, False) @webiopi.macro def point2ON(): GPIO.digitalWrite(21, True) @webiopi.macro def point2OFF(): GPIO.digitalWrite(21, False) # PWMにデューティー比をセットするためのマクロ # commandIDは、iOSのSafariでPOSTがキャッシュされることへの対策 @webiopi.macro def setHwPWM(duty, commandID): duty = getServoDutyForWebIOPi(float(duty)) wiringpi.pwmWrite(18, duty)