Ошибка отправки строки на порт через pySerial

#python #arduino #serial-port #pyserial

#python #arduino #последовательный порт #pyserial

Вопрос:

Я начинаю программировать на Arduino, и у меня возникли некоторые проблемы с командой write () из библиотеки pySerial. У меня есть программа arduino, которая отлично работает с использованием последовательного терминала arduino IDE. Я могу писать команды, и они возвращают мне некоторый текст и изменяют параметры камеры, используя оболочку 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, но прямо сейчас ответ просто пустой, как будто он не получал никаких данных.

Ответ №1:

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

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

Ответ №2:

Во-первых, ваша функция SendCommand отправляет строку «command» каждый раз, когда вы ее вызываете, поэтому вы никогда не отправляли 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()
  

Это должно сработать за вас.