我正在使用带有Raspberry Pi的Arduino运行简单的PHP / Python脚本。 Arduino代码非常简单。如果我发信给' b',蓝灯会亮起来:
void loop() {
char inputMessage = Serial.read();
if (inputMessage == 'b')
digitalWrite(2, HIGH);
else
digitalWrite(2, LOW);
// Just so there's some output
Serial.println('.');
delay(1000);
当我使用Arduino IDE的串行监听功能测试时,当我进入' b'时,蓝灯会亮起。成功。但是,我试图通过我的Raspberry Pi上的PHP脚本来控制它,这不起作用。脚本如下所示:
$comPort = "/dev/ttyACM0";
$fp = fopen($comPort, "w+");
fwrite($fp, "b");
echo fread($fp, 10);
fclose($fp);
这里有趣的是三件事。
.
的回复(这证明我与Arduino建立了某种联系)。有人看到我在这里失踪了吗?任何意见都表示赞赏。
编辑:
由于Python似乎是Arduino / Raspberry Pi社区的首选语言,我尝试编写这个Python脚本应该与PHP一样。结果相同,灯不亮。如果你是一个Python人,这可以帮助你看到这里的错误,请伸出援助之手:D
import serial
ser = serial.Serial('/dev/ttyACM0',9600)
ser.write(str('b'))
print ser.readline()
答案 0 :(得分:0)
为我修复的是我没有运行minicom。现在我已经在屏幕上运行了。
minicom -b 9600 -o -D /dev/ttyACM0
答案 1 :(得分:0)
我认为实际的问题是,每次打开串口时Arduino板都会被重置,因为RTS和DTR信号用于自动复位,假设您没有使用Leonardo板。这意味着当您发送' b'从您的脚本中,因为在自动重置和发送' b'之间没有足够的时间。因此从未收到过。即使在IDE中打开串行监视器,也会发生相同的重置。它起作用的原因是因为当你打开串行监视器窗口并输入字母' b'然后按回车键,电路板很快就会复位,并急切地等待您的输入。
有几种方法可以处理这个问题,而无需单独运行minicom实例,这可能会导致问题,例如在脚本中打开端口后添加延迟(可能不是最好的解决方案,但是有用)。我建议阅读this问题,以便更好地处理它。