Serial port arduino windows

Arduino.ru

Serial

Набор функций Serial служит для связи устройства Ардуино с компьютером или другими устройствами, поддерживающими последовательный интерфейс обмена данными. Все платы Arduino имеют хотя бы один последовательный порт (UART, иногда называют USART). Для обмена данными Serial используют цифровые порты ввод/вывода 0 (RX) и 1 (TX), а также USB порт. Важно учитывать, что если вы используете функции Serial, то нельзя одновременно с этим использовать порты 0 и 1 для других целей.

Среда разработки Arduino имеет встроенный монитор последовательного интерфейса (Serial monitor). Для начала обмена данными необходимо запустить монитор нажатием кнопки Serial monitor и выставить ту же скорость связи (baud rate), с которой вызвана функция begin().

Плата Arduino Mega имеет три дополнительных последовательных порта: Serial1 на портах 19 (RX) и 18 (TX), Serial2 на портах на портах 17 (RX) и 16 (TX), Serial3 на портах на портах 15 (RX) и 14 (TX). Чтобы использовать эти порты для связи с компьютером понадобится дополнительные адаптеры USB-to-serial, т.к. они не подключены к встроенному адаптеру платы Mega. Для связи с внешним устройством через последовательный интерфейс соедините TX порт вашего устройства с RX портом внешнего устройства и RX порт вашего устройства с портом TX внешнего и соедините «землю» на устройствах. (Важно! Не подключайте эти порты напрямую к RS232 порту, это может повредить плату).

Arduino.ru

Начало работы с Arduino в Windows

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

Необходимое железо — Arduino и USB-кабель

В этом руководстве предполагается, что вы используете Arduino Uno, Arduino Duemilanove, Nano или Diecimila.

Вам потребуется также кабель стандарта USB (с разъемами типа USB-A и USB-B): такой, каким, к примеру, подключается USB-принтер. (Для Arduino Nano вам потребуется вместо этого кабель с разъемами А и мини-В).

Программа – среда разработки для Arduino

Найдите последнюю версию на странице скачивания.

После окончания загрузки распакуйте скачанный файл. Убедитесь, что не нарушена структура папок. Откройте папку двойным кликом на ней. В ней должны быть несколько файлов и подкаталогов.

Подсоедините плату

Arduino Uno, Mega, Duemilanove и Arduino Nano получают питание автоматически от любого USB-подключения к компьютеру или другому источнику питания. При использовании Arduino Diecimila убедитесь, что плата сконфигурирована для получения питания через USB-подключение. Источник питания выбирается с помощью маленького пластикового джампера, надетого на два из трех штырьков между разъемами USB и питания. Проверьте, чтобы он был установлен на два штырька, ближайших к разъему USB.

Подсоедините плату Arduino к вашему компьютеру, используя USB-кабель. Должен загореться зеленый светодиод питания, помеченный PWR.

Установите драйвера

Установка драйверов для Arduino Uno на Windows7, Vista или XP:

  • Подключите вашу плату и подождите, пока Windows начнет процесс установки драйвера. Через некоторое время, несмотря на все её попытки, процесс закончится безрезультатно.
  • Нажмите на кнопку ПУСК и откройте Панель управления.
  • В панели управления перейдите на вкладку Система и безопасность (System and Security). Затем выберите Система. Когда откроется окно Система, выберите Диспетчер устройств (Device Manager).
  • Обратите внимание на порты (COM и LPT). Вы увидите открытый порт под названием «Arduino UNO (COMxx)».
  • Щелкните на названии «Arduino UNO (COMxx)» правой кнопкой мышки и выберите опцию «Обновить драйвер» (Update Driver Software).
  • Кликните «Browse my computer for Driver software».
  • Для завершения найдите и выберите файл драйвера для Uno – «ArduinoUNO.inf», расположенный в папке Drivers программного обеспечения для Arduino (не в подкаталоге «FTDI USB Drivers»).
  • На этом Windows закончит установку драйвера.

Установка драйверов для Arduino Duemilanove, Nano или Diecimila в Windows7, Vista или XP:

Когда вы подключите плату к компьютеру, Windows запустит процесс установки драйвера (если до этого вы не подключали к компьютеру плату Arduino).

Читайте также:  Windows phone dell about

В Windows Vista драйвер скачается и установится автоматически (это действительно работает!)

