WiringPi / WiringPi-Node

Node.js bindings to wiringPi
333 stars 94 forks source link

wiringPiISR as non root #63

Closed paulish closed 7 years ago

paulish commented 7 years ago

The documentation states that

wiringPiISR method can be called as non root

This function will work in any mode, and does not need root privileges to work.

At the same time a call to this method fails until setup() which in its turn requires root privileges. wiringPiSetup and friends have this in the documentation and my own tests shows that this is true.

This function needs to be called with root privileges.

So how to be if running the node as root is not an option? And what is the benefit in allowing to call wiringPiISR as non root if it requires initialization as root?

paulish commented 7 years ago

Sorry, my fault: wiringPiSetupSys can be called as non-root.

Please close this issue.

TheNotary commented 7 years ago

I was having some trouble getting it working in non-root mode as well. Based on the docs. I eventually realized I had overlooked ensuring that "the GPIO pins have been exported before-hand using gpio program."

Here's code for non-root

/* 
  Pins:

  black wire  = header 6  = ground    
  orange wire = header 11 = wpi 0 = BCM 17
  yellow      = header 13 = wpi 2
  red         = header 15 = wpi 3
*/

// Setup GPIO pins...
var exec = require('child_process').exec;
var cmd = 'gpio export 0 in && gpio export 2 in && gpio export 3 in';

exec(cmd, function(error, stdout, stderr) {
    // command output is in stdout
    //console.log(error);
    console.log(stdout);
    console.log(stderr);
});

var wpi = require('wiring-pi');
wpi.setup('sys');

var pin = 17; // header 11 or wpi 0 as entered to gpio utility

wpi.pinMode(pin, wpi.INPUT);
wpi.pullUpDnControl(pin, wpi.PUD_UP)

var value = wpi.digitalRead(pin);

console.log("The pin state was: " + value);

edit: err... well the wpi code should actually be placed within that system call function to ensure it occurs sequentially, but the above provides the gist without having to store the export pins as a separate configuration in your system orchestration software.