Javascript 从raspberry pi Web服务器发送CAN总线消息
我们正在建造一个应该通过网络控制的漫游者。它由十几个分工的arduino组成。一个专用于语音命令和文本语音转换,两个用于控制超声波传感器阵列,等等 为了广播信息,以便其他元件可以读取和使用他们需要的任何信息,我们决定使用can总线系统。问题位于接口和pi的can帽之间 工作: -具有php构建接口的Pi Web服务器:可访问且工作正常。 -名为can_send的Pi c文件可执行文件,接收两个参数(id和消息)并驱动can帽。 -Arduino can读卡器,一种通用的Arduino,在我们的PC串行监视器上输出它接收的can消息。它可以工作,通过在Pi上启动can_send,它可以获得正确的信息 非工作: -在Web服务器上,在没有刷新或页面的情况下,我们应该单击一个按钮并执行can_send脚本 我们最初的想法是: PHP界面->按钮点击->javascript函数->执行shell\u exec的PHP文件 我们现在在这里感到震惊。不知道我们是在挖坟墓,还是离成功还有一步之遥 Web界面上的按钮:Javascript 从raspberry pi Web服务器发送CAN总线消息,javascript,php,raspberry-pi,webserver,can-bus,Javascript,Php,Raspberry Pi,Webserver,Can Bus,我们正在建造一个应该通过网络控制的漫游者。它由十几个分工的arduino组成。一个专用于语音命令和文本语音转换,两个用于控制超声波传感器阵列,等等 为了广播信息,以便其他元件可以读取和使用他们需要的任何信息,我们决定使用can总线系统。问题位于接口和pi的can帽之间 工作: -具有php构建接口的Pi Web服务器:可访问且工作正常。 -名为can_send的Pi c文件可执行文件,接收两个参数(id和消息)并驱动can帽。 -Arduino can读卡器,一种通用的Arduino,在我们的P
javascript函数(在网页顶部声明)
此时,单击按钮后,我们将看到一个警报窗口,其中包含我们想要的正确值。
问题是:
-ajax函数不调用php脚本或不发送值(我们尝试使用一个简单的表单,在can_传输上使用相同的值和$_POST,结果成功)
即使使用表单,我们也无法通过shell exec进行操作(通过控制台,脚本可以发送作品,但不能使用shell exec)。在这里,我们尝试查看fileexist的路径是否正确,以及具有完整路径或相对路径的bot是否工作。找到了解决方案。我一到家就把它寄出去。一些js和ajax错误,一个缺少脚本,以及缺少权限(www数据运行传输代码)。
function cantxedx() {
var x = new XMLHttpRequest();
x.open("GET", "../SCRIPTS/can_transmission.php?id=15&msg=001" + document.getElementbyId('myRangeThr'), true);
x.send();
return false;
}
</script>
//can_transmission.php
$TXmsgid= $_GET['id'];
$TXmsg= $_GET['msg'];
//formattazione stringa
$wordsize = sizeof($TXmsg);
if($wordsize<8)
{
while($wordsize<8)
{
$TXmsg= $TXmsg . "0";
$wordsize = sizeof($TXmsg);
}
}
if($wordsize>8)
{
//placeholder for building long messages
}
$TXstring= "sudo /var/www/html/SCRIPTS/c/can_send ".$TXmsgid." ".$TXmsg;
$handle = fopen("log.txt", "a+");
fwrite($handle, $TXstring);
fclose($handle);
shell_exec($TXstring);
?>
<div align='center'>
<p>THROTTLE</p>
</div>
<div class='slidecontainerv'>
<input type='range' min='5' max='100' step='5' value='50' class='sliderv' id='myRangeThr' orient='vertical' width='500'>
</div>
<div align='center'>
<p>Value: <span id='throttle'></span>%</p>
</div>
function cantxebw(jdir) {
var jid = '10';
var slider = document.getElementById('myRangeThr');
var vt = slider.value;
var vtx = jid + jdir + vt;
alert(vtx);
$.ajax({
url: '../SCRIPTS/can_transmission.php',
type: 'POST',
data: {'id':'jid', 'msg':'vtx'},
success: function(data) {
console.log(data); // Inspect this in your console
}
});
};
</script> ";