Вопрос или проблема
Я купил универсальный 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"));
Оказывается, что в основном каждая “плата” (номенклатура для кода, который позволяет 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
— устанавливает параметры подключения к вашему устройству.
Дополнительные настройки и советы
-
Использование Minicom: Если вам не подходит
picocom
, вы также можете использоватьminicom
, в котором можно задать параметры DTR и RTS через настройки порта. Запуститеminicom
с параметрами, отключающими опцию DTR и RTS. -
Проверка соединений: Убедитесь, что ваше соединение действительно исправно и все провода подсоединены должным образом. Иногда качество соединения может влиять на передачу данных.
-
Документация: Более детально ознакомьтесь с документацией используемых вами программ, чтобы понять, какие опции доступны и как они могут повлиять на работу вашего устройства.
Используя один из предложенных методов, вы сможете комфортно взаимодействовать с вашим ESP8266 и программировать его без постоянного подключения и отключения проводов.