В Windows XP откроется Мастер установки нового оборудования (Add New Hardware wizard).

  • На вопрос «Подключиться к узлу Windows Update для поиска программного обеспечения? (Can Windows connect to search for software?)» выберите ответ «Нет, не в этот раз (No, not this time)». Нажмите «Далее».
  • Выберите «Установить из списка или указать местонахождение (Advanced) (Install from a list or specified location (Advanced))» и нажмите «Далее».
  • Убедитесь, что выбрано «Искать наиболее подходящий драйвер в указанном месте (Search for the best driver in these locations)»; снимите флажок «Искать на съемных носителях (Search removable media)»; выберите «Добавить область поиска (Include this location in the search)» и укажите папку drivers/FTDI USB Drivers в дистрибутиве Arduino. (Последнюю версию драйвера можно найти на FTDI веб-сайте). Нажмите «Далее».
  • Мастер начнет поиск и затем сообщит вам, что обнаружен «USB Serial Converter». Нажмите «Готово (Finish)».
  • Снова появится мастер установки нового оборудования. Выполните все те же шаги с теми же опциями и указанием того же пути для поиска. На этот раз будет обнаружен «USB Serial Port».

Проверить, что драйвера действительно установлены можно, открыв Диспетчер устройств (Windows Device Mananger) (он находится во вкладке Оборудование(Hardware) панели Свойства системы(System)). Найдите «USB Serial Port» в разделе «Порты (Ports)» – это и есть плата Arduino.

Запустите среду разработки Arduino

Дважды щелкните на приложении для Arduino.

Откройте готовый пример

Откройте мгновенный пример скетча «LED» по адресу: File > Examples > 1.Basics > Blink.

Выберите вашу плату

Вам нужно выбрать пункт в меню Tools > Board menu, соответствующий вашей плате Arduino.


Выбор Arduino Uno

Для Duemilanove Arduinoплат с ATmega328 (проверьте на плате надпись на микросхеме) выберите Arduino Duemilanove или Nano с ATmega328. Вначале платы Arduino выпускались с ATmega168; для них выберите Arduino Diecimila, Duemilanove, или Nano с ATmega168. Подробно о пунктах меню платы можно прочитать на странице «Среда разработки».

Выберите ваш последовательный порт

Выберите устройство последовательной передачи платы Arduino из меню Tools | Serial Port. Вероятно, это будет COM3 или выше (COM1 и COM2 обычно резервируются для аппаратных COM-портов). Чтобы найти нужный порт, вы можете отсоединить плату Arduino и повторно открыть меню; пункт, который исчез, и будет портом платы Arduino. Вновь подсоедините плату и выберите последовательный порт.

Загрузите скетч в Arduino

Теперь просто нажмите кнопку «Upload» в программе – среде разработки. Подождите несколько секунд – вы увидите мигание светодиодов RX и TX на плате. В случае успешной загрузки в строке состояния появится сообщение «Done uploading (Загрузка выполнена)».
(Замечание. Если у вас Arduino Mini, NG или другая плата, вам необходимо физически кнопкой подать команду reset непосредственно перед нажатием кнопки «Upload»).

Несколько секунд спустя после окончания загрузки вы увидите как светодиод вывода 13 (L) на плате начнет мигать оранжевым цветом. Поздравляю, если это так! Вы получили готовый к работе Arduino!

Драйвер чипа CH340 USB-Serial

При подключении платформ разработки на базе Arduino к компьютеру, вы связываете между собой два мира: микроконтроллерный и микропроцессорный.

Стандартным интерфейсом плат Arduino на микроконтроллерах ATmega328P является UART, а у современных компьютеров используется USB. Чип USB-UART CH340G служит мостом между микроконтроллером и USB-портом компьютера, который позволяет загружать прошивку в плату, а также передавать между собой данные.

Список поддерживаемых плат

Зачем нужен драйвер?

При подключении любого устройства к USB-порту компьютера необходимо подсказать операционной системе, как с ним общаться. На стороне компьютера таким переводчиком является специальная программа, называемая драйвером. Например, драйвер преобразователя USB-UART работает в режиме эмуляции последовательного COM-порта. Т. е. при подключении вашей платы к компьютеру чип моста с помощью драйвера попросит операционную систему открыть виртуальный COM-порт, через который начнётся общение между платой и ПК.

