簡體   English   中英

使用Node.js的Raspberry Pi 3 B型上的GPIO

[英]GPIO over Raspberry Pi 3 model B using Node.js

我正在嘗試使用樹莓派3 B型來閃爍LED,

我已經在我的機器上安裝了所有必需的模塊,即npm,nodejs,pi-gpio(修復了微小的更改以檢測gpio)

代碼是:

var gpio = require("pi-gpio");

gpio.open(16, "output", function(err) {     
gpio.write(16, 1, function() {          
        gpio.close(16);                     
    });
});
//reading the data on the pin i.e pin : 16 
gpio.open(16, "output", function (err) {
    gpio.read(16, function (err, value) {
         console.log("Data is "+ value);
         gpio.close(16);
    });
});

但是上面的代碼在運行時會引發錯誤,

節點app.js

錯誤: 嘗試打開16針時出錯gpio-admin:無法將數據刷新到/ sys / class / gpio / export:設備或資源繁忙

提前致謝

我可以在其中看到電路圖和代碼的任何鏈接。

關注:我不想更改平台,即node.js

我正在使用的pi-gpio是: https : //github.com/rakeshpai/pi-gpio

pi-gpio只是在后台寫入GPIO設備,因此您可以跳過node.jspi-gpio並手動執行相同操作以進行測試。

例:

gpio.open(16, ...
# is the same as writing in terminal:
echo 16 > /sys/class/gpio/export

... "output" ...
# is the same as writing in terminal:
echo "out" > /sys/class/gpio/gpio16/direction

等等

首先,嘗試重新啟動Pi,看看是否可以解決此問題。

如果那沒有幫助,請嘗試以根用戶身份手動關閉/取消導出該引腳,然后重新運行腳本。

# unexport the pin as root in case something's holding on to it
sudo echo 16 > /sys/class/gpio/unexport

以下命令基本上構成了pi-gpio API。 這些行就是您要在Shell腳本中放置以控制GPIO的內容。 首先按照我編寫它們的順序在沒有sudo的情況下對其進行測試,如果它們不起作用,請嘗試使用sudo。 如果它們仍然不起作用,我認為您在布線/硬件方面有問題,或者需要在其他地方更改某些系統設置。

# unexport the pin
sudo echo 16 > /sys/class/gpio/unexport

# export it again
sudo echo 16 > /sys/class/gpio/export

# make it an output
sudo echo "out" > /sys/class/gpio/gpio16/direction

# write a HIGH - is the LED on now?
sudo echo 1 > /sys/class/gpio/gpio16/value

# read the value of the pin - is it 1 after writing a 1 to the pin?
cat /sys/class/gpio/gpio16/value

# write a LOW - did it turn off?
sudo echo 0 > /sys/class/gpio/gpio16/value

讓我們使用“ rpio”模塊代替“ pi-gpio”。

https://github.com/jperkin/node-rpio

它在Pi3,零等上正常工作。

由於pi-gpio已經修復了舊的和新的sysPath(issue# https://github.com/rakeshpai/pi-gpio

但這取決於quick2wire-gpio-admin lib。

在quick2wire-gpio-admin中需要很小的修復

git clone https://github.com/quick2wire/quick2wire-gpio-admin.git
cd quick2wire-gpio-admin

src/gpio-admin.c具有

int size = snprintf(path, PATH_MAX, "/sys/devices/virtual/gpio/gpio%u/%s", pin, filename);

用。。。來代替 :

int size = snprintf(path, PATH_MAX, GPIO_CLASS_PATH "gpio%u/%s", pin, filename);

然后轉到cd quick2wire-gpio-admin目錄

然后sudo make uninstall

sudo make install

然后運行正常。

的代碼如下:(文件名:blinking12.js)

var gpio = require("pi-gpio");

var intervalId;
var durationId;
var gpioPin = 12;

gpio.open(gpioPin, "output", function (err) {

    var on =1 ;
    console.log("GPIO pin "+gpioPin+" is open toggling LED every 100mS for 10s");

    intervalId = setInterval( function () {
        gpio.write(gpioPin, on, function () {
            on = (on  + 1)% 2;
        }); 
    }, 100);
});

    durationId = setTimeout (function () {
        clearInterval(intervalId);
        clearTimeout(durationId);
        console.log('10 seconds blinking completed');
        gpio.write(gpioPin, 0, function () {
            gpio.close(gpioPin);
        //process.exit(0);  
    }); 
}, 10000);

運行代碼:

node blinking12.js

在我的機器上輸出:

GPIO pin 12 is open toggling LED every 100mS for 10s
10 seconds blinking completed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM