【问题标题】:Python doesen't communicate with Arduino over SerialPython 不通过串行与 Arduino 通信
【发布时间】:2019-05-20 23:03:56
【问题描述】:

我试图用 python 向我的 Arduino 发送一些串行数据并点亮一个 LED 灯,通过 Arduino IDE 的串行监视器它工作正常,但是一旦我尝试通过 Python 代码执行它,它就不会了不工作

这是 Arduino 代码:


int LED = 7;
char serialData;

void setup() {
  pinMode(LED, OUTPUT); 
  Serial.begin(9600);
}

void loop() {

  serialData = Serial.read();


if(serialData == '1'){
  digitalWrite(LED, HIGH);
}

if(serialData == '2'){
  digitalWrite(LED, LOW);
}

}

这是 Python 代码:

import serial
import time

ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM5'

time.sleep(10)

ser.write("1")

现在,当我启动 python 代码时,它应该做的是将“1”通过 Serial 发送到 Arduino,Arduino 应该接收它并点亮 LED。

【问题讨论】:

  • 也许你必须使用ser.flush()来发送它。
  • @furas 不,也不起作用
  • 您可以尝试在 digitalWrite(LED, HIGH)digitalWrite(LED, LOW)if 语句中添加延迟 (delay(10)) 吗?

标签: python arduino serial-port


【解决方案1】:

我认为您的 Arduino 代码很好,只是您只需等到您在串行端口中获得一些输入(行 serialData = Serial.read();)。如果这是有意的,那很好,但如果不是,你应该考虑检查Serial.available()

主要问题在于 Python 代码。如pyserial documentation中所述,需要打开串口。此外,您应该考虑在代码末尾关闭它(您不必担心是否使用with 打开串行端口,如here 所述)。

我添加了一个 for 语句,以便您可以看到 Arduino 上的闪烁。

import serial
import time

ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM5'

ser.open()

for i in range(10):
    ser.write("1")
    time.sleep(1)
    ser.write("2")
    time.sleep(1)

ser.close()

【讨论】:

  • 这对我也不起作用,据我了解,python 应该看起来像这样,带有“with”import serial import time with ser = serial.Serial('COM5', 9600) ser.open() ser.flush() ser.write("1") time.sleep(1000)
  • 不,应该是with open(serial.Serial('COM5', 9600)) as ser:,之后没有ser.open()。我在 Arduino Mega 上运行了这段代码,它运行良好。你的板子是什么?如果您可以在没有 Python 通信的情况下仅闪烁 Arduino 板上引脚 7 上的 LED,您能否报告一下?
  • 这有点用,我现在可以使用 off python off 代码将其关闭,但我的其他文件除了数字之外完全一样不会影响它。
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多