
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
This plain JavaScript module is generic and only rely on system's sysfs.
Please consider other (more mature) gpio libraries out there which support better your hardware,
For instance, of you're looking for a reliable way to communicate with the Raspberry Pi using JavaScript, check out the wiring-pi JavaScript library. It provides direct bindings to the fully-featured Wiring Pi C library.
But if you want/need a generic lightweight module, this one can be used as fallback.
Following hardware was reported to work (with some limitations or workarounds)
Get node.js for your SBC, If using Debian or deviates (Raspbian for RPi), you can simply run: sudo apt-get install nodejs
otherwise, install from node or compile it
This library is an npm package, just define "gpio" in your package.json dependencies or
npm install gpio
Note: you must be have proper privileges to access the GPIO headers (or run node as root).
var gpio = require("gpio");
// Calling export with a pin number will export that header and return a gpio header instance
var gpio4 = gpio.export(4, {
// When you export a pin, the default direction is out. This allows you to set
// the pin value to either LOW or HIGH (3.3V) from your program.
direction: gpio.DIRECTION.OUT,
// set the time interval (ms) between each read when watching for value changes
// note: this is default to 100, setting value too low will cause high CPU usage
interval: 200,
// Due to the asynchronous nature of exporting a header, you may not be able to
// read or write to the header right away. Place your logic in this ready
// function to guarantee everything will get fired properly
ready: function() {
}
});
If you plan to set the header voltage externally, use direction in
and read value from your program.
var gpio = require("gpio");
var gpio4 = gpio.export(4, {
direction: gpio.DIRECTION.IN,
ready: function() {
}
});
// sets pin to high
gpio4.set();
// sets pin to low (can also call gpio4.reset())
gpio4.set(0);
// Since setting a value happens asynchronously, this method also takes a
// callback argument which will get fired after the value is set
gpio4.set(function() {
console.log(gpio4.value); // should log 1
});
gpio4.set(0, function() {
console.log(gpio4.value); // should log 0
});
// unexport program when done
gpio4.unexport();
This library uses node's EventEmitter which allows you to watch for value changes and fire a callback.
// bind to the "change" event
gpio4.on("change", function(val) {
// value will report either 1 or 0 (number) when the value changes
console.log(val)
});
// you can bind multiple events
var processPin4 = function(val) { console.log(val); };
gpio4.on("change", processPin4);
// unbind a particular callback from the "change" event
gpio4.removeListener("change", processPin4);
// unbind all callbacks from the "change" event
gpio4.removeAllListeners("change");
// you can also manually change the direction anytime after instantiation
gpio4.setDirection(gpio.DIRECTION.OUT);
gpio4.setDirection(gpio.DIRECTION.IN);
var gpio = require("gpio");
var gpio22, gpio4, intervalTimer;
// Flashing lights if LED connected to GPIO22
gpio22 = gpio.export(22, {
ready: function() {
intervalTimer = setInterval(function() {
gpio22.set();
setTimeout(function() { gpio22.reset(); }, 500);
}, 1000);
}
});
// Lets assume a different LED is hooked up to pin 4, the following code
// will make that LED blink inversely with LED from pin 22
gpio4 = gpio.export(4, {
ready: function() {
// bind to gpio22's change event
gpio22.on("change", function(val) {
gpio4.set(1 - val); // set gpio4 to the opposite value
});
}
});
// reset the headers and unexport after 10 seconds
setTimeout(function() {
clearInterval(intervalTimer); // stops the voltage cycling
gpio22.removeAllListeners('change'); // unbinds change event
gpio22.reset(); // sets header to low
gpio22.unexport(); // unexport the header
gpio4.reset();
gpio4.unexport(function() {
// unexport takes a callback which gets fired as soon as unexporting is done
process.exit(); // exits your node program
});
}, 10000)
Demos on Raspberry Pi:
FAQs
Talk to your Raspberry PI's general purpose inputs and outputs
The npm package gpio receives a total of 58 weekly downloads. As such, gpio popularity was classified as not popular.
We found that gpio demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.