【问题标题】:Arduino not accepting input from scriptArduino不接受来自脚本的输入
【发布时间】:2017-10-25 00:53:49
【问题描述】:

我正在使用带有 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. 有时,当我回显时,我会收到一些.s(这证明我正在与 Arduino 建立某种联系)。
  2. 当我运行脚本时,Arduino 上的 L 和 TX 灯闪烁。
  3. 蓝光不亮。

有人看到我在这里缺少什么吗?任何意见表示赞赏。

编辑:

由于 Python 似乎是 Arduino/Raspberry Pi 社区的首选语言,我尝试编写这个 Python 脚本,它应该与 PHP 脚本做同样的事情。结果是一样的,灯不亮。如果您是 Python 人,这可以帮助您了解这里出了什么问题,请伸出援助之手:D

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

【问题讨论】:

    标签: php python arduino raspberry-pi


    【解决方案1】:

    为我解决的问题是我没有运行 minicom。现在我已经在屏幕中运行了。

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

    【讨论】:

      【解决方案2】:

      我认为实际问题是每次打开串行端口时都会重置 Arduino 板,因为 RTS 和 DTR 信号用于自动重置,假设您没有使用 Leonardo 板。这意味着当您从脚本发送“b”时,电路板仍在重置,因为在自动重置和发送“b”之间没有足够的时间,因此永远不会收到。即使您在 IDE 中打开串行监视器,也会发生相同的重置。它起作用的原因是,当您打开串行监视器窗口并输入字母“b”并按回车时,板子早已重置并急切地等待您的输入。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多