javascript - 是否可以在指定的日期和时间通过网络插座触发 GPIO 引脚?
问题描述
我在我的树莓派上运行 nodejs 网络服务器,我正在构建一个网络界面,用户可以在其中输入日期和时间,根据预设时间触发 gpio 引脚。我使用 html 和 java 制作了一个简单的闹钟,但我不知道如何在闹钟初始化时将 1 和 0 发送到树莓派。
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Alarm Clock</title>
</head>
<body>
<input type="datetime-local" id="alarmTime" />
<button onclick="setAlarm(this);" id="alarmButton">Set Alarm</button>
<div id="alarmOptions" style="display: none;">
<button onclick="snooze();">Snooze 5 minutes</button>
<button onclick="stopAlarm();">Stop Alarm</button>
</div>
<script>
var alarmSound = new Audio();
alarmSound.src = 'alarm.mp3';
var alarmTimer;
function setAlarm(button) {
var ms = document.getElementById('alarmTime').valueAsNumber;
if(isNaN(ms)) {
alert('Invalid Date');
return;
}
var alarm = new Date(ms);
var alarmTime = new Date(alarm.getUTCFullYear(), alarm.getUTCMonth(), alarm.getUTCDate(), alarm.getUTCHours(), alarm.getUTCMinutes(), alarm.getUTCSeconds());
var differenceInMs = alarmTime.getTime() - (new Date()).getTime();
if(differenceInMs < 0) {
alert('Specified time is already passed');
return;
}
alarmTimer = setTimeout(initAlarm, differenceInMs);
button.innerText = 'Cancel Alarm';
button.setAttribute('onclick', 'cancelAlarm(this);');
};
function cancelAlarm(button) {
clearTimeout(alarmTimer);
button.innerText = 'Set Alarm';
button.setAttribute('onclick', 'setAlarm(this);')
};
function initAlarm() {
alarmSound.play();
document.getElementById('alarmOptions').style.display = '';
console.log("ALAAAARM");
};
function stopAlarm() {
alarmSound.pause();
alarmSound.currentTime = 0;
document.getElementById('alarmOptions').style.display = 'none';
cancelAlarm(document.getElementById('alarmButton'));
};
</script>
</body>
</html>
我试过使用
var socket = io();
window.addEventListener("load", function(){
var Alarm = document.getElementById("alarmTime");
Alarm.addEventListener("change", function() {
socket.emit("alarmTime", Number(this.checked));
这是js文件:
var http = require('http').createServer(handler);
var fs = require('fs');
var io = require('socket.io')(http)
var Gpio = require('onoff').Gpio;
var LED = new Gpio(4, 'out');
http.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/test.html', function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}
io.sockets.on('connection', function (socket) {
var lightvalue = 0;
socket.on('alarmTime', function(data) {
lightvalue = data;
if (lightvalue != LED.readSync()) {
LED.writeSync(lightvalue);
}
});
});
process.on('SIGINT', function () {
LED.writeSync(0);
LED.unexport();
pushButton.unexport();
process.exit();
});
没有任何工作。nodejs 新手
解决方案
推荐阅读
- python - 修改 sys.path 是处理项目特定模块的最佳方式吗
- python - 如何分析 PySpark 的 python worker 内存?
- javascript - 声明 javascript 常量的最佳方法
- apache-spark - 如何使用 usingColumns 在 Spark 中加入嵌套列
- jquery - 如何通过 Datatables 和 Node.js 向 JSON 添加数据?
- c# - 在主机游戏 Snake 中保存/加载 Snake 位置
- javascript - Console.log 不输出 json
- sql - PL/SQL 性能优化 - 根据记录更改计算总和和微分
- java - 如何在 Java 中计算共现矩阵?
- liferay-7 - 如何找出我拥有的 Liferay 7.0 或 7.1 版本