我从arduino发送整数值并使用pyserial在Python中读取它 arduino代码是:
Serial.write(integer)
而pyserial是:
ser=serial.Serial ('com3',9600,timeout =1)
X=ser.read(1)
print(X)
但除了空格外,它不会打印任何内容 有谁知道如何读取从Python中的arduino传递的这个整数?
答案 0 :(得分:0)
您可能需要使用起始位。
问题可能是arduino在pyserial运行的时候已经写了整数?
所以写一个从pyserial到arduino的字符就像
那样开始信号credit
一旦你得到这个起始位,就从arduino中写出整数。
答案 1 :(得分:0)
这是从Arduino读取Integer
的正确方法。 Integer
是32位类型,而您的串口将设置为 EIGHTBITS (pyserial和Arduino都有。如果我错了,请纠正我) in字节大小,因此您必须在通过串行端口传输时从Arduino写入Character
Integer
版本,因为Character
只需要 EIGHBITS 这也是非常容易做到你需要的东西的便捷方式。
长话短说,在传输前将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
答案 2 :(得分:0)
我测试的简单程序:
<强> 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)