我试图通过串口控制和接收来自我的arduino的数据(串口= USB。我不想使用以太网屏蔽,因为我将USB连接到XBEE设备)。 / p>
经过研究,我似乎相信最好的方法将是javascript(从arduino上读取数据时,PHP似乎有问题)。
目前我正在尝试使用Processing来与arduino进行交互。
我从一个简单的脚本开始,从arduino读取传感器数据,从处理(Java)运行时工作正常。当我尝试通过网络浏览器导出到视图(通过在处理中使用javascript)时,除了传感器数据本身外,我在浏览器中看到了所有内容。
我的理解(更像是猜测)是由于某种原因,从Web浏览器调用COM端口时不会打开(可能是安全问题?)。 PC(WIN7)和MAC(OSX)都会出现相同的现象。
非常感谢帮助!
以下是代码:(注释已删除)
import processing.serial.*;
Serial myPort;
int xPos = 1;
void setup () {
size(400, 300);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil('\n');
background(0);
}
void draw () {
}
void serialEvent (Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);
stroke(127,34,255);
line(xPos, height, xPos, height - inByte);
if (xPos >= width) {
xPos = 0;
background(0);
}
else {
xPos++;
}
}
}
答案 0 :(得分:1)
这可能会避免这个问题,但听起来你需要在设备和HTTP服务之间实现一层分离。
您可以使用node.js或PC上的某些内容编写基本HTTP服务,并对数据请求进行仲裁,以便不从浏览器直接向设备发出请求。
有意义的是,浏览器会严格控制客户端对硬件接口的JS访问,如果这确实是你正在尝试的那样。
答案 1 :(得分:1)
正如Drew R指出的那样,你可以通过Serial读取一个快速的“服务器”应用程序来读取Arduino数据,然后通过HTTP将其广播到你需要的地方。
我建议您查看cosm,它可能会为您做一些工作,并为您构建的Arduino设备提供一个很好的js API。 另请查看他们的examples。
答案 2 :(得分:1)
您是否考虑使用ser2net或Windows Serial Proxy之类的内容?在机器上运行它以将串口代理到TCP端口,然后在Javascript中使用WebSockets与它通信。
某种服务器层可能是最好的解决方案,但如果您打算在JS中完成所有操作,我认为这是可行的方法。