我正在尝试从NodeJS控制Arduino。
我已经尝试过 Duino ,我知道设备已准备就绪,调试器显示命令已经发送到Arduino,但没有任何反应。
我还尝试了 Johnny-Five ,它显示设备已连接(在COM8上),但on ready
事件从未被触发。
请帮忙! 感谢..
答案 0 :(得分:3)
我或许可以帮助你,你必须更具体地了解你真正想做的事情?
您想阅读数据吗?你想远程控制吗?
修改强> 我也使用Node来控制Arduino但是我没有使用Duino也没有使用Johnny-Five,因为它不适合我的项目。
相反,我在计算机和机器人之间建立了自己的通信协议。在Arduino上,代码很简单。它检查串行是否可用,如果可用,则读取并存储缓冲区。使用switch
或if/else
我然后选择我希望机器人执行的动作(向前移动,向后移动,闪烁等等)
通过发送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
}
}
}
}
}
在节点方面,你会有类似的东西:(查看serialport 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]));
}
希望它有所帮助!