Главная chevron_right Функции chevron_right Связь chevron_right Serial.begin()

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_5N1
  • SERIAL_6N1
  • SERIAL_7N1
  • SERIAL_8N1 (по умолчанию)
  • SERIAL_5N2
  • SERIAL_6N2
  • SERIAL_7N2
  • SERIAL_8N2
  • SERIAL_5E1: чётная чётность
  • SERIAL_6E1
  • SERIAL_7E1
  • SERIAL_8E1
  • SERIAL_5E2
  • SERIAL_6E2
  • SERIAL_7E2
  • SERIAL_8E2
  • SERIAL_5O1: нечётная чётность
  • SERIAL_6O1
  • SERIAL_7O1
  • SERIAL_8O1
  • SERIAL_5O2
  • SERIAL_6O2
  • SERIAL_7O2
  • SERIAL_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 единственное поддерживаемое значение для Serial1SERIAL_8N1.
  • Если вы используете несколько UART одновременно (например, Serial для отладки и Serial1 для модуля), каждый порт нужно инициализировать отдельным вызовом Serial.begin() с нужными параметрами.