我从Arduino的发送整数值,使用pyserial Arduino的代码,阅读它Python是:阅读来自Arduino的整数使用pyserial
Serial.write(integer)
而且pyserial是:
ser=serial.Serial ('com3',9600,timeout =1)
X=ser.read(1)
print(X)
但不打印除空格外的任何东西 有谁知道如何读取从Python中的arduino传入的整数?
我从Arduino的发送整数值,使用pyserial Arduino的代码,阅读它Python是:阅读来自Arduino的整数使用pyserial
Serial.write(integer)
而且pyserial是:
ser=serial.Serial ('com3',9600,timeout =1)
X=ser.read(1)
print(X)
但不打印除空格外的任何东西 有谁知道如何读取从Python中的arduino传入的整数?
您可能需要使用一个开始位。
问题可能是由于pyserial运行时arduino已经写入整数了吗?
所以从pyserial字符写入Arduino的信号开始喜欢
ser=serial.Serial ('com3',9600,timeout =1)
ser.write(b'S')
X=ser.read(1)
print(X)
一旦你得到这个起始位来自Arduino的写整数。
这是不正确的方式从Arduino读取Integer
。 Integer
是一个32位的类型,而串行端口将被设置为EIGHTBITS(无论是在pyserial和Arduino的。纠正我,如果我错了)的字节大小,因此,你必须写Character
版本Integer
的从Arduino通过串口传输时,因为Character
只需要EIGHTBITS,这也是非常容易完成所需工作的便捷方式。
长话短说,在传输之前将您的Integer
转换为String
或Character
阵列。 (机会有可用于转换的内置功能)。
在一个侧面说明这里是你宁愿正确的Python代码使用方法:
ser = serial.Serial(
port='COM3',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
#RxTx
ser.isOpen()
while 1:
out = ''
while ser.inWaiting() > 0:
out += ser.read(1)
if out != '':
print ">>Received String: %s" % out
甚至不需要检查设置btw,'HardwareSerial :: write()'的所有其他整数重载只需执行C风格转换为'uint8_t'。 –
@IljaEverilä我不知道arduino部分,因为我在AT Mega AVR中完成了它,我不知道你刚刚说了什么。 –
@SiHa编辑,我试图手动编写的代码,应该刚刚复制:) –
我测试了一个简单的程序:
的Arduino:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
int f1=123;
// print out the value you read:
Serial.println(f1);
delay(1000);
}
Python:
import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM5'
ser.open()
while True:
h1=ser.readline()
if h1:
g3=int(h1); #if you want to convert to float you can use "float" instead of "int"
g3=g3+5;
print(g3)
'integer'需要什么值?它的类型究竟是什么?难道是你传递的这些字节可能被解释为不可打印的ASCII或空格? –