mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
126 lines
3.9 KiB
Python
126 lines
3.9 KiB
Python
|
#
|
||
|
# Copyright 2014 IBM Corp.
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
#
|
||
|
|
||
|
# Import library functions we need
|
||
|
import RPi.GPIO as GPIO
|
||
|
import sys
|
||
|
|
||
|
bounce = 20 # bounce time in mS to apply
|
||
|
|
||
|
if len(sys.argv) > 1:
|
||
|
cmd = sys.argv[1].lower()
|
||
|
pin = int(sys.argv[2])
|
||
|
GPIO.setmode(GPIO.BOARD)
|
||
|
GPIO.setwarnings(False)
|
||
|
|
||
|
if cmd == "pwm":
|
||
|
#print "Initialised pin "+str(pin)+" to PWM"
|
||
|
GPIO.setup(pin,GPIO.OUT)
|
||
|
p = GPIO.PWM(pin, 100)
|
||
|
p.start(0)
|
||
|
|
||
|
while True:
|
||
|
try:
|
||
|
data = raw_input()
|
||
|
if data == "close":
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
p.ChangeDutyCycle(float(data))
|
||
|
except EOFError: # hopefully always caused by us sigint'ing the program
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
except Exception as ex:
|
||
|
print "bad data: "+data
|
||
|
|
||
|
if cmd == "buzz":
|
||
|
#print "Initialised pin "+str(pin)+" to Buzz"
|
||
|
GPIO.setup(pin,GPIO.OUT)
|
||
|
p = GPIO.PWM(pin, 100)
|
||
|
p.stop()
|
||
|
|
||
|
while True:
|
||
|
try:
|
||
|
data = raw_input()
|
||
|
if data == "close":
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
elif float(data) == 0:
|
||
|
p.stop()
|
||
|
else:
|
||
|
p.start(50)
|
||
|
p.ChangeFrequency(float(data))
|
||
|
except EOFError: # hopefully always caused by us sigint'ing the program
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
except Exception as ex:
|
||
|
print "bad data: "+data
|
||
|
|
||
|
elif cmd == "out":
|
||
|
#print "Initialised pin "+str(pin)+" to OUT"
|
||
|
GPIO.setup(pin,GPIO.OUT)
|
||
|
if len(sys.argv) == 4:
|
||
|
GPIO.output(pin,int(sys.argv[3]))
|
||
|
|
||
|
while True:
|
||
|
try:
|
||
|
data = raw_input()
|
||
|
if data == "close":
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
data = int(data)
|
||
|
except EOFError: # hopefully always caused by us sigint'ing the program
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
except:
|
||
|
data = 0
|
||
|
if data != 0:
|
||
|
data = 1
|
||
|
GPIO.output(pin,data)
|
||
|
|
||
|
elif cmd == "in":
|
||
|
#print "Initialised pin "+str(pin)+" to IN"
|
||
|
def handle_callback(chan):
|
||
|
print GPIO.input(chan)
|
||
|
|
||
|
if len(sys.argv) == 4:
|
||
|
if sys.argv[3].lower() == "up":
|
||
|
GPIO.setup(pin,GPIO.IN,GPIO.PUD_UP)
|
||
|
elif sys.argv[3].lower() == "down":
|
||
|
GPIO.setup(pin,GPIO.IN,GPIO.PUD_DOWN)
|
||
|
else:
|
||
|
GPIO.setup(pin,GPIO.IN)
|
||
|
else:
|
||
|
GPIO.setup(pin,GPIO.IN)
|
||
|
print GPIO.input(pin)
|
||
|
GPIO.add_event_detect(pin, GPIO.BOTH, callback=handle_callback, bouncetime=bounce)
|
||
|
|
||
|
while True:
|
||
|
try:
|
||
|
data = raw_input()
|
||
|
if data == "close":
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
except EOFError: # hopefully always caused by us sigint'ing the program
|
||
|
GPIO.cleanup(pin)
|
||
|
sys.exit(0)
|
||
|
|
||
|
elif cmd == "rev":
|
||
|
print GPIO.RPI_REVISION
|
||
|
|
||
|
elif cmd == "ver":
|
||
|
print GPIO.VERSION
|
||
|
|
||
|
else:
|
||
|
print "Bad parameters - {in|out|pwm} {pin} {value|up|down}"
|