#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()
Это должно сработать за вас.