Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Связь chevron_right SerialPassthrough: прозрачный мост между Serial и Serial1

SerialPassthrough: прозрачный мост между Serial и Serial1

Показывает, как программно соединить Serial и Serial1, чтобы данные прозрачно проходили между USB-портом и аппаратным UART.

Этот пример демонстрирует, как программно «соединить» Serial и Serial1 в единый прозрачный канал. Всё, что приходит на RX-пин аппаратного UART (Serial1), немедленно пересылается в Serial, и наоборот — данные из USB-порта уходят в Serial1.

Пример рассчитан на платы, у которых есть два независимых UART-интерфейса: один на пинах 0/1, второй — на нативном USB порту. Это, например, Zero, MKR1000, 101 и другие платы аналогичной архитектуры.

Как это работает

На большинстве классических плат (Uno, Nano) пины 0 и 1 физически подключены к тому же USB-чипу, через который работает Serial Monitor. На платах с двумя UART всё иначе:

  • Serial — это нативный USB-порт, через который IDE открывает Serial Monitor.
  • Serial1 — аппаратный UART на пинах 0 (RX) и 1 (TX), независимый от USB.

Скетч в бесконечном цикле проверяет оба порта и переправляет байты из одного в другой. Такая схема называется serial passthrough (прозрачный мост или «сквозная передача»). Она удобна, когда нужно:

  • общаться с внешним устройством (GPS, GSM-модем, Bluetooth) через Serial Monitor без дополнительного конвертера;
  • прошивать или настраивать другой микроконтроллер, подключённый к пинам 0/1;
  • отлаживать протокол обмена, наблюдая трафик в реальном времени.

Необходимое оборудование

Схема подключения

Плата Arduino без дополнительных компонентов — достаточно подключить её к компьютеру по USB. Если нужен мост к внешнему устройству, подключайте его к пинам 0 (RX) и 1 (TX).

Дополнительных компонентов не требуется. Плату достаточно подключить к компьютеру через USB. Для работы с Serial Monitor откройте его в Arduino IDE — он будет общаться с платой через Serial, а всё, что вы отправляете, окажется на пинах 0/1 через Serial1.

Код

/*

  Скетч SerialPassthrough

  На некоторых платах, таких как Arduino 101, MKR1000, Zero или Micro, есть один

  аппаратный последовательный порт, подключённый к цифровым пинам 0–1, и отдельный USB serial

  порт, подключённый к Serial Monitor в IDE. Это означает, что «последовательный

  сквозной канал» (serial passthrough), возможный на Arduino UNO (обычно используется для

  взаимодействия с устройствами/шилдами, требующими настройки через AT-команды по serial),

  по умолчанию работать не будет.

  Этот скетч позволяет эмулировать поведение serial passthrough. Любой текст,

  введённый в Serial Monitor IDE, будет передан на serial-порт на цифровых пинах 0 и 1,

  и наоборот.

  На платах 101, MKR1000, Zero и Micro «Serial» означает USB serial-порт,

  подключённый к Serial Monitor, а «Serial1» — аппаратный serial-порт на пинах 0 и 1.

  Этот скетч эмулирует serial passthrough с использованием этих двух портов на

  упомянутых платах, однако вы можете изменить имена портов для соединения любых двух

  serial-портов на плате с несколькими портами.

  создан 23 мая 2016 г.

  автор: Erik Nyquist

*/

void setup() {

  Serial.begin(9600);

  Serial1.begin(9600);
}

void loop() {

  if (Serial.available()) {      // Если что-то поступает в Serial (USB),

    Serial1.write(Serial.read());   // читаем и отправляем в Serial1 (пины 0 и 1)

  }

  if (Serial1.available()) {     // Если что-то поступает в Serial1 (пины 0 и 1),

    Serial.write(Serial1.read());   // читаем и отправляем в Serial (USB)

  }
}

Практические замечания

  • Скорость (baud rate) должна совпадать. Убедитесь, что скорость, заданная для Serial и Serial1 в скетче, совпадает со скоростью в Serial Monitor и скоростью внешнего устройства. Несовпадение даёт мусор вместо данных.
  • Пины 0 и 1 заняты. Пока используется Serial1, пины 0 и 1 нельзя применять как обычные цифровые входы/выходы — это нарушит передачу данных.
  • Буферизация. Arduino не добавляет задержки между приёмом и отправкой, но при очень высоких скоростях и длинных пакетах возможна потеря байт из-за ограниченного размера аппаратного буфера (обычно 64 байта). Если это критично, снизьте скорость или добавьте программную буферизацию.

Типичные ошибки

СимптомВероятная причина
В Serial Monitor приходит мусорРазные baud rate в коде и мониторе
Данные не проходят совсемПерепутаны RX и TX у внешнего устройства
Плата зависает при загрузке скетчаВнешнее устройство «держит» линию RX/TX во время прошивки — отключите его
Скетч компилируется, но Serial1 не определёнПлата не поддерживает два UART (например, Uno R3)

Как проверить результат

  1. Загрузите скетч на плату.
  2. Откройте Serial Monitor (или любой терминал) с той же скоростью, что задана в коде.
  3. Если к пинам 0/1 ничего не подключено, отправленные символы не вернутся обратно — это нормально.
  4. Подключите пин 0 (RX) к пину 1 (TX) перемычкой («loopback»): теперь всё, что вы вводите в мониторе, должно возвращаться эхом — это подтверждает, что мост работает в обоих направлениях.

Дополнительные материалы

Больше базовых примеров можно найти в разделе built-in examples.

Подробное описание всех функций языка — в language reference.

Последнее обновление: 26.05.2016, AG