我正在尝试从 NodeJS 控制 Arduino。
我已经尝试过Duino,我知道设备已准备就绪,并且调试器显示命令已成功发送到 Arduino,但没有任何反应。
我也试过Johnny-Five,它显示设备已连接(在 COM8 上),但该on ready
事件从未被触发。
请帮忙!谢谢..
我正在尝试从 NodeJS 控制 Arduino。
我已经尝试过Duino,我知道设备已准备就绪,并且调试器显示命令已成功发送到 Arduino,但没有任何反应。
我也试过Johnny-Five,它显示设备已连接(在 COM8 上),但该on ready
事件从未被触发。
请帮忙!谢谢..
我也许可以帮助您,因为您必须更具体地了解您真正想做的事情?
你想读取数据吗?你想远程控制它吗?
编辑: 我也使用 Node 来控制 Arduino,但我没有使用 Duino 或 Johnny-Five,因为它们不适合我的项目。
相反,我在我的计算机和我的机器人之间建立了自己的通信协议。
在 Arduino 上,代码很简单。它检查串行是否可用,如果可用,则读取并存储缓冲区。使用 aswitch
或if/else
然后我选择我希望我的机器人执行的动作(向前移动、向后移动、闪烁 LED 等)
通信是通过发送bytes
而不是人类可读的动作进行的。所以你要做的第一件事就是想象两者之间的一个小接口。Bytes
很有用,因为在 Arduino 方面,您不需要任何转换,并且它们可以很好地与. 一起使用switch
,而字符串则不是这样。
在 Arduino 方面,您将拥有类似的东西:(请注意,您需要在DATA_HEADER
某处声明)
void readCommands(){
while(Serial.available() > 0){
// Read first byte of stream.
uint8_t numberOfActions;
uint8_t recievedByte = Serial.read();
// If first byte is equal to dataHeader, lets do
if(recievedByte == DATA_HEADER){
delay(10);
// Get the number of actions to execute
numberOfActions = Serial.read();
delay(10);
// Execute each actions
for (uint8_t i = 0 ; i < numberOfActions ; i++){
// Get action type
actionType = Serial.read();
if(actionType == 0x01){
// do you first action
}
else if(actionType == 0x02{
// do your second action
}
else if(actionType == 0x03){
// do your third action
}
}
}
}
}
在节点方面,您将拥有类似的东西:(查看串行端口 github以获取更多信息)
var dataHeader = 0x0f, //beginning of the data stream, very useful if you intend to send a batch of actions
myFirstAction = 0x01,
mySecondAction = 0x02,
myThirdAction = 0x03;
sendCmdToArduino = function() {
sp.write(Buffer([dataHeader]));
sp.write(Buffer([0x03])); // this is the number of actions for the Arduino code
sp.write(Buffer([myFirstAction]));
sp.write(Buffer([mySecondAction]));
sp.write(Buffer([myThirdAction]));
}
希望能帮助到你!