mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
parent
7950b7d39a
commit
363bb55b26
@ -23,8 +23,10 @@ These can be any spare valid Pi GPIO pins. e.g.
|
|||||||
|
|
||||||
7,11
|
7,11
|
||||||
|
|
||||||
|
You can also set the repeat frequency of measurements - default 0.5 seconds.
|
||||||
|
|
||||||
Outputs a `msg.payload` with a number representing the range in cm.
|
Outputs a `msg.payload` with a number representing the range in cm.
|
||||||
|
|
||||||
Produces one measure every 0.5s - but only if the distance is different from the previous reading.
|
Produces one measure every 0.5s (by default) - but only if the distance is different from the previous reading.
|
||||||
|
|
||||||
**Note:** we are using the actual physical pin numbers on connector P1 as they are easier to locate.
|
**Note:** we are using the actual physical pin numbers on connector P1 as they are easier to locate.
|
||||||
|
@ -15,6 +15,7 @@ GPIO.setwarnings(False)
|
|||||||
ECHO = 0
|
ECHO = 0
|
||||||
TRIGGER = 0
|
TRIGGER = 0
|
||||||
OLD = 0
|
OLD = 0
|
||||||
|
SLEEP = 0.5
|
||||||
|
|
||||||
def Measure():
|
def Measure():
|
||||||
start = 0
|
start = 0
|
||||||
@ -48,13 +49,14 @@ def Measure():
|
|||||||
# Main program loop
|
# Main program loop
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
pins = sys.argv[1].lower().split(',')
|
pins = sys.argv[1].lower().split(',')
|
||||||
if len(pins) != 2:
|
if len(pins) != 3:
|
||||||
print "Bad number of pins supplied"
|
print "Bad parameters supplied"
|
||||||
print pins
|
print pins
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
TRIGGER = int(pins[0])
|
TRIGGER = int(pins[0])
|
||||||
ECHO = int(pins[1])
|
ECHO = int(pins[1])
|
||||||
|
SLEEP = float(pins[2])
|
||||||
|
|
||||||
GPIO.setmode(GPIO.BOARD) # Use GPIO BOARD numbers
|
GPIO.setmode(GPIO.BOARD) # Use GPIO BOARD numbers
|
||||||
GPIO.setup(TRIGGER, GPIO.OUT) # Trigger
|
GPIO.setup(TRIGGER, GPIO.OUT) # Trigger
|
||||||
@ -72,7 +74,7 @@ if len(sys.argv) > 1:
|
|||||||
if distance != OLD:
|
if distance != OLD:
|
||||||
print(distance)
|
print(distance)
|
||||||
OLD = distance
|
OLD = distance
|
||||||
time.sleep(0.5)
|
time.sleep(SLEEP)
|
||||||
except: # try to clean up on exit
|
except: # try to clean up on exit
|
||||||
print("0.0");
|
print("0.0");
|
||||||
GPIO.cleanup(TRIGGER)
|
GPIO.cleanup(TRIGGER)
|
||||||
@ -81,5 +83,5 @@ if len(sys.argv) > 1:
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
print "Bad params"
|
print "Bad params"
|
||||||
print " sudo nrsrf.py trigger_pin,echo_pin"
|
print " sudo nrsrf.py trigger_pin,echo_pin,rate_in_seconds"
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name" : "node-red-node-pisrf",
|
"name" : "node-red-node-pisrf",
|
||||||
"version" : "0.0.5",
|
"version" : "0.1.0",
|
||||||
"description" : "A Node-RED node for a Raspberry Pi to use a SRF04 or SRF05 range finder",
|
"description" : "A Node-RED node for a Raspberry Pi to use a SRF04 or SRF05 range finder",
|
||||||
"dependencies" : {
|
"dependencies" : {
|
||||||
},
|
},
|
||||||
|
@ -4,11 +4,14 @@
|
|||||||
<label for="node-input-pins"><i class="fa fa-circle"></i> Pins</label>
|
<label for="node-input-pins"><i class="fa fa-circle"></i> Pins</label>
|
||||||
<input type="text" id="node-input-pins" placeholder="Trigger,Echo">
|
<input type="text" id="node-input-pins" placeholder="Trigger,Echo">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-pulse"><i class="fa fa-clock-o"></i> Repeat (S)</label>
|
||||||
|
<input type="text" id="node-input-pulse" placeholder="time between readings">
|
||||||
|
</div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-input-topic"><i class="fa fa-bars"></i> Topic</label>
|
<label for="node-input-topic"><i class="fa fa-bars"></i> Topic</label>
|
||||||
<input type="text" id="node-input-topic" placeholder="optional topic">
|
<input type="text" id="node-input-topic" placeholder="optional topic">
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
||||||
<input type="text" id="node-input-name" placeholder="Name">
|
<input type="text" id="node-input-name" placeholder="Name">
|
||||||
@ -20,7 +23,7 @@
|
|||||||
<script type="text/x-red" data-help-name="rpi-srf">
|
<script type="text/x-red" data-help-name="rpi-srf">
|
||||||
<p>Raspberry Pi input from an SRF04 or SRF05 ultrasonic range finder.</p>
|
<p>Raspberry Pi input from an SRF04 or SRF05 ultrasonic range finder.</p>
|
||||||
<p>Outputs a <code>msg.payload</code> with a number representing the range in cm.</p>
|
<p>Outputs a <code>msg.payload</code> with a number representing the range in cm.</p>
|
||||||
<p>Produces one measure every 0.5s - but only if the distance is different from the previous reading.</p>
|
<p>Produces one measurement every 0.5s (default) - but only if the distance is different from the previous reading.</p>
|
||||||
<p><b>Note:</b> we are using the actual physical pin numbers on connector P1 as they are easier to locate.</p>
|
<p><b>Note:</b> we are using the actual physical pin numbers on connector P1 as they are easier to locate.</p>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -31,6 +34,7 @@
|
|||||||
defaults: {
|
defaults: {
|
||||||
name: { value:"" },
|
name: { value:"" },
|
||||||
topic: { value:"SRF" },
|
topic: { value:"SRF" },
|
||||||
|
pulse: {value:"0.5" },
|
||||||
pins: { value:"", required:true, validate:RED.validators.regex(/^\d+,\d+$/) }
|
pins: { value:"", required:true, validate:RED.validators.regex(/^\d+,\d+$/) }
|
||||||
},
|
},
|
||||||
inputs:0,
|
inputs:0,
|
||||||
|
@ -26,12 +26,13 @@ module.exports = function(RED) {
|
|||||||
RED.nodes.createNode(this, n);
|
RED.nodes.createNode(this, n);
|
||||||
this.topic = n.topic;
|
this.topic = n.topic;
|
||||||
this.pins = n.pins;
|
this.pins = n.pins;
|
||||||
|
this.pins += ","+(n.pulse || 0.5);
|
||||||
var node = this;
|
var node = this;
|
||||||
|
|
||||||
if (node.pins !== undefined) {
|
if (node.pins !== undefined) {
|
||||||
node.child = spawn(gpioCommand, [node.pins]);
|
node.child = spawn(gpioCommand, [node.pins]);
|
||||||
node.running = true;
|
node.running = true;
|
||||||
if (RED.settings.verbose) { node.log("pin: " + node.pins + " :"); }
|
if (RED.settings.verbose) { node.log("parameters: " + node.pins + " :"); }
|
||||||
|
|
||||||
node.child.stdout.on('data', function(data) {
|
node.child.stdout.on('data', function(data) {
|
||||||
if (RED.settings.verbose) { node.log("out: " + data + " :"); }
|
if (RED.settings.verbose) { node.log("out: " + data + " :"); }
|
||||||
@ -59,7 +60,7 @@ module.exports = function(RED) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
node.error("Invalid GPIO pins: " + node.pin);
|
node.error("Invalid Parameters: " + node.pins);
|
||||||
}
|
}
|
||||||
|
|
||||||
var wfi = function(done) {
|
var wfi = function(done) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user