В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
Существует так много последовательных библиотек программного обеспечения, в чем разница между ними? И какой из них я могу использовать с моим Arduino Nano? Для моего Arduino Nano мне нужен один последовательный порт аппаратного обеспечения и один последовательный порт программного обеспечения со скоростью передачи данных 115200 бод.
На каких контактах Arduino Nano можно использовать последовательную библиотеку программного обеспечения?
@William Roy, 👍14
Обсуждение2 ответа
Лучший ответ:
В этом ответе перечислены 4 основных варианта:
HardwareSerial
, всегда лучше всего. Просто используйте предопределенную переменнуюSerial
. На некоторых Arduino есть дополнительные порты HardwareSerial, называемыеSerial1
,Serial2
и т. д. У Nano есть толькоSerial
.AltSoftSerial
, лучшая из программных последовательных библиотек. Разрешен только один экземпляр, и он должен использоваться на одном из контактов Input Capture (контакты 8 и 9 для Nano).Мой
NeoSWSerial
— второй по величине. Он работает на любых двух пинах, но только на скоростях 9600, 19200 и 38400 бод.SoftwareSerial
— худший выбор. Он работает на любых двух контактах, но очень неэффективен. Он отключает прерывания на все время, пока символ отправляется ИЛИ принимается, и он не может делать и то, и другое одновременно (в отличие от всех других последовательных вариантов). Это может помешать другим частям вашего скетча, другим коммуникациям устройств или библиотекам.
Если вы можете использовать более медленную скорость передачи данных, вы можете сохранить отладочные распечатки на Serial
и использовать либо AltSoftSerial
, либо NeoSWSerial
для вашего устройства.
Но если вам нужно использовать 115200, единственным надежным выбором будет Serial
. Хотя AltSoftSerial
и SoftwareSerial
допускают эту скорость передачи данных, они могут некорректно отправлять/получать данные.
В этом случае я бы предложил использовать Serial
для устройства 115200. Если вы не пользуетесь услугами интернет-провайдера, вам придется отключить устройство, чтобы загрузить новый скетч через USB.
Затем используйте AltSoftSerial
или NeoSWSerial
для отладочных операторов. Вам понадобится адаптер TTL Serial-to-USB (он же FTDI) на выбранных контактах для подключения к ПК. Serial Monitor
или другая программа эмулятора терминала будет считывать данные с этого порта USB COM.
AltSoftSerial по производительности и характеристикам такой же, только NeoICSerial добавляет функционал чего? Я не совсем понял. https://github.com/SlashDevin/NeoICSerial, @William Roy
@WilliamRoy, NeoICSerial
просто добавляет метод attachInterrupt
к AltSoftSerial
. Вероятно, вам не нужно обрабатывать каждый символ в прерывании. Просто используйте AltSoftSerial
и вызовите available()
, а затем read()
, если символ готов. Аналогично, NeoHWSerial
добавляет ту же функцию attachInterrupt
к ядру HardwareSerial
. Однако NeoSWSerial
— это совершенно другой класс (он также имеет функцию attachInterrupt
)., @slash-dev
"SoftwareSerial - худший выбор". Я думаю, что на данный момент он улучшен, основан на Neo. Если у вас есть время, пожалуйста, обновите ответ. Спасибо!, @Cătălina Sîrbu
и NeoSW, и AltSoft не могут работать с векторами ISR., @aleXela
Программное обеспечение последовательного порта эмулирует последовательный порт, в отличие от собственного порта, в котором есть регистр для сохранения всех битов по порядку, а затем устанавливается флаг для вызова основного цикла; у программного последовательного порта ничего этого нет. Программный последовательный порт должен получать все биты, один за другим, поэтому вы должны считать цифровой порт, подождать определенное время и снова считать цифровой пин. Вы должны сделать это 10 раз (1 начальный бит, 8 бит данных и 1 конечный бит). Время очень важно. При использовании серийного номера программного обеспечения вам нужно больше беспокоиться о производительности.
Вы можете использовать цифровой вывод прерывания для вывода RX, чтобы вас «вызвали» на нижней границе (стартовый бит) и вы получили 8 бит.
Это даже не _попытка_ ответить на изначальный вопрос., @Edgar Bonet
Да, это не попытка ответить на изначальный вопрос, поскольку сообщество Arduino само не знает периферийного кода., @rodrigo
- Использование последовательных контактов TX/ RX для связи по USB
- Проблема последовательной связи с общей землей SIM800L
- Потеря данных при последовательном считывании с помощью Arduino Nano
- Serial.print пропускает или зависает внутри инструкции "if". Попытка вызвать функцию ЧЕРЕЗ последовательный uart
- Путаница в чтении Oscope Software Serial Arduino
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как использовать Serial.setTimeout()
Я использую neoswserial с клавиатурой I2C, но когда я добавляю
key=getKey();
, мой GSM (используя контакты 2 и 3 Arduino Uno) не получает SMS. Помоги мне, пожалуйста., @Nguyễn Trường Hải