我正在尝试使用 pyserial 将数据发送到 arduino。但是当我打开 COM 端口时,它会将 DTR 设置为低电平并重置电路板。但是,我有我的 arduino 代码设置,因此我必须通过按住两个按钮 1 秒钟将其置于串行接收模式。如果可能的话,我宁愿不必在 arduino 启动时进行串行输入。
显然,您可以修改 serialWin32.py 文件,更改内容为:
self._dtrState = win32.DTR_CONTROL_ENABLE
至:
self._dtrState = win32.DTR_CONTROL_DISABLE
但是,有没有办法直接在我的 python 脚本中禁用它?我还需要为所有系统执行此操作。我宁愿不强迫人们改变他们的基本串行配置只是为了使用这个脚本。
串口打开如下:
com = serial.Serial(port, baud, timeout=1);
更新:最后我找到了一个适合我的设置的解决方案。由于我不需要一直做串行数据,只有当我将设备置于串行接收模式时,我才找到一种方法来禁用 arduino 本身的串行连接重置。
许多帖子都说您可以通过在 5V 和复位之间放置一个 ~100 欧姆的电阻来禁用 DTR 复位。但我不希望这成为永久性的事情。所以,我在 PD5 和复位之间放置了一个电阻。然后,在软件中:
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
}
所以现在,当我想处于串行模式时,我调用 setResetDisable(true),它会在 100 欧姆电阻和复位引脚上引发 5V,防止 DTR 将其拉低并重置芯片:) 然后我只需调用 setResetDisable(false ) 当我离开串行模式时,芯片可以正常编程。