Использование Python для чтения нефиксированного числа байтов через последовательный - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь прочитать нефиксированное количество байтов из последовательного порта. Я могу использовать чтение, чтобы прочитать фиксированное количество байтов, если ввести большее число, чем фактическое количество байтов, это заставит его ждать вечно. Если ввести меньшее число, чем фактическое количество байтов, некоторые символы будут обрезаны. Используя read_all, вывод кажется пустым. Readline () дает синтаксическую ошибку. У меня кончились идеи, есть идеи? Вот мой код:

import time
import datetime
import serial
import os


# public variables
sensors = []  # list of sensor readings
wait = True
sensor_count = 10 # the zero based count of sensors


def pwr_solenoid(solenoid0=0, solenoid1=0, solenoid2=0, solenoid3=0):
    # Defaults are for low signal values

    # compile output
    output = '9{solenoid0}{solenoid1}{solenoid2}{solenoid3}' \
        .format(solenoid0=solenoid0, solenoid1=solenoid1, solenoid2=solenoid2, solenoid3=solenoid3).encode()

    with serial.Serial('/dev/ttyACM0', baudrate=9600) as ser:
        print("created connection to '/dev/ttyACM0'\n")
        print("going to send:\t'{}'".format(output))
        ser.write(output)
        ser.reset_output_buffer()

        # for testing to console
        print("Value sent to the uC:\t'{}'".format(output.decode()))

        # ***** READ from UART *****

        #ser.in_waiting >= 12:
        raw = ser.read(16)
        print("printing raw value of ser.read(16)\n")
        print(raw)
        val = str(ser.read_all().decode()) # (3).decode()[2:])
        #printing val
        print("\n printing val using read_all \n")
        print(val)
        val1 = raw.decode()
        #printing val of raw.decode()
        print("\n pringting val of raw.decode() \n")
        print(val1)
        # print("printing value of ser.readline()\n"
        # serreadlin = ser.readline() This line generates an error cannot use readline() 
        # print(serreadlin)
        # print("printing val\n")
        # print(val)
        # exit()

Code output

1 Ответ

0 голосов
/ 11 апреля 2019

Вы можете использовать:

import serial
import time

ser = serial.Serial(port='/dev/ttyUSB0', baudrate=115200, timeout=1)

while True:
    val =  ser.readline().strip()
    if(val):
       print (val)
...