Arduino不接受脚本的输入

时间:2017-10-25 00:53:50

标签: php python arduino raspberry-pi

我正在使用带有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);

这里有趣的是三件事。

  1. 有时候,当我回声时,我得到了许多.的回复(这证明我与Arduino建立了某种联系)。
  2. 当我运行脚本时,L和TX指示灯会在Arduino上闪烁。
  3. 蓝灯无法开启。
  4. 有人看到我在这里失踪了吗?任何意见都表示赞赏。

    编辑:

    由于Python似乎是Arduino / Raspberry Pi社区的首选语言,我尝试编写这个Python脚本应该与PHP一样。结果相同,灯不亮。如果你是一个Python人,这可以帮助你看到这里的错误,请伸出援助之手:D

    import serial
    ser = serial.Serial('/dev/ttyACM0',9600)
    ser.write(str('b'))
    print ser.readline()
    

2 个答案:

答案 0 :(得分:0)

为我修复的是我没有运行minicom。现在我已经在屏幕上运行了。

minicom -b 9600 -o -D /dev/ttyACM0

答案 1 :(得分:0)

我认为实际的问题是,每次打开串口时Arduino板都会被重置,因为RTS和DTR信号用于自动复位,假设您没有使用Leonardo板。这意味着当您发送' b'从您的脚本中,因为在自动重置和发送' b'之间没有足够的时间。因此从未收到过。即使在IDE中打开串行监视器,也会发生相同的重置。它起作用的原因是因为当你打开串行监视器窗口并输入字母' b'然后按回车键,电路板很快就会复位,并急切地等待您的输入。

有几种方法可以处理这个问题,而无需单独运行minicom实例,这可能会导致问题,例如在脚本中打开端口后添加延迟(可能不是最好的解决方案,但是有用)。我建议阅读this问题,以便更好地处理它。