Учебники

Arduino — Связь

Для обмена данными были определены сотни протоколов связи. Каждый протокол можно разделить на две категории: параллельный или последовательный.

Параллельное общение

Параллельное соединение между Arduino и периферийными устройствами через порты ввода / вывода является идеальным решением для коротких расстояний до нескольких метров. Однако в других случаях, когда необходимо установить связь между двумя устройствами на большие расстояния, невозможно использовать параллельное соединение. Параллельные интерфейсы передают несколько битов одновременно. Они обычно требуют шины данных — передача по восьми, шестнадцати или более проводам. Данные передаются огромными, падающими волнами 1 и 0.

Параллельное общение

Преимущества и недостатки параллельной коммуникации

Параллельное общение, безусловно, имеет свои преимущества. Это быстрее, чем последовательный, простой и относительно простой в реализации. Однако, это требует много портов ввода / вывода (I / O) и линий. Если вам когда-либо приходилось перемещать проект с базового Arduino Uno на Mega, вы знаете, что линии ввода / вывода на микропроцессоре могут быть очень ценными и их мало. Поэтому мы предпочитаем последовательную связь, жертвуя потенциальной скоростью для недвижимости.

Модули последовательной связи

Сегодня большинство плат Arduino оснащаются несколькими различными системами последовательной связи в качестве стандартного оборудования.

Какая из этих систем используется, зависит от следующих факторов:

  • С сколькими устройствами микроконтроллер должен обмениваться данными?
  • Насколько быстрым должен быть обмен данными?
  • Каково расстояние между этими устройствами?
  • Нужно ли отправлять и получать данные одновременно?

Одной из самых важных вещей, касающихся последовательной связи, является протокол , который должен строго соблюдаться. Это набор правил, которые должны применяться таким образом, чтобы устройства могли правильно интерпретировать данные, которыми они обмениваются друг с другом. К счастью, Arduino автоматически позаботится об этом, так что работа программиста / пользователя сводится к простой записи (данные, которые будут отправлены) и чтению (полученные данные).

Типы последовательных коммуникаций

Последовательная связь может быть далее классифицирована как —

  • Синхронный — устройства, которые синхронизируются, используют одни и те же часы, и их синхронизация синхронизируется друг с другом.

  • Асинхронныйасинхронные устройства имеют свои собственные часы и запускаются выходным сигналом предыдущего состояния.

Синхронный — устройства, которые синхронизируются, используют одни и те же часы, и их синхронизация синхронизируется друг с другом.

Асинхронныйасинхронные устройства имеют свои собственные часы и запускаются выходным сигналом предыдущего состояния.

Легко узнать, является ли устройство синхронным или нет. Если одинаковые часы выдаются всем подключенным устройствам, то они являются синхронными. Если нет тактовой линии, она асинхронная.

Например, модуль UART (универсальный асинхронный приемник-передатчик) является асинхронным.

Асинхронный последовательный протокол имеет ряд встроенных правил. Эти правила — не что иное, как механизмы, которые помогают обеспечить надежную и безошибочную передачу данных. Эти механизмы, которые мы получаем для избежания внешнего тактового сигнала, —

  • Биты синхронизации
  • Биты данных
  • Биты четности
  • Скорость передачи

Биты синхронизации

Биты синхронизации — это два или три специальных бита, передаваемых с каждым пакетом данных. Это стартовый бит и стоповый бит (ы). В соответствии со своим именем эти биты отмечают начало и конец пакета соответственно.

Всегда есть только один стартовый бит, но число стоповых битов можно настроить на один или два (хотя обычно он остается равным одному).

Стартовый бит всегда указывается незанятой линией данных, идущей от 1 до 0, в то время как стоповый бит (биты) переходит обратно в состояние ожидания, удерживая строку в 1.

Биты синхронизации

Биты данных

Количество данных в каждом пакете может быть установлено на любой размер от 5 до 9 бит. Конечно, стандартный размер данных — это ваш базовый 8-битный байт, но другие размеры имеют свое применение. 7-битный пакет данных может быть более эффективным, чем 8, особенно если вы просто передаете 7-битные символы ASCII.

Биты четности

Пользователь может выбрать, должен ли быть бит четности или нет, и если да, должен ли четность быть нечетным или четным. Бит четности равен 0, если число единиц среди битов данных является четным. Странный паритет как раз наоборот.

Скорость передачи

Термин скорость передачи данных используется для обозначения количества битов, передаваемых в секунду [бит / с]. Обратите внимание, что это относится к битам, а не байтов. Протокол обычно требует, чтобы каждый байт передавался вместе с несколькими управляющими битами. Это означает, что один байт в последовательном потоке данных может состоять из 11 битов. Например, если скорость передачи составляет 300 бит / с, то в секунду могут передаваться максимум 37 и минимум 27 байтов.

Arduino UART

Следующий код заставит Arduino отправить привет миру, когда он запустится.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
   Serial.println("hello world"); //print hello world
}

void loop() {

}

После загрузки эскиза Arduino в Arduino откройте монитор Serial. Поиск в правом верхнем углу Arduino IDE.

Введите что-нибудь в верхнюю часть последовательного монитора и нажмите отправить или войти на клавиатуре. Это отправит серию байтов в Arduino.

Следующий код возвращает все, что он получает в качестве ввода.

Следующий код заставит Arduino доставлять вывод в зависимости от предоставленного ввода.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available()) //if number of bytes (characters) available for reading from { 
      serial port
      Serial.print("I received:"); //print I received
      Serial.write(Serial.read()); //send what you read
   }
}

Обратите внимание, что Serial.print и Serial.println отправят обратно фактический код ASCII, тогда как Serial.write отправит обратно фактический текст. См. ASCII коды для получения дополнительной информации.