Python 3 добавляет дополнительные теги в строку при чтении данных через последовательный порт Arduino (myserial) - PullRequest
0 голосов
/ 02 ноября 2018

Я только сейчас изучаю некоторый питон после прохождения 30-серийной серии программирования на Arduino. Серия питонов, занявшая второе место, за которой я следую, кажется, немного устарела в том, что касается модулей пакета, и я видел некоторые странные синтаксические события, которых нет в оригинальном видеоматериале.

Цель этого урока состояла в том, чтобы заставить Python читать счетчик String через последовательный порт Arduino.

Счетчик для Arduino через последовательный порт (код):

int cnt=0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  Serial.print("I am counting ");
  Serial.print(cnt);
  Serial.println(" Mississippi");
  cnt=cnt+1;
  delay(1000);
}

Чтение из последовательного порта в PyCharm (код):

import serial

arduinoSerialData = serial.Serial('com4', 9600)

while (1==1):
    if (arduinoSerialData.inWaiting()>0):
        myData = arduinoSerialData.readline()
        print (myData)

Результаты терминала:

b'I am counting 0 Mississippi\r\n'
b'I am counting 1 Mississippi\r\n'
b'I am counting 2 Mississippi\r\n'
b'I am counting 3 Mississippi\r\n'

Что такое теги b \ r \ n. и почему он применяет автоматическое форматирование, например «строка»? Этого не происходит в его видео.

Кроме того, со стороны Python print (myData) был отформатирован как print myData без (). В противном случае он даже не скомпилируется, но в его видео все работает нормально. Это просто изменения в синтаксисе от обновления с Python 2 до Python 3?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

RE: Arduino Sketch: «\ r \ n» - это символы возврата и перевода строки, соответственно.

Поскольку ваш эскиз Arduino использует «Serial.println» вместо «Serial.print», у вас есть эти символы.

RE: Python Вы работаете с Python 3, у вас есть возвращаемые байтовые строки (b'byte string '). Так что да, учебник, на который вы не ссылаетесь, использует Python 2.

0 голосов
/ 02 ноября 2018

\r - символ возврата каретки, а \n - новая строка

они берут свое начало в

   Serial.println(" Mississippi");

строка вашего кода Arduino, обратите внимание, чем .println отличается от print

b перед строкой указывает, что это строка байтов, если вместо

print(myData)

вы делаете

print(myData.decode())

вы больше не должны их видеть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...