В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?

Существует так много последовательных библиотек программного обеспечения, в чем разница между ними? И какой из них я могу использовать с моим Arduino Nano? Для моего Arduino Nano мне нужен один последовательный порт аппаратного обеспечения и один последовательный порт программного обеспечения со скоростью передачи данных 115200 бод.

На каких контактах Arduino Nano можно использовать последовательную библиотеку программного обеспечения?

, 👍14

Обсуждение

Я использую neoswserial с клавиатурой I2C, но когда я добавляю key=getKey();, мой GSM (используя контакты 2 и 3 Arduino Uno) не получает SMS. Помоги мне, пожалуйста., @Nguyễn Trường Hải


2 ответа


Лучший ответ:

20

В этом ответе перечислены 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


-2

Программное обеспечение последовательного порта эмулирует последовательный порт, в отличие от собственного порта, в котором есть регистр для сохранения всех битов по порядку, а затем устанавливается флаг для вызова основного цикла; у программного последовательного порта ничего этого нет. Программный последовательный порт должен получать все биты, один за другим, поэтому вы должны считать цифровой порт, подождать определенное время и снова считать цифровой пин. Вы должны сделать это 10 раз (1 начальный бит, 8 бит данных и 1 конечный бит). Время очень важно. При использовании серийного номера программного обеспечения вам нужно больше беспокоиться о производительности.

Вы можете использовать цифровой вывод прерывания для вывода RX, чтобы вас «вызвали» на нижней границе (стартовый бит) и вы получили 8 бит.

,

Это даже не _попытка_ ответить на изначальный вопрос., @Edgar Bonet

Да, это не попытка ответить на изначальный вопрос, поскольку сообщество Arduino само не знает периферийного кода., @rodrigo