Serielles Empfangen von Arduino auf Raspberry Pi mit PySerial Stoppt nach einer Weile
Arbeite ich an einem Projekt, in dem ich erhalten, einige 25-stelligen Daten um Sie zu verarbeiten, in Raspberry Pi. Hier ist der Beispiel-code erzeugt, dass einige Daten, die ich erhalten möchte vom Arduino:
char i =0;
char a =0;
char b=0;
void setup(){
Serial.begin(9600);
for(i=0;i<25;i++){
Serial.print('l');}
Serial.print('\n');
delay(2000);
}
void loop(){
for(i=0;i<25;i++){
for(a=0;a<i;a++){
if((a==9)||(a==19)||(a==24))
Serial.print('l');
else
Serial.print('d');
}
for(b=0;b<25-i;b++){
Serial.print('l');
}
delay(2000);
}
}
Sendet er eine Zeile wie diese 'llllddddllldddd...' Diese Zeile 25 Zeichen Länge. Nun möchte ich diese mit einer Himbeer-Pi. Hier ist der code, den ich versuche zu arbeiten:
ser = serial.Serial('/dev/AMA0',9600,timeout=1)
ser.open()
try:
serial_data = ser.readline()
print serial_data
except serial.serialutil.SerialException:
pass
Diesen code empfängt Daten sehr korrekt für etwa 5 Sekunden, und dann plötzlich Stoppt den Empfang.
Außerdem, wenn ich versuche im folgenden, bekomme ich keine Ausgabe oder Eingabe/Ausgabe-Fehler.
serial_data = ser.readline()
print serial_data
EDIT1:
Okay, kommentierte ich die Ausnahme jetzt. Es gibt die folgende Fehlermeldung:
raise SerialException('device reporst rediness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
Was ist der richtige Weg, um zu erhalten einen 25-stelligen Daten vom arduino in raspberry über PySerial? Jede Hilfe wird die großartige geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem und war zu brechen meinen Kopf für eine gute Zeit, versuchen Sie, diese
Laufen
Wenn die Ausgabe sieht so etwas
Dann müssen Sie deaktivieren getty versucht, Daten zu senden dass port
Um den Raspberry Pi die serielle Schnittstelle, die wir brauchen, zu deaktivieren, getty (das Programm, das zeigt den login-Bildschirm), indem Sie finden diese Zeile in die Datei /etc/inittab
Und kommentieren Sie es aus, indem Sie # vor
Verhindert, dass der Raspberry Pi von senden von Daten an die seriellen ports, wenn es startet, gehen Sie zu Datei /boot/cmdline.txt und finden Sie die Zeile und entfernen Sie
Neustart des Raspberry Pi
Ehre, wem Ehre gebührt: http://blog.oscarliang.net/raspberry-pi-and-arduino-connected-serial-gpio/ hat mir geholfen, herauszufinden, wie diable getty
Hatte ich zu kämpfen mit diesem, wenn das Auslesen der gps-Daten in den raspberry pi. Die Ausgabe würde aufhören, nach etwa 10 Sekunden und Bericht
Lösungen in fast allen Foren sind für raspberry pi 2 mit wheezy. Ich endlich geschafft, kontinuierlich gps-streaming in meinem raspberry pi3 mit jessie, indem Sie Folgendes tun:
enable_uart=1
und fügen Siedtoverlay=pi3-disable-bt
in /boot/config.txt. dann NeustartMusste ich ändern Sie meine /boot/cmdline.txt zu
dwc_otg.lpm_enable=0 console=tty1 console=serial0,9600 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
dann Neustart
stop getty:
sudo systemctl stop [email protected]
deaktivieren:
sudo systemctl stop [email protected]
Müssen Sie vorsichtig sein mit den /boot/cmdline.txt. Jeder Fehler in der Datei machen Sie Ihren raspberry pi nicht Booten. Es ist besser, immer ein backup der Datei vor der Bearbeitung. Auch die Baudrate richtig. In meinem Fall war es 9600. Hoffe, das hilft!
I verwendet werden, um diesen eine Menge, und dann erzählte mir ein Freund Aufforderung an den arduino für die Daten aus python.
Beschreibung unten
prüfen, ob man den arduino nur Daten senden, wenn Sie dazu aufgefordert werden, indem Sie Ihre python-Programm:
prompt.py
prompt.ino
Auch, habe ich ein github-repository, das hat einige weitere Beispiele für python-arduino-Kommunikation:
https://github.com/gskielian/Arduino-DataLogging/blob/master/PySerial/README.md
Während Ihres
loop
Funktion in IhremArduino
code, den Sie nie zu Ende ein newline-char\n
ist dies nur ein problem mitser.readline()
weil es liest sich, bis ein\n
Charakter.Während Ihres
setup
Funktion, die Sie richtig senden Sie eine\n
Zeichen, die erklären könnte, die intial-Wert gesendet wird, aber nicht die Daten.vielleicht ändern Sie Ihre Arduino-code wie folgt:
Und Ihre python-code-wie so...
timeout
zu etwas, das größer ist als 2, da Sie zu einer Verzögerung Ihres Arduino so lange? Es könnte sich auch lohnen, das hinzufügen einer print-Anweisung oder etwas für Ihreexcept
in Ihrem python-code (nur für debugging), vielleicht ist das serielle schließlich trifft eine Ausnahme. Ich hatte das Problem mit einem Arduino-Projekt habe ich vor kurzem machte.delay
in Ihrem Arduino-code?Versuchen
sudo rasbpi-config
,wählen Sie interface-option, "Nein" sagen, um die erste Nachricht ("kernel-login"), "ja", um die zweite Nachricht ("serielle Kommunikation"). Ich fand, wenn die erste Nachricht ist auf es wirft Fehler. Sie sagen 'Nein' behebt es.