首页 > 解决方案 > Raspberry Node-js GPIO 控制

问题描述

我想在按钮打开的情况下打开 GPIO4 上的 LED。但什么也没有发生。日志不会显示任何内容。我想我未能打开函数或编写函数。

var http = require('http');
var Gpio = require('onoff').Gpio;

var LED = new Gpio(4, 'out');


var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<button onclick="LEDon()">ON</button>');
    res.write('<button onclick="LEDoff()">OFF</button>');
    function LEDon(){
        LED.writeSync(1);
        console.log('1');
    }
    
    function LEDoff(){
        LED.writeSync(0);
        console.log('2');
    }
  res.end();
}).listen(8080);

标签: javascriptnode.jsraspberry-pinode-modules

解决方案


您好,欢迎来到 SO,

试试这个:

var http = require('http');
var HttpDispatcher = require('httpdispatcher');
var Gpio = require('onoff').Gpio;

var dispatcher = new HttpDispatcher();

var LED = new Gpio(4, 'out');

function handleRequest(request, response){
    try {
        // log the request on console
        console.log(request.url);
        // Dispatch
        dispatcher.dispatch(request, response);
    } catch(err) {
        console.log(err);
    }
}  

dispatcher.onGet('/', function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(`
        <form action="/on" method="post">
            <input type="submit" value="On" />
        </form>
    `);


    res.write(`
        <form action="/off" method="post">
            <input type="submit" value="Off" />
        </form>
    `);
});

dispatcher.onPost('/on', function(req, res) {
    LED.writeSync(1);
    console.log('1');
});

dispatcher.onPost('/off', function(req, res) {
    LED.writeSync(0);
    console.log('2');
});

http.createServer(handleRequest).listen(8080);

您还需要httpdispatcher通过运行安装包 npm i httpdispatcher --save

您的代码无法正常工作的原因是因为您试图通过浏览器调用节点中的函数,而这无法直接调用,所以在这里我们通过一些表单来执行此操作,并将调用发布到 HTTP 服务器,然后触发您的 GPIO 函数。


推荐阅读