Python Arduino串口通讯不兼容问题

Python Arduino Serial communication incompatibility problem

我正在尝试使用串行端口从 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.read 给你 byte ,你需要把它转换成 char 来比较。

尝试

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

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

那么你可以使用if条件as

if (X == 1)

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