所以我试图为我的电脑制作一个照明系统,我想在Python中编写GUI和诸如此类的东西来处理灯光和Arduino的所有控制。经过一些研究,PySerial似乎是最容易使用和理解自己成为初学者。老实说,我不知道我在这里做了什么,而且我得到的错误是我无法诊断出来的,谷歌也没有任何帮助。
这是我现在在python中运行的代码:
import serial
ser = serial.Serial('COM8', 9600) # Establish the connection on a specific port
while True:
numIn = str(input("Enter a Color value: "))
ser.write(numIn)
print (ser.readline())
在Arduino方面,我有:
void setup ()
{
Serial.begin (9600);
Serial.println ("Ready\n\n");
}
void loop ()
{
int intensity = 0;
while (Serial.available() == 0)
while (Serial.available() > 0)
{
char byteIn = Serial.read();
intensity += int(byteIn) - '0';
Serial.print(byteIn);
}
}
通过Python我将发送一个0到255之间的值,该数字应保存为字符串,然后发送到Arduino,然后逐个字符地创建一个整数。出于调试原因,我想将字符串回显给Python,但我还没有让我的代码运行到目前为止。我尝试将数据从Python发送到Arduino的方式有些什么,这是我得到的Trace:
Enter a Color value: 25
Traceback (most recent call last):
File "C:\Users\Squirrelzar\Documents\Python Proj\Arduino Serial Testing.py", line 10, in <module>
ser.write(numIn)
File "C:\Python34\lib\site-packages\serial\serialwin32.py", line 283, in write
data = to_bytes(data)
File "C:\Python34\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
我使用Python 3.4和PySerial 2.7
任何帮助都会非常感激。我很失落..
答案 0 :(得分:1)
您可以从python发送整数值作为字符串,并使用Serial.parseInt()
将其直接在Arduino中作为整数读取。下一个代码适用于我(linux,python 2.7):
的Python:
import serial
ser = serial.Serial('/dev/ttyACM1', 9600)
print (ser.readline())
while True:
numIn = raw_input("Enter a Color value: ") # Returns the value as string
ser.write(numIn)
msg = ser.readline()
print (msg)
Arduino的:
void setup ()
{
Serial.begin (9600);
Serial.print ("Ready\n");
}
void loop ()
{
while(Serial.available())
{
int inNumber = Serial.parseInt(); # retunrs the first valid long integer buffered
Serial.print(inNumber);
Serial.print('\n');
}
}
评论,如果你发送Serial.println ("Ready\n\n");
,你必须在阅读其他数据之前阅读所有新行字符