【问题标题】:Python Arduino Serial communication incompatibility problemPython Arduino 串口通讯不兼容问题
【发布时间】:2019-05-13 21:51:33
【问题描述】:

我正在尝试使用串行端口将一些整数值从 Python 发送到 Arduino,Python 代码似乎可以正常工作,因为我看到 Ardunio 板上的 TX LED 闪烁,但连接到第 12 个引脚的 LED 仍然不亮起来,Arduino 代码似乎也在工作,因为当我打开 Arduino IDE 的串行端口并发送“1”时,LED 会亮起,所以我认为 Python 发送的数据与 Arduino 类型之间存在某种不兼容期待。 Python代码:

ser = serial.Serial('COM3', 9600)
time.sleep(1)
ser.write('1'.encode())

Arduino 代码:

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

void loop() {
int X;
if (Serial.available()>0)
{
  X = Serial.read();
  if(X == '1')
  {
    digitalWrite(12,HIGH);
    }
  else if(X == '0')
  {
    digitalWrite(12,LOW);
    }
}
}

所以我的问题是:

1)_代码中的问题似乎是什么?

2)_Arduino 期望从串口获取什么类型的数据?

3)_将超过 255 的整数值从 Python 发送到 Arduino 的最佳方法是什么?这是正确的方法吗?

ser = serial.Serial('COM3', 9600)
S = 102
time.sleep(1)
data = [int(x)for x in str(S)]
for d in data:
    c = bytes(str(d), "ascii")
    ser.write(c)

【问题讨论】:

  • 尝试做一个Serial.write(X)并在python中读回它...也尝试使用Serial.readString ...我认为Serial.read得到的是ord('1')或48 ..其中readString 得到“1”(也许......)
  • 所以我尝试用 Python 读回数据,我发送的内容我读回 b'\xff' 但是当我在 Python 中用 Serial.readString() 读回它时,我读回 b'-\ r'
  • @JoranBeasley 先生您怎么看?
  • 嗯,这个周末我可能有机会拿出我的 arduino 并试一试...提醒我坐下(你知道如何联系我(通过各种渠道))
  • 我会提醒你先生,谢谢。@JoranBeasley

标签: python-3.x serial-port arduino-uno


【解决方案1】:

我认为你搞砸了类型 Serial.read 为您提供 byte ,您需要将其转换为 char 进行比较。

试试

   X = atoi((char)Serial.read())

读取字节 -> 将其转换为 char -> 转换为 int

那么你可以使用 if 条件为

if (X == 1)

【讨论】:

    【解决方案2】:

    我将脚本开头的X定义为char,问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多