2016-04-19 5 views
1

Ich versuche, einige Daten von einem Arduino zu bekommen, und ich kann die Daten nicht entschlüsseln, die von ihm kommen. Ich habe einige Informationen gesucht, und ich fand diese Antworten zum Beispiel:Das Erhalten von Daten und Decodieren gibt seltene Zeichen

Introduction to Unicode

Unicode string to String in python

Das Arduino sendet Zahlen (Daten) in einer 8-Bit-Codierung (UTF-8). ich viele verschiedenen Codes versucht, und die besten dekodieren, die ich bekommen habe, ist dies:

The data that I have got from decoding

Ich bin mit Sublime Text 2 meinen Code zu schreiben, und das ist, was die Konsole zeigt mir, wenn ich print verwenden . Ich muss die Daten entschlüsseln, damit ich später eine Matplotlib-Figur zeichnen kann.

Dieser letzte Code, den ich mir schrieb die Ausgabe oben gezeigt:

class readData(QWidget): 

    def __init__(self): 
    super(readData, self).__init__() 

    self.resize(300, 100) 

    self.btn = QPushButton("Close", self) 
    self.btn.setGeometry(150, 50, 100, 30) 

    self.btn_2 = QPushButton("Search Data", self) 
    self.btn_2.setGeometry(50, 50, 100, 30) 

    self.btn.clicked.connect(self.close) 
    self.btn_2.clicked.connect(self.searchData) 

def searchData(self): 
    arduinoData = serial.Serial('com7', 9600) #We open port com7 

    while True: 
     print "Searching for data" 
     while(arduinoData.inWaiting() == 0): #We wait for the data 
      print "There is no data"    

     print "Reading and converting data" 
     arduinoString = str(arduinoData.readline()) 
     ardString = unicode(arduinoString, errors = "ignore") 
     print "This is the data: " 
     print type(arduinoString) 
     print "" 
     print arduinoString 
     print type(ardString) 

def close(self): 
    #WE CLOSE THE WINDOW AND THE PORT 

Ich öffne eine einfache QWidget zwei Tasten zeigen: eine für Daten die Suche zu starten und zeigen es, und ein anderes, das Fenster zu schließen und der Hafen. Dies ist die einfachen Fenster:

enter image description here

Wie muß ich entschlüsseln (oder kodieren, ich weiß nicht, jetzt wirklich), die Zahlen zu zeigen, die ich brauche? Was mache ich falsch? Ich hoffe ihr könnt mir helfen.

Antwort

1

Ein String ist im Wesentlichen eine Folge von Zeichen. Jedes Zeichen kann durch ein oder mehrere Bytes repräsentiert werden. Diese Zuordnung von einem 'Byte - (1 oder mehr)' zu einem 'Zeichen' ist das 'Transformationsformat'. Es gibt mehrere Konventionen gibt:

  • UTF-8
  • UTF-16
  • ASCII

Wenn Sie einige Bytes aus dem Arduino erhalten, müssen Sie Python sagen, welche Konvention Sie folgen . Hier sind einige Beispiele:

# Receive data example 
    rawData = arduino.readLine() 
    myString = rawData.decode('utf-8') 
    print(myString) 

    # Transmit data example 
    myString = "Hello world" 
    rawData = myString.encode('utf-8') 
    arduino.sendLine(rawData) 

Ich hoffe, das war hilfreich :-)

+0

Ich habe gerade darüber lesen. Danke nochmal. Ich habe jetzt ein anderes Problem. Idk, warum es jetzt nichts liest. Es sieht so aus, als ob es nicht mehr funktioniert und nach 'print' ausfällt. Lesen und Konvertieren von Daten '' –

+1

Es scheint, als ob' arduinoData.readline() 'hängen bleibt. Aber es ist schwer zu sagen, warum. Vielleicht hört der Arduino auf, irgendwelche Daten zu senden? –

+1

Es tut mir leid, Pablo, ich wünschte, ich könnte dir dabei helfen. Aber ich habe mich noch nicht mit Arduino serielle Verbindung zu Python gearbeitet. Ich habe Erfahrung mit TCP/UDP-Kommunikation mit PIC-Mikrocontrollern (und Lesen der Daten auf dem PC mit einem Python-Programm) –