As propriedades de um conversor serial USB não têm nada a ver com o hardware do sistema de hospedagem, mas apenas com o próprio chip serial USB e com a pilha de software do sistema de hospedagem.
O pi deve estar usando drivers seriais USB Linux padrão.
Portanto, você pode ativar / desativar a ligação do DTR para abrir / fechar a porta através do método Linux usual de limpar a hupcl
configuração conforme documentado no site do Arduino e em outros lugares:
stty -F /dev/ttyUSB0 -hupcl
Ou substituindo / dev / ttyUSB0 por qualquer arquivo de dispositivo que realmente corresponda à sua porta serial USB (por exemplo, o primeiro Uno conectado provavelmente seria / dev / ttyACM0)
Mesmo com relação à porta serial nativa do PI, esse comportamento do DTR está sob controle de software - qualquer pessoa que argumenta o contrário está ignorando o fato de que é apenas o driver Linux, e não o hardware, que tem algum conhecimento da porta sendo aberto ou fechado. O hardware da porta real pode apenas dizer que está sendo lido ou gravado ou reconfigurado, nenhum dos quais é realmente sinônimo de abertura do dispositivo serial.
A publicação @ChrisStrattons descreve como usar
stty -F /dev/ttyUSB0
para evitar o desligamento que resulta em uma redefinição. Aqui está um trecho para fazê-lo em Python:Observe que o número exato pode estar ao reconectar o cabo USB, então eu detecto o caminho observando:
fonte
termios
mais, digamosos.system("stty -F /dev/ttyUSB0 -hupcl")
,? Além disso, notei que isso não impede que o Arduino seja redefinido na primeira vez em que você se conectar a ele depois que o sistema host for ligado; impede que seja redefinido nas conexões subsequentes. O que é melhor que nada. Mas eu gostaria de descobrir como impedi-lo de alternar o DTR.termios
salva um fork / exec (chamada) em um programa externo (stty
). Não sei o que fazer com o DTR, acho que acabei de aceitar esse "recurso" e adicionei alguma lógica (handshake personalizado por escrita / leitura) para detectar se o Arduino e o aplicativo no Pi entraram em sincronia.Você pode adicionar um resistor de 120Ohm (ou uma combinação para fazer 120Ohm) entre
RESET
e5V
Isso impedirá a redefinição completa. Isso é o menos invasivo, pois outras soluções exigem a remoção de um resistor ou capacitor da placa, o que complica os envios. Não guarde o resistor se estiver programando. Remova.As placas Leonardo não são redefinidas mesmo que
DTR
sejam acionadas, mas o problema começa quando você precisa redefini-las remotamente, pois às vezes perde a conexão com o Raspberry e é necessário redefini-las fisicamente.fonte
Se você usa a biblioteca Seria e pySerial, pode usar:
ser = serial.Serial ('/ dev / ttyACM0', 9600, dsrdtr = True)
fonte
Você pode usar o PySerial. Aqui está um exemplo no código Python:
para mais opções, selecione Pyserial.
fonte
stty -F /dev/ttyUSB0 -cdtrdsr
relatainvalid argument: -cdtrdsr
.