2017-01-22 4 views
0

Ich möchte serielle Daten ('a') zu meinem Arduino mit Python senden.Serial Python zu Arduino

Der Empfangscode auf dem Arduino ist die folgende:

char inChar = (char)Serial.read(); 
if(inChar=='a'){ 
    //do stuff 
} 

Wenn die charachter Senden 'a' aus dem Arduino serielle Terminal, es funktioniert. Beim Senden von Python 2.7 (Code siehe unten) blinkt die LED rx, aber to stuff wird nicht ausgeführt (d. H. inChar=='a' ist falsch). Ich habe alles versucht, aber ich kann dieses Problem nicht lösen.

Pyhton Code:

import serial 
ser = serial.Serial('/dev/ttyUSB0',9600) 
ser.write('a') 

EDIT: ser.write(b'a') nicht funktioniert weder

+0

ähnliche Frage beantwortet [hier] (http://stackoverflow.com/questions/19143360/python-writing-to-and-reading-from-serial-port) sehen, ob das hilft – warl0ck

+0

@ warl0ck Ich las den Beitrag bereits, aber es hat nicht geholfen – black

+1

hinzufügen 'ser.flush()' am Ende oder 'ser.close()' Referenz von [link] (http: // pyserial.readthedocs.io/en/latest/shortintro.html) um sicherzustellen, dass die Daten gesendet werden – warl0ck

Antwort

0

Vielen Dank für Ihre Antworten. Allerdings hat es mein Problem nicht gelöst.

Nachdem ich fast jede vorstellbare Lösung ausprobiert habe, repariere ich es. Zwischen Öffnung der Port und senden/lesen, ist eine Verzögerung erforderlich - zumindest mit meiner Himbeere.

So funktioniert das:

import serial 
import time 

ser = serial.Serial('/dev/ttyUSB0',9600) #opening the port 
time.sleep(1) #wait 1s 
ser.write('a') #write to the port 
-1

Sie können meine Entscheidung hier => siehe https://github.com/thisroot/firebox

import firebox as fb 

serPort = fb.findDevice('stimulator') 
if(serPort): 
    data = [] 
    data.append("<fire,200,5>") 
    fb.sendMessage(serPort,data) 
+2

Wie es aussieht, sieht dies wie * spam * aus und scheint die Frage in diesem Thread nicht zu beantworten und das Problem innerhalb der Frage nicht eindeutig zu identifizieren und zu lösen. Bitte bearbeiten Sie Ihre Antwort, um mehr Details darüber zu erhalten, wie dies das OP-Problem lösen könnte und wie er es in seinem speziellen Fall verwenden könnte. –

+0

Ich habe keine Zeit, detaillierter zu schreiben –

2

Wenn Sie sehen, das Licht Rx blinkt, aber das Arduino scheint keine Daten zu empfangen, würde ich zwei Dinge überprüfen:

1) Stellen Sie sicher, dass das Arduino genügend Zeit hat, die serielle Kommunikation einzurichten und zu starten, bevor Daten vom Python-Host gesendet werden. Sie könnten Code einfügen, der dazu führt, dass die integrierte LED mit einem unverwechselbaren Muster nach die Serial.begin-Anweisung blinkt und danach den Python-Code startet. (LED-Details: how to make the LED blink)

2) Stellen Sie sicher, dass die Kommunikationseinstellungen korrekt sind. Sie können alle Parameter explizit festlegen, damit Sie wissen, was sie sind, und sicherstellen, dass sie an beiden Enden des Kabels identisch sind. Zum Beispiel auf dem Arduino:

// set up Serial comm with standard settings 
Serial.begin(9600,SERIAL_8N1); 
Serial.flush(); 

Und dann in dem Python-Code:

bytesize=8 
parity='N' 
stopbits=1 
timeout=3 

ser = serial.Serial(port_name, baudrate=9600, bytesize=bytesize, parity=parity, stopbits=stopbits, timeout=timeout) 

Auch, wenn Sie Daten aus dem Arduino zum Python-Host senden können, dann wissen Sie, dass Ihre Kommunikation Set up ist richtig.

+0

Ich freue mich über Ihren Kommentar. Wenn ich meine Antwort 24 Stunden später überprüfe, ist das nicht sehr gut :(Ich habe kein Zitat für das Verhalten des Beendigungszeichens und meine Notizen für ein ähnliches Problem, das ich antraf, ich habe Python nicht benutzt, ich habe Java benutzt bearbeite meine Antwort – mhopeng

+0

Gut, ich habe meinen Kommentar entfernt, da er nicht mehr gültig ist. Konnten Sie die Ausgabe des OP reproduzieren? –

1

hinzufügen

ser.flush()

am Ende nach ser.write('a')

oder

ser.close()

Referenz von link die Daten, um sicherzustellen, an den Port gesendet wird.