Каждый производитель делает свои чипы с соответствующими драйверами. К сожалению, не все драйверы предустановлены в операционных системах по умолчанию. Когда нужного драйвера нет, ОС пытается найти его для нового подключённого устройства, не находит, и вместо виртуального COM-порта вы видите надпись «USB 2.0 SERIAL» или «Неизвестное устройство». Для решения проблемы скачайте и установите драйвер для вашей операционной системы.

Читайте также:  Пакет установки windows sp3

Установка драйвера

Рассмотрим установку драйвера на примере платы Iskra Uno в операционной системе Windows. С остальными платами ситуация будет аналогичная.

Arduino – Serial – последовательный порт

Каждая платформа Arduino имеет, по крайней мере, один последовательный порт, который обеспечивает передачу данных от микроконтроллера и обратно.

В Arduino IDE имеется терминал, который можно использовать для отображения данных, отправленных через последовательный порт из Arduino, а также отправлять данные обратно в Arduino.

Arduino UNO имеет один аппаратный последовательный порт, подключенный к порту USB. Arduino MEGA имеет три дополнительных последовательных порта, которые можно использовать для своих целей.

Мы ссылаемся на отдельные последовательные порты через последовательные объекты. Во всех системах Arduino реализован объект Serial, который отвечает за передачу данных через первый доступный последовательный порт. В Arduino MEGA дополнительно реализован Serial1, Serial2, Serial3. Все приведенные ниже примеры для Serial также относятся и к Serial1, Serial2 и Serial3.

Функция Serial.begin()

Основным элементом при использовании последовательной передачи данных, является инициализация последовательного порта. Нам необходимо определить скорость передаваемой информации, а также параметры порта. Скорость передачи данных определяется бодами, то есть битами в секунду. Параметры порта определяются количеством переданных битов, четностью и стоп-битами.

Чтобы установить параметры передачи, мы используем функцию Serial.begin(), которая принимает один или два параметра. Первым параметром является скорость передачи данных, второй параметр – параметр порта. Ниже приведен пример использования метода Serial.begin():

Как вы можете видеть в приведенном выше примере, мы можем инициализировать последовательный порт, используя один или два аргумента. Если второй аргумент не задан, то система по умолчанию устанавливает значение 8N1 (8 бит данных, без четности, 1 стоповый бит).

Стандартная скорость передачи данных составляет: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. Кроме того, можно задать свою скорость передачи (путем указания ее значения). Допустимыми параметрами порта являются:

  • 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

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

Насколько важно определить параметры и скорость последовательного порта, мы рассмотрим на следующем примере:

При запуске терминала Arduino IDE мы увидим, что вместо передаваемого текста «test» мы получим непонятный набор символов. Теперь давайте немного изменим программу:

При загрузке исправленного варианта программы в терминале должно отображаться два раза в секунду ожидаемое слово «test».

Теперь измените в терминале скорость передачи данных с 9600 на 19200 бит/с (в правом нижнем углу). Опять же, мы увидим непонятный набор символов вместо «test». Как вы можете видеть, для правильной работы необходима установка идентичных параметров передачи данных.

Функции Serial.print() и Serial.println()

Функция Serial.print() позволяет отправлять информацию через последовательный порт. Можно отправлять как текстовые, так и переменные значения или непосредственно числа. Данные отправляются в кодировке ASCII. Это означает, что число, например, 12, будет отправлено как два символа 1 и 2. Вот типичный синтаксис Serial.print():

Мы отправляем отдельные символы, заключая их в апострофы. Тексты размещаем в двойных кавычках. Числа без кавычек. Можно преобразовать числа в соответствующий формат — по умолчанию установлен десятичный формат.

Вариантом Serial.print() является функция Serial.println(), который отличается добавлением символа конца строки в конце сообщения. В следующем примере показаны различия в использовании этих двух функций:

Функция Serial.write()

В отличие от Serial.print() и Serial.println(), функция Serial.write() позволяет отправлять один байт информации (число). Ниже приведен синтаксис Serial.write():

Примеры использования Serial.write():

Как вы можете видеть в данном примере, при отправке числа 65 с помощью Serial.print() в терминале получим два символа 6 и 5, а отправка числа 65 с использованием Serial.write() в терминале будет интерпретироваться как код ASCII 65, т.е «А».

Функция Serial.available()

Функция Serial.available() позволяет проверить, можно ли прочитать данные из последовательного порта. Arduino имеет 64-байтовый буфер последовательного порта. Функция вызывается без параметров, возвращает количество доступных для чтения байт. Serial.available() позволяет исполнить часть программы, которая считывает данные из последовательного порта только при их появлении. Примеры использования Serial.available():

