如何让Linux中的串行终端模拟器忽略RTS和DTR?

如何让Linux中的串行终端模拟器忽略RTS和DTR?

我从亚马逊购买了通用 8 针 ESP8266。它加载了一些“AT”命令固件,其作用类似于调制解调器。我将该模块连接到 FTDI1232,这是一个 USB 连接的 UART,其作用类似于串行端口。

USB ID 如下:

Bus 002 Device 010: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

它看起来就像/dev/ttyUSB0在我的系统中一样。我在我的Ubuntu 14.04机器上安装了CuteCom,选择了115200的速度,无奇偶校验,8位字符和1个停止位。我能够使用 CuteCom 正常通信以发送和接收数据。

不过,我对这个默认固件并没有太多用处。我下载了最新版本的 Arduino IDE,然后通过额外的核心包添加了 ESP8266 支持。

为了对该设备进行编程,我根据此图连接了 ESP8266。

在此输入图像描述

这基本上是我已有的电路,但我必须添加 RTS 和 DTR 线路来完成这个。

我创建了一个非常简单的草图,如下所示

void setup(){
  Serial.begin(115200); // 8 bit char, no parity, 1 stop bit
  while(!Serial){};
}

void loop(){
  int v = Serial.read();
  if(-1 != v){
    Serial.write((uint8_t)v);
  }else{
    delay(10)
  }
}

这是一个基本的“回声”类型草图,应该写回写入设备的所有内容。

上传草图后,我可以使用“工具”->“串行监视器”与草图进行交互。我又创建了几个,其中一个可以转换发送的数据,然后将其回显。他们都工作。

此时 CuteCom 根本不起作用。经过一番查找原因,我最终查看了java代码中串行监视器的实现。我发现的是这一行

  !BaseNoGui.getBoardPreferences().getBoolean("serial.disableRTS"),
  !BaseNoGui.getBoardPreferences().getBoolean("serial.disableDTR"));

从:https://github.com/arduino/Arduino/blob/ee1967cd530ceb9a1d638875e385157e90d532e8/arduino-core/src/processing/app/Serial.java#L68

看起来基本上每个“板”(此处让 SDK 与 ESP8266 对话的代码的术语)定义了是否应启用 RTS 和 DTR。然后,代码调用 jccs 库来启用或禁用 RTS 和 CTS。

此时,我断开了 ESP8266 上连接到 RTS 和 CTS 的线路。我能够再次使用 CuteCom 与我上传的新草图进行对话。但是,我不想每次从 Arduino IDE 编程时都必须断开并重新连接线路。

显然,无需断开设备连接就可以与设备对话,因为 Arduino IDE 中的“串行监视器”工作得很好。

如何在 Ubuntu 14.04 中获得一个串行终端模拟器,让我忽略 RTS 和 DTR?我还接受将端口置于此模式的命令,以便它可以与socat或类似的一起使用。

这可能无关紧要,但这是实际设备的照片

在此输入图像描述

答案1

picocom -b 115200 --lower-rts --lower-dtr /dev/ttyUSB0

我的 ESP-C3-32S-Kit 遇到这个问题,打开设备创建重置,但我们可以在正常启动模式下使用串行。

相关内容