Serial.begin()
Serial.begin() открывает последовательный порт и задаёт скорость в бодах — без этого вызова в setup() функции Serial.print() и Serial.read() работать не будут.
Полная статья
Описание
Serial.begin() открывает последовательный порт и настраивает скорость передачи данных в бодах (бит в секунду). Без этого вызова любые обращения к Serial.print(), Serial.read() и другим функциям последовательного порта не дадут результата — порт просто не активен.
Если вы используете Serial Monitor в Arduino IDE, выбранная в нём скорость должна совпадать с той, что передана в Serial.begin(). Иначе в мониторе появится мусор вместо читаемого текста. Для связи с внешними устройствами через контакты 0 и 1 скорость выбирается исходя из требований этого устройства.
Помимо скорости, можно задать формат кадра: количество бит данных, режим чётности и количество стоп-битов. По умолчанию используется SERIAL_8N1 — 8 бит данных, без контроля чётности, один стоп-бит. Это самый распространённый формат, и в большинстве проектов второй аргумент не нужен.
Синтаксис
Используйте следующую функцию для инициализации и настройки последовательной связи:
Serial.begin(baud)Serial.begin(baud, config)
Параметры
Функция допускает следующие объекты и параметры:
Serial: объект последовательного порта. На платах с несколькими аппаратными UART (например, Mega) доступны Serial1, Serial2 и т. д. См. список доступных последовательных портов для каждой платы на странице Serial.
baud: скорость передачи данных в бодах. Типичные значения — 9600, 19200, 57600, 115200. Допустимый тип данных: long.
config: формат кадра — задаёт количество бит данных, тип контроля чётности и количество стоп-битов. Если этот параметр не указан, используется значение по умолчанию SERIAL_8N1. Допустимые значения:
SERIAL_5N1SERIAL_6N1SERIAL_7N1SERIAL_8N1(по умолчанию)SERIAL_5N2SERIAL_6N2SERIAL_7N2SERIAL_8N2SERIAL_5E1: чётная чётностьSERIAL_6E1SERIAL_7E1SERIAL_8E1SERIAL_5E2SERIAL_6E2SERIAL_7E2SERIAL_8E2SERIAL_5O1: нечётная чётностьSERIAL_6O1SERIAL_7O1SERIAL_8O1SERIAL_5O2SERIAL_6O2SERIAL_7O2SERIAL_8O2
Константы config читаются по схеме: первая цифра — количество бит данных (5–8), буква — тип чётности (N — нет, E — чётная, O — нечётная), последняя цифра — количество стоп-битов (1 или 2). Например, SERIAL_7E2 означает 7 бит данных, чётная чётность, 2 стоп-бита.
Возвращает
Функция ничего не возвращает.
Примеры кода
void setup() {
Serial.begin(9600); // открываем последовательный порт, устанавливаем скорость 9600 bps
}
void loop() {}
Несколько последовательных портов:
// Arduino Mega использует все четыре последовательных порта
// (Serial, Serial1, Serial2, Serial3),
// с разными скоростями передачи данных:
void setup() {
Serial.begin(9600);
Serial1.begin(38400);
Serial2.begin(19200);
Serial3.begin(4800);
Serial.println("Hello Computer");
Serial1.println("Hello Serial 1");
Serial2.println("Hello Serial 2");
Serial3.println("Hello Serial 3");
}
void loop() {}
Спасибо Джеффу Грею за пример с несколькими портами.
Где применяется
- Отладка через Serial Monitor — самый частый сценарий: вызов
Serial.begin(9600)вsetup()позволяет выводить значения переменных и состояния программы прямо в IDE. - Связь с внешними модулями — GPS, Bluetooth, GSM и другие модули общаются по UART с фиксированной скоростью, которую нужно точно указать в
Serial.begin(). - Передача данных между платами — две Arduino могут обмениваться данными через аппаратный UART, если у обеих одинаковые настройки
baudиconfig. - Промышленные протоколы — некоторые датчики и исполнительные устройства требуют нестандартного формата кадра (например, 7E1), который задаётся через параметр
config.
Практические замечания
- Всегда вызывайте
Serial.begin()внутриsetup(), до первого обращения кSerial.print()илиSerial.read(). - Если в Serial Monitor отображаются случайные символы, первым делом проверьте, совпадает ли скорость в коде со скоростью, выбранной в мониторе.
- На платах с USB CDC-портом (например,
Serialна Leonardo) значениеSerial.begin()не влияет на реальную скорость USB-соединения — порт работает на максимальной скорости USB независимо от переданного числа. Тем не менее вызовSerial.begin()всё равно нужен. Подробнее — на странице Serial. - На платах Arduino Nano 33 BLE и Nano 33 BLE Sense единственное поддерживаемое значение для
Serial1—SERIAL_8N1. - Если вы используете несколько UART одновременно (например,
Serialдля отладки иSerial1для модуля), каждый порт нужно инициализировать отдельным вызовомSerial.begin()с нужными параметрами.