Desativar o DTR no pyserial do código
Estou tentando usar o pyserial para enviar dados para um arduino. Mas quando eu abro a porta COM, ela define o DTR baixo e redefine a placa. No entanto, eu tenho a minha configuração de código arduino de tal forma que eu tenho que colocá-lo em modo de recebimento serial, segurando dois botões por 1 segundo. Eu prefiro não ter que fazer a entrada serial na inicialização do arduino, se possível.
Aparentemente você pode modificar o arquivo serialWin32.py, mudando a linha que diz:
self._dtrState = win32.DTR_CONTROL_ENABLE
para:
self._dtrState = win32.DTR_CONTROL_DISABLE
Mas, existe uma maneira de desabilitar isso diretamente no meu script python? Eu também preciso fazer isso para todos os sistemas. Eu preferiria não forçar as pessoas a alterarem a configuração serial básica apenas para usar esse script.
A porta serial é aberta da seguinte maneira:
com = serial.Serial(port, baud, timeout=1);
Atualizar: No final, encontrei uma solução que funciona bem para minha configuração. Como eu não precisava fazer dados Serial o tempo todo, apenas quando eu colocava o dispositivo no modo de recepção serial eu encontrei uma maneira de desabilitar o reset na conexão serial do próprio arduino.
Muitos posts disseram que você pode desabilitar o reset do DTR colocando um resistor de ~ 100 Ohm entre 5V e reset. Mas eu não queria que isso fosse uma coisa permanente. Então, coloquei um resistor entre PD5 e reset. Então, no software:
void setup() {
//.......
DDRD &= ~(_BV(PD5)); //Set PD5 as input initially
PORTD |= (_BV(PD5)); //Set high
//.......
}
inline void setResetDisable(bool state)
{
if(state)
DDRD |= (_BV(PD5)); //Set PD5 as output to put 5V on reset line
else
DDRD &= ~(_BV(PD5)); //set back to input mode
}
Então, agora, quando eu quero estar em modo serial, eu chamo setResetDisable (true) que lança 5V naquele resistor de 100 ohms e o pino de reset, evitando que o DTR diminua e reconfigure o chip :) Eu apenas chamo setResetDisable (false ) quando saio do modo serial, o chip pode ser programado como normal.