Как заставить эмулятор последовательного терминала в Linux игнорировать RTS и DTR?

Вопрос или проблема

Я купил универсальный 8-контактный ESP8266 на Amazon. Он пришел с загруженной прошивкой, использующей команды “AT”, которая работала как модем. Я подключил модуль к FTDI1232, который является подключенным по USB UART и работает как последовательный порт.

Вот ID USB:

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

Он отображается как /dev/ttyUSB0 в моей системе. Я установил CuteCom на своей машине с Ubuntu 14.04, выбрал скорость 115200, без контроля четности, 8-битные символы и 1 стоп-бит. Мне удалось нормально общаться, отправляя и получая данные с помощью CuteCom.

Тем не менее, мне не особо нужна эта стандартная прошивка. Я загрузил последнюю версию Arduino IDE и добавил поддержку ESP8266 через дополнительный пакет ядра.

Чтобы запрограммировать это устройство, я подключил ESP8266 по этой схеме.

вставьте описание изображения здесь

Это в основном та схема, что у меня уже была, но мне пришлось добавить линии RTS и DTR, чтобы завершить это.

Я создал очень простой скетч, как этот

void setup(){
  Serial.begin(115200); // 8-битный символ, без четности, 1 стоп-бит
  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 или аналогичным инструментом.

Это, вероятно, не имеет значения, но вот фотография реальных устройств

вставьте описание изображения здесь

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

У меня есть эта проблема с ESP-C3-32S-Kit, открываю устройство, создаю сброс, но мы можем использовать Serial в нормальном режиме загрузки.

Ответ или решение

Чтобы игнорировать сигналы RTS и DTR в эмуляторе последовательного терминала под Linux, вы можете использовать разные подходы.

Определение проблемы

Вы использовали FTDI-адаптер для подключения вашей ESP8266, и теперь сталкиваетесь с необходимостью отключить сигналы RTS и DTR, чтобы избежать необходимости вручную подключать и отключать провода каждый раз при программировании устройства. Ваша цель — быть в состоянии отправлять и принимать данные, не прерывая соединение.

Использование Picocom

Одним из простых решений является использование picocom, лёгкого терминального эмулятора. Вы можете запустить picocom с параметрами, которые игнорируют RTS и DTR. Вот команда, которую вам следует использовать:

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

Что делает эта команда:

  • -b 115200 — устанавливает скорость передачи данных.
  • --lower-rts — принудительное давление сигнала RTS вниз.
  • --lower-dtr — принудительное давление сигнала DTR вниз.
  • /dev/ttyUSB0 — задаёт устройство, с которым необходимо работать.

Альтернатива: Использование Socat

Если вам необходима большая гибкость или специальные параметры, вы можете использовать socat. Этот инструмент позволяет создавать соединения между различными потоками, включая последовательные порты. Вот команда для подключения к последовательному порту при игнорировании RTS и DTR:

socat -d -d pty,raw,echo=0,link=/dev/ttyV0,crlf /dev/ttyUSB0,b115200,raw,echo=0

Объяснение параметров:

  • -d -d — выводит отладочную информацию.
  • pty,raw,echo=0 — создаёт виртуальный последовательный порт.
  • link=/dev/ttyV0 — назначает имя для виртуального порта.
  • /dev/ttyUSB0,b115200,raw,echo=0 — устанавливает параметры подключения к вашему устройству.

Дополнительные настройки и советы

  1. Использование Minicom: Если вам не подходит picocom, вы также можете использовать minicom, в котором можно задать параметры DTR и RTS через настройки порта. Запустите minicom с параметрами, отключающими опцию DTR и RTS.

  2. Проверка соединений: Убедитесь, что ваше соединение действительно исправно и все провода подсоединены должным образом. Иногда качество соединения может влиять на передачу данных.

  3. Документация: Более детально ознакомьтесь с документацией используемых вами программ, чтобы понять, какие опции доступны и как они могут повлиять на работу вашего устройства.

Используя один из предложенных методов, вы сможете комфортно взаимодействовать с вашим ESP8266 и программировать его без постоянного подключения и отключения проводов.

Оцените материал
Добавить комментарий

Капча загружается...