2016-04-19 1 views
1

Я пытаюсь получить некоторые данные из Arduino, и я не могу декодировать данные, которые поступают из него. Я искал какую-то информацию, и я нашел ответы на эти вопросы, например:Получение данных и их декодирование дает редкие символы

Introduction to Unicode

Unicode string to String in python

На платформе Arduino посылает цифры (данные) в 8-битной кодификации (UTF-8). Я пробовал много разных кодов и лучшее расшифровывает, что я получил это:

The data that I have got from decoding

Я использую SublimeText 2, чтобы написать свой код, и это то, что консоль показывает мне, когда я использую print , Мне нужно декодировать данные, поэтому я могу использовать его позже, чтобы нарисовать фигуру matplotlib.

Этот последний код, который я написал дал мне результат, показанный выше:

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 

Я открываю простой QWidget, чтобы показать две кнопки: одна, чтобы начать поиск данных и показать его, а другой, чтобы закрыть окно и порт. Это простое окно:

enter image description here

Как я должен декодировать (или кодировать, я действительно не знаю, сейчас), чтобы показать номера, что мне нужно? Что я делаю не так? Я надеюсь, что вы можете мне помочь.

ответ

1

Строка по существу представляет собой последовательность символов. Каждый символ может быть представлен одним или несколькими байтами. Это сопоставление от байта (1 или более) к символу 'char' является «форматом преобразования». Есть несколько конвенций там:

  • UTF-8
  • UTF-16
  • ASCII

Когда вы получите несколько байт из вашего Arduino, вы должны сообщить Python, что условность следовать , Вот некоторые примеры:

# 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) 

Я надеюсь, что это было полезно :-)

+0

Я только что прочитал об этом. Еще раз спасибо. Теперь у меня другая проблема. Идк, почему он сейчас ничего не читает. Кажется, что он перестает работать и не работает после 'print 'Чтение и преобразование данных'' –

+1

Кажется, что 'arduinoData.readline()' висит. Но трудно сказать, почему. Может быть, arduino перестает отправлять какие-либо данные? –

+1

Простите, Пабло, я бы хотел помочь вам. Но я еще не работал с серийной ссылкой Arduino на Python. У меня есть опыт работы с TCP/UDP-связью с микроконтроллерами PIC (и чтение данных на ПК с помощью программы Python) –

 Смежные вопросы

  • Нет связанных вопросов^_^