Можно ли иметь два отдельных последовательных монитора для одной и той же платы arduino, подключенных к ПК?
Я хотел бы разделить последовательную связь на два канала: 1) отладочная информация, 2) данные приложения.
Есть только один серийный объект для использования.
Однако, может быть, есть альтернативный способ печати данных отдельно, не так ли?
P.S. Я использую Nano и UNO.
@zhekaus, 👍6
Обсуждение5 ответов
Лучший ответ:
Как упоминал Майенко в своем ответе, вы можете подключить адаптер USB к UART, такой как PL2303HX, к вашему Uno (стоимость составляет $0.70 CDN). Просто правильно подключите контакты RX, TX, GND к вашему Arduino и включите библиотеку SoftwareSerial в свой скетч.
Вот простой тестовый скетч, который почти идентичен "SoftwareSerialExample", поставляемому с библиотекой SoftwareSerial.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup(){
Serial.begin(9600);
Serial.println("Print to Serial Monitor");
mySerial.begin(9600);
mySerial.println("Print to SoftwareSerial");
}
void loop(){
if(mySerial.available()){
Serial.write(mySerial.read());
}
if(Serial.available()){
mySerial.write(Serial.read());
}
}
Нет, без добавления дополнительного оборудования.
Вы можете добавить USB к адаптеру UART и использовать программное обеспечение serial. Лучше было бы переключиться на плату, которая имеет правильное USB-соединение и USB-стек, поддерживающий несколько экземпляров CDC/ACM, например, плату chipKIT (Lenny, например).
Отказ от ответственности: я разработал Lenny (хотя я получаю от него прибыль только в том случае, если вы покупаете его у меня), и я специально разработал usb-стек, чтобы у вас было несколько экземпляров разных драйверов., @Majenko
на самом деле можно использовать 2 отдельных USB-порта, по одному для каждого устройства, и запустить IDE дважды, как отметил Юрай, @tony gil
@tonygil Вы имеете в виду, например, где я говорю: "Вы можете добавить usb к адаптеру UART и использовать последовательный программный код"...?, @Majenko
Вы можете добавить еще один канал с помощью библиотеки SoftwareSerial и кабеля FTDI. Кабель стоит около 17 долларов в штатах и доступен здесь от Amazon, Sparkfun и, возможно, других. На международном уровне, я не знаю. Библиотека SoftwareSerial имеет некоторые ограничения, в частности то, что она должна прерываться во время работы, чтобы правильно настроить скорость передачи данных в бодах. Но это действительно работает и может быть самым простым решением для вас.
В зависимости от вашей программной среды проще всего отправить все данные в мультиплексированном виде через один последовательный порт, а затем разделить их на два канала на другом конце. Для этого вам понадобится какой-то протокол мультиплексирования. Если все ваши данные являются текстовыми и ориентированными на строку, это может быть так же просто, как поставить префикс каждой строки с "1" или "2", чтобы выбрать соответствующий канал:
Serial.println("1This app data goes to stdout.");
Serial.println("2This diagnostic message goes to sterr.");
Если вы хотите отправить произвольные потоки байтов, вместо этого вы должны использовать два управляющих символа для выбора каналов и символ "escape" для тех случаев, когда вы хотите, чтобы управляющие символы передавались буквально.
Для удобства вы можете инкапсулировать эту логику в два отдельных
объекта и реализовать stdout.println()
и stderr.println()
.
Затем на стороне компьютера вам придется написать программу, которая считывает последовательный порт и разбивает полученные байты на два отдельных потока. То, как вы реализуете эти потоки, зависит от операционной системы. В униксной системе я бы, вероятно, использовал трубы или псевдотерминалы, если бы мне нужна была двунаправленная связь.
Если вы хотите иметь два последовательных монитора, запустите IDE дважды. Используйте ярлык на рабочем столе или пункт меню Пуск, чтобы запустить второй экземпляр IDE. Во втором случае вы можете выбрать другой порт. Конечно, он не будет работать для загрузки, но когда вы откроете последовательный монитор, он будет работать на выбранном порту.
Другой вариант-использовать какую-нибудь терминальную программу для просмотра вывода com-порта.
Другие ответы охватывают тот факт, что вам нужен последовательный адаптер USB-TTL для подключения к USB и в sketch SoftwareSerial в качестве второго последовательного интерфейса или использовать какую-то плату с двумя или более аппаратными последовательными портами, такими как Mega на картинке.
в точку. У меня есть устройство, которое использует "nodemcu" и "Arduino nano", и я контролирую каждый из них на отдельном экземпляре "Arduino IDE"., @tony gil
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
Существует библиотека SoftwareSerial: https://www.arduino.cc/en/Reference/SoftwareSerial, https://www.arduino.cc/en/Tutorial/TwoPortReceive., @VE7JRO
можете ли вы дать больше информации о том, какое устройство вы используете и чего на самом деле пытаетесь достичь, @Chad G
Я указал платы, которые использую, и цель, которую преследую., @zhekaus
@VE7JRO, Спасибо за ответ. Но как увидеть выход из двух последовательных портов одной и той же платы arduino на одном компьютере?, @zhekaus
В Windows вам нужно открыть один экземпляр через "запуск от имени администратора", а другой-от имени обычного пользователя. Таким образом, два экземпляра не знают друг о друге, и вы можете настроить com-порт отдельно. Твое здоровье, @Jochen Reitzig
@JochenReitzig, его можно запустить дважды, дважды щелкнув значок на рабочем столе. нет необходимости в "as asdministrator"., @Juraj