javascript - 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);
解决方案
您好,欢迎来到 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 函数。
推荐阅读
- powershell - Powershell 预览保持自动连接到 Cloud shell
- java - 在 Java Swing 的 for 循环中创建延迟
- sql-server - 在 SQL Server 中将列从一个表复制到另一个表
- r - 为什么 R 会产生不正确的 AIC 和 BIC
- javascript - 绑定存储模型时无法使用没有 viewModel 的绑定配置
- reactjs - React Table 单元格值对应于在另一个单元格中选择的单选按钮
- javascript - 通过脚本编辑器创建的谷歌电子表格的自定义菜单调用谷歌表单并通过弹出/模式打开它
- python - 如何将带有 JSON 数据的文件上传到 django rest api?
- python - 如何更新 JSON 文件?
- python - 如何通过 pd.read_csv 和 chunks 量化大 CSV 文件的读取进度?