Отправка строки в порт через pySerial прошла неправильно - PullRequest
1 голос
/ 02 апреля 2019

Я начинаю программировать на Arduino, и у меня возникли некоторые проблемы с командой write () из библиотеки pySerial. У меня есть программа Arduino, которая отлично работает с использованием последовательного терминала IDE Arduino. Я могу писать команды, и он возвращает мне некоторый текст и изменяет параметры камеры, используя оболочку blackmagic 3g-SDI. Каждый раз, когда что-то отправляется, оно должно возвращать мне подтверждающее сообщение или сообщение об ошибке, которое доказывает, что ничего не отправляется с помощью функции pySerial write (). Я также знаю, что существует реальная связь, потому что я вижу сообщение «начало» в начале программы, когда использую readline ().

Я уже пытался использовать putty и делать это непосредственно в командной строке, следуя пошаговой инструкции, но в тот же момент я не знаю, что еще я могу сделать, я уже побывал на многих форумах. и темы и пробовал разные вещи.

import serial 
import time

arduino = serial.Serial("COM3",baudrate = 9600, timeout = 2)
#arduino.open()
print(arduino.is_open)
time.sleep(2)

def sendCommand(command):

    arduino.write(bytes(b"command"))
    done = arduino.readline()
    doneDecoded = done.decode('ascii')
    print(doneDecoded)
    print(done)
    print('done')

    pass



while True:
    command =input(" Write your command : ")
    sendCommand(command)

Я ожидаю любой ответ от моего ввода от arduino, но сейчас ответ просто пустой, как будто он не получил никаких данных.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Скорее всего, Arduino просто ожидает, когда символ (или последовательность) EOL (конец строки) начнет обрабатывать вашу команду переменной длины.

EOL обычно равен \r или \n или комбинациии то и другое.Попробуйте отправить это после вашего arduino.write(bytes(b"command"))

1 голос
/ 05 апреля 2019

Во-первых, ваша функция sendCommand отправляет строку «команда» каждый раз, когда вы ее вызываете, поэтому вы никогда не отправляли в Arduino какую-либо команду, на которую она ответила бы.

Во-вторых, ваш код Python работает на вашем компьютере, который, вероятно, работает на тактовой частоте от 1,2 до 2,8 ГГц, в то время как Arduino работает на тактовой частоте 16 МГц (это почти в 100 раз медленнее)

Когда вы отправляете команду в Arduino, вам нужно дать Arduino время для обработки команды и ответа на нее. Я предлагаю добавить задержку около 100 миллисекунд между последовательной записью и последовательным считыванием следующим образом

def sendCommand(command):

    arduino.write(bytes(command))
    time.sleep(100)
    done = arduino.readline()

Это должно помочь тебе.

...