В чем разница между всеми последовательными библиотеками программного обеспечения? Какой из них совместим с Arduino Nano?

11

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

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

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

Ответы:

16

В этом ответе перечислены 4 основных варианта:

  • HardwareSerial, всегда лучший. Просто используйте предопределенную Serialпеременную. На некоторых Arduinos есть дополнительные HardwareSerial порты, названные Serial1, Serial2и т.д. Nano имеет только Serial.

  • AltSoftSerialЛучшие из серийных программных библиотек. Разрешен только один экземпляр, и он должен использоваться на одном из выводов ввода ввода (выводы 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или другая программа-эмулятор терминала будет считывать данные с этого COM-порта USB.

подсечно-DEV
источник
Является ли AltSoftSerial одинаковым по производительности и характеристикам, только что NeoICSerial добавляет функциональность чего? Я не понял полностью. github.com/SlashDevin/NeoICSerial
Уильям Рой
2
@WilliamRoy, NeoICSerialпросто добавляет attachInterruptметод к AltSoftSerial. Вам, вероятно, не нужно обрабатывать каждый символ в прерывании. Просто используйте AltSoftSerialи позвоните, available()а затем, read()если символ готов. Точно так же NeoHWSerialдобавляет ту же attachInterruptфункцию в ядро HardwareSerial. Тем не менее, NeoSWSerialэто совершенно другой класс (он также имеет attachInterruptфункцию).
slash-dev
-2

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

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

Rodrigo
источник
1
Это даже не попытка ответить на оригинальный вопрос.
Эдгар Бонет
1
Да, это не попытка ответить на первоначальный вопрос, потому что сообщество Arduino не знает, есть ли у вас периферийный код.
Родриго