Python PC到Arduino串行通信

Python PC到Arduino串行通信,python,serial-port,arduino,Python,Serial Port,Arduino,我对Python和Arduino都是新手。如果你需要更多的信息,告诉我 我想做的是: 我想用arduino控制一些伺服系统。我想在PClater RPi的GUI中更改伺服的角度,并通过串行通信将其发送到Arduino 我的Arduino代码如下所示: #include <Servo.h> int angle; int pinServo1 = 5; Servo servo1; int min = 0.547; int max = 2.47; voi

我对Python和Arduino都是新手。如果你需要更多的信息,告诉我

我想做的是: 我想用arduino控制一些伺服系统。我想在PClater RPi的GUI中更改伺服的角度,并通过串行通信将其发送到Arduino

我的Arduino代码如下所示:

#include <Servo.h> 

int angle;
int pinServo1 = 5;
Servo servo1;       
int min = 0.547;    
int max = 2.47;     

void setup()
{
   Serial.begin(9600);
   pinMode(pinServo1,OUTPUT);   
   servo1.attach(pinServo1,min,max);        
}

void loop()
{
   if(Serial.available() > 0)
      {
        Serial.read();
        angle = Serial.parseInt();
        servo1.write(angle);
      }
}
我得到了这个错误:

Enter new angle:
90
Traceback (most recent call last):
  File "C:/Users/yoogibubu/Desktop/STUDIUM/BACHELORARBEIT/GUI/send.py", line 10, in <module>
    arduino.write(angle)
  File "C:\Program Files (x86)\PYTHON\lib\site-packages\serial\serialwin32.py", line 283, in write
data = to_bytes(data)
  File "C:\Program Files (x86)\PYTHON\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
    b.append(item)  # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required
>>>    

有人能告诉我怎么了吗?提前谢谢你

serial.write需要一个字节数组数据类型参数。对于发送字符串,必须首先将其转换为字节数组,尤其是在Python3.x中,因为字符串是使用Unicode存储的,这使得事情比简单的字符数组更复杂

请尝试以下操作:

arduino.write(angle.encode())

您应该能够直接编写此循环:

但问题在于Servor1.attach。您的伺服最小值和最大值应为最小值和最大值脉冲宽度的int值,以美国为单位,而不是毫秒。这用于映射读取结果

您可能想要一些类似于:

#include <Servo.h> 

int angle;
int pinServo1 = 5;
Servo servo1;       
int min = 547; //in us - BTW 1000 would be safer but servo has less range    
int max = 2470;  //in us - BTW 2000 would be safer  

void setup()
{
   Serial.begin(9600);
   pinMode(pinServo1, OUTPUT);   
   servo1.attach(pinServo1, min, max);        
}

void loop()
{
   if(Serial.available() > 0)
      {
        angle = Serial.read();
        servo1.write(angle);
      }
}

我正在使用python 3.4.1
arduino.write(angle.encode())
void loop()
{
   if(Serial.available() > 0)
      {
        angle = Serial.read();
        servo1.write(angle);
      }
}
#include <Servo.h> 

int angle;
int pinServo1 = 5;
Servo servo1;       
int min = 547; //in us - BTW 1000 would be safer but servo has less range    
int max = 2470;  //in us - BTW 2000 would be safer  

void setup()
{
   Serial.begin(9600);
   pinMode(pinServo1, OUTPUT);   
   servo1.attach(pinServo1, min, max);        
}

void loop()
{
   if(Serial.available() > 0)
      {
        angle = Serial.read();
        servo1.write(angle);
      }
}