Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

Последовательная коммуникация в Arduino: UART, основы и устранение неисправностей

Serial-коммуникация в Arduino: UART, протокол RS232/TTL и программирование

История: от параллельного к последовательному интерфейсу

Ранние микроконтроллеры обменивались данными параллельно — 8 проводов (1 байт). Неудобно: много проводов, искажения на длинных линиях, дорого. Появился последовательный протокол — передача тех же 8 бит по 2–3 проводам (TX, RX, GND).

Последовательный протокол (RS232 / TTL)

Байт преобразуется в последовательный поток сдвиговым регистром (параллельно-последовательный), на приеме — обратное преобразование (последовательно-параллельный).

Режимы дуплекса:

  1. Simplex — только передача (TX)
  2. Half-duplex — передача ИЛИ прием в данный момент (RS485)
  3. Full-duplex — одновременная передача и прием (UART, RS232)

Стандарт RS232 использует уровни ±3…±25 В (логическая 1 = отрицательное напряжение). Для совместимости с TTL (0/5В или 0/3,3В) нужен преобразователь уровней — популярный MAX232. Arduino работает на TTL-уровнях, но имеет USB-UART мост для связи с ПК.

Программирование Serial в Arduino

Встроенная библиотека Serial берет на себя протокол. Основные функции:

ФункцияОписание
Serial.begin(baud)Инициализация, установка бодрейта (обычно 9600). В setup().
Serial.available()Возвращает число байт в буфере приема. 0 — данных нет, >0 — есть данные.
Serial.read()Читает 1 байт из буфера. Возвращает число (0–255). Символ '1' прочитается как 49 (ASCII).
Serial.print(val) / Serial.println(val)Отправка данных в Serial Monitor / порт. println добавляет перевод строки.
Serial.write(val)Отправка бинарных данных (байт).
Serial.flush()Ожидает завершения передачи исходящего буфера (не чистит входной!).
Serial.readString()Чтение строки до таймаута.
Serial.parseInt()Парсинг целого числа из потока.

Пример: эхо-сервер (получил — вернул)

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    char incoming = Serial.read(); // читаем байт
    Serial.print("Получено: ");
    Serial.println(incoming);      // выводим как символ
    // или как число:
    // Serial.println((int)incoming);
  }
}

Типичные ошибки и советы

Связанные материалы:

Промышленные технологии

  1. MQTT против DDS: выбор правильного M2M протокола для IoT
  2. Industrial IoT коммуникации: 6 проверенных инфраструктурных протоколов
  3. Понимание направлений передачи данных: от симплекса к полнодуплексной связи
  4. Оптическая передача данных: использование света для высокопропускной, помехонепроницаемой передачи
  5. Понимание сетевых протоколов: от физического уровня к продвинутому арбитражу
  6. Микропроцессоры: эволюция вычислений с запрограммированной памятью
  7. Бесшовная I2C-интеграция Arduino и Raspberry Pi 2 для IoT-проектов с датчиками
  8. Беспроводная передача данных по магнитному полю на Arduino с 3D-сенсором Infineon
  9. Устройство для общения глухосліпых людей с помощью 1Sheeld и Arduino
  10. Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield