Мульти Серийная Программа Python Raspberry Pi - PullRequest
0 голосов
/ 01 июня 2019

Я использую Raspberry Pi (Revolution Pi от Kunbus) для управления несколькими Arduino через последовательную связь (USB).Я хотел знать, возможно ли управление / связь с несколькими последовательными портами одновременно.Я знаю, что мультисерийные aruduinos, такие как MultiSerialMega, позволяют вам перечислять Serial.begin (9600);и Serial1.begin (9600);для связи с несколькими одновременно, существует ли это на Raspberry Pi?Когда я стою, я переключаю порты, но программа, запущенная на другом arduino, останавливается, как только я это делаю.

Подводя итог: могу ли я общаться с тремя последовательными портами в Python, например, в MultiSerialMega?

Спасибо, Леви

Я пытался просто добавить один, например,пример для MultiSerialMega, но это не работает (что неудивительно)

import serial
import time

while True:
    ser = serial.Serial("/dev/ttyACM0")
    steps = int(input("How many steps?")
    ser.write(b'%d' %steps)
    ser = serial.Serial("/dev/ttyACM1")
    steps = int(input("How many steps?")
    ser.write(b'%d' %steps)

В данный момент я просто играю с шаговыми двигателями, но как только я переключаю последовательные порты, программа заканчивается / двигатель перестает двигаться.

1 Ответ

0 голосов
/ 01 июня 2019

Из того, что я понимаю, вы хотите записать на несколько последовательных портов, подключенных к вашему Rpi.Вы должны быть в состоянии сделать это с таким количеством портов, как вы хотите, так же, как вы используете Arduinos с несколькими аппаратными UART.

Попробуйте:

import serial
import time
import sys
ser1 = serial.Serial("/dev/ttyACM0")
ser2 = serial.Serial("/dev/ttyACM1")
while True:

    steps = input("How many steps for serial 1? (press q to quit")
    if steps == "q" or steps == "Q":
        ser1.close()
        ser2.close()
        sys.exit()
    else:
        ser1.write(int(steps))

    steps = input("How many steps for serial 2? (press q to quit)")
    if steps == "q" or steps == "Q":
        ser1.close()
        ser2.close()
        sys.exit()
    else:
        ser2.write(int(steps))

РЕДАКТИРОВАТЬ: Если у вас так много Arduinos, что у вас не хватает USB-портов для их подключения, вы можете рассмотреть возможность переключения на RS485 , который является многоточечным, чтобы вы могли подключить до 32 последовательных устройств (ваш Arduinos) к одному последовательному порту на вашем Rpi.Смотрите также эту ссылку

...