/ / Lesen einer Ganzzahl aus Arduino mit Pyserial - Python, Arduino, Pyserial

Integer aus Arduino lesen mit Pysario - Python, Arduino, Pyserial

Ich sende einen ganzzahligen Wert von Arduino und lese ihn in Python mit Pyserial Der Arduino-Code lautet:

Serial.write(integer)

Und das Pyserial ist:

ser=serial.Serial ("com3",9600,timeout =1)
X=ser.read(1)
print(X)

Es werden jedoch nur leere Felder gedruckt Weiß jemand, wie man diese von Arduino in Python übergebene Ganzzahl lesen kann?

Antworten:

0 für die Antwort № 1

Sie müssen wahrscheinlich ein Startbit verwenden.

Das Problem könnte sein, dass der Arduino die ganze Zahl bereits geschrieben hat, wenn das System läuft.

Also schreibe einen Charakter von Pyserial bis Arduino, um den Start zu signalisieren

    ser=serial.Serial ("com3",9600,timeout =1)
ser.write(b"S")
X=ser.read(1)
print(X)

Und schreibe die ganze Zahl aus dem Arduino, sobald du dieses Startbit hast.


0 für die Antwort № 2

Das ist nicht der richtige Weg, um eine zu lesen Integer von Arduino. Integer ist ein 32-Bit-Typ, während Ihre serielle Schnittstelle auf festgelegt ist ACHTBITS (Sowohl in pyserial als auch in Arduino. Korrigieren Sie mich, wenn ich falsch liege) in Byte-Größe müssen Sie daher das schreiben Character Version des Integer von Arduino, während es über einen seriellen Port übertragen wird, weil a Character dauert nur ACHTBITS Größe, die auch die bequeme Art ist, das zu tun, was Sie benötigen, sehr leicht.

Lange Geschichte kurz, wandeln Sie Ihre um Integer in ein String oder ein Character Array vor dem Senden. (Es besteht die Möglichkeit, dass für die Konvertierung integrierte Funktionen zur Verfügung stehen).

Hier ist der richtige Python-Code, den Sie bevorzugen:

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

0 für die Antwort № 3

Ein einfaches Programm, das ich getestet habe:

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)