Читайте также:  Hama usb bluetooth adapter driver windows

В первом примере показано использование условия (if) для проверки доступных данных, и если данные прочитаны, выполняется фрагмент кода. Этот синтаксис, помещенный в функцию loop(), не блокирует его выполнение.

Во втором примере программа будет остановлена ​​до тех пор, пока в буфере не появляться данные, прочитанные из последовательного порта. Ниже приведено практическое использование Serial.available():

Программа проверяет, поступили ли данные из последовательного порта. Если в буфере содержится информация, то программа проверяет, сколько байтов поступило и отправляет эту информацию на терминал.

Когда вы запустите программу и включаете терминал, то изначально не увидите никакой информации. После ввода текста или числа и отправки через терминал, Arduino начнет циклично отправлять количество символов, доступных в буфере последовательного порта.

Функция serialEvent()

Функция serialEvent() — это специальная функция, такая же, как loop() или setup(), которая вызывается в тот момент, когда в буфер последовательного порта попадет информация. Она позволяет выполнять действия независимо от текущего выполнения кода. Как правило, эта функция содержит инструкции для чтения данных из последовательного порта. Пример использования serialEvent() приведен ниже:

ВНИМАНИЕ. В соответствии с документацией Arduino данная функция не поддерживается в системах Esplora, Leonardo и Micro.

Функция Serial.read()

Данные из буфера последовательного порта считываются при помощи функции Serial.read(). Она извлекает один байт данных, уменьшая количество доступной информации в буфере. Ниже приведен пример использования Serial.read():

Вышеуказанная программа считывает данные из последовательного порта и отправляет их на терминал. Существует два способа интерпретации данных. В первом случае байт, считанный с порта, рассматривается как число. Терминал отобразит соответствующий символ ASCII, во втором случае прочитанный байт рассматривается как код ASCII. Когда вы запустите программу и введете букву «a» в первом случае, вы получите код «97», а во втором букву «a».

Функция Serial.readBytes()

Функция Serial.readBytes() позволяет читать большее количество байтов из последовательного порта и помещать данные в буфер. Функция Serial.readBytes() завершит работу в момент, когда будет прочитано соответствующее количество байтов или истечет установленное время. Синтаксис Serial.readBytes() показан ниже:

Функция возвращает количество байтов, считанных в буфере или ноль, если данных нет.

Функция Serial.readBytesUntil()

Функция Serial.readBytesUntil() считывает данные из последовательного буфера в массив. Функция завершит работу, когда истечет время, либо обнаружит терминальный символ, либо считает данные указанной длинны. Синтаксис Serial.readBytes() показан ниже:

Функция возвращает количество байтов, считанных в буфере, или ноль, если данных нет.

Функция Serial.setTimeout()

Функция Serial.setTimeout() позволяет задать время ожидания данных из последовательного порта для Serial.readBytes() и Serial.readBytesUntil(). По умолчанию установлено 1000 мс (1 сек).

Ниже приведен пример использования Serial.readBytes(), Serial.readBytesUntil() и Serial.setTimeout():

В первой части вышеприведенного примера будут прочитаны четыре байта данных, при условии, что эта операция будет выполнена в течение 10 секунд. Во второй части, помимо этого, чтение может быть прервано, когда в буфере появляется конкретный код (здесь код определен как «X»).

Функции Serial.find() и Serial.findUntil()

Функция Serial.find() считывает содержимое буфера в поисках конкретной строки. Функция возвращает true, когда строка найдена и false, когда данные не найдены. Ниже приведен пример кода программы:

В данном примере программа считывает данные из буфера и когда полученные данные соответствуют строке поиска (test), то отображается сообщение (ok).

Serial.find() ожидает данные в течение времени, определенного с помощью функции Serial.setTimeout(). В случаях, когда в буфере имеется большое количество данных, то их можно обработать почти мгновенно. Когда же буфер пуст, функция ожидает следующую порцию данных в течение некоторого времени и заканчивается, возвращая соответствующее значение.

Serial.findUntil() — это вариант Serial.find(), который отличается от предшественника дополнительным аргументом, позволяющим прервать загрузку буфера последовательного порта. Пример синтаксиса показан ниже:

Функция будет считывать данные из последовательного порта, пока не будет найдена строка поиска (text) или прочитан символ «K», или пока не пройдет определенное время (по умолчанию – 1 секунда).

Оцените статью