Последовательный интерфейс (serial) предназначен передачи данных через универсальный асинхронный порт UART. Порт UART очень часто используется для передачи данных с Ардуино на компьютер, и обратно, а также для связи нескольких плат ардуин между собой.
Для многопортовых DUE/MEGA см. здесь.
Основные функций для работы с последовательным портом (Serial)
Serial.begin(rate) — Открывает последовательный порт и задаёт скорость для последовательной передачи данных. Типичная скорость обмена для компьютерной коммуникации — 9600.
Очевидно, когда задействован последовательный порт, выводы 0 (RX) и 1 (TX) не могут использоваться для других целей.
Serial.println(data) — Передаёт данные в последовательный порт, сопровождая автоматическим возвратом каретки и переходом на новую строку.
Serial.print(data) — тоже самое без возврата каретки и перехода на новую строку.
Serial.begin(скорость_передачи); — Инициализация порта. Задает скорость передачи в битах в секунду. Нормированные скорости: 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, или 115200.
GSM/GPRS-модуль SIM800L (#1) — как выбрать, подключение, введение в AT-команды
count = Serial.available(); — Принимаемые по последовательному порту байты попадают в буфер микроконтроллера, откуда Ваша программа может их считать. Функция возвращает количество накопленных в буфере байт. Последовательный буфер может хранить до 128 байт.
if (Serial.available() > 0) < // Если в буфере есть данные // здесь должен быть прием и обработка данных >
char = Serial.read(); — Считывает следующий байт из буфера последовательного порта. возвращает -1 если нет входящих данных
Serial.flush(); — Ожидает окончания передачи исходящих данных (до версии Arduino 1.0 функция очищала буфер последовательного соединения)..
Разные варианты функции print:
Serial.print(b, DEC); — выводит ASCII-строку — десятичное представление числа b.
Serial.print(b, BYTE) — выводит младший байт числа b.
(аналогично HEX, OCT, BIN).
Serial.print(str) // если str — строка или массив символов, побайтно передает str на COM-порт.
Serial.println(); — отличие заключается в том, что после данных дополнительно выводятся два символа – символ возврата каретки (ASCII 13, или ‘r’) и символ новой линии (ASCII 10, или ‘n’).
Функция write:
Serial.write(uint8_t c); — Записывает данные в последовательный порт. Данные посылаются как байт или последовательность байт.
Serial.write(val); // где val — переменная для передачи, как единственный байт
Serial.write(str); // где str — строка для передачи, как последовательность байт
Serial.write(buf, len); // где buf — массив для передачи, как последовательность байт; len — длина массива.
Пример 1. Передача данных по Serial-порту с Arduino на компьютер
Инициализация порта со скоростью 9600 бот и передача данных (от Arduino на внешние устройства, например на компьютер):
Уроки Arduino. Общение по Serial, парсинг данных, протоколы связи
void setup() < Serial.begin(9600); // открывает порт и устанавливает скорость 9600 бит/c Serial.println(«Hello Computer»); >void loop() <>
Пример 2. Передача данных по Serial-порту с компьютера на Arduino
serialEvent() — функция вызывается автоматически, когда поступают данные.
String inputString = «»; void serialEvent() < // Далем что то с поступившими данными while (Serial.available()) < char inChar = (char)Serial.read(); // get the new byte inputString += inChar; if (inChar == ‘n’) < stringComplete = true; >>
Serial.setTimeout() — задает максимальное время (в мс) для работы Serial.readBytesUntil();
Возможные проблемы
1) auto-reboot DTR : возможна автоперезагрузка МК при передаче на него данных по serial-пору. Чтобы отключить это, надо поставить конденсатор 10мкФ между RES и GND. Я ставил электролитический кондер (естественно, + на RES).
Как соединить две ардуины по UART (serial) порту
Схема соединения двух ардуин:
Длина провода и скорость: RS-232 (англ. Recommended Standard 232) — стандарт физического уровня для асинхронного интерфейса (UART).
Расстояние связи по RS232 максимум 15 метров.
Но всё зависит от скорости.
Работа Arduino MEGA/DUE с несколькими последовательными serial портами
Многопортовые ардуино.
Как вы уже заметили, на ардуиновских платах Mega и Due имеется по 4 последовательных порта, а именно:
Serial — выводы 0 (RX) and 1 (TX);
Serial1 — выводы 19 (RX) and 18 (TX);
Serial2 — выводы 17 (RX) and 16 (TX);
Serial3 — выводы 15 (RX) and 14 (TX).
Естественно, что на Due используется напряжение 3.3 В (на MEGA как обычно 5 В).
Как с ними работать?
Здесь синим цветом выделены собственно имена объектов ( Serial , Serial1 , Serial2 , Serial3 ), которые используются в коде программы для работы с их методами. Всё просто! Например,
// Пример работы с несколькими serial-портами: void setup() < // инициализируем те порты, котор: Serial.begin(9600); Serial1.begin(9600); Serial2.begin(9600); Serial3.begin(9600); >// и так же с ними работаем: void loop() < // выводим строку в порт-2: Serial2.print(«Hello World!»); // читаем данные из порта-1 и пишем в порт-3: if (Serial1.available()) < int inByte = Serial1.read(); Serial3.write(inByte); >>
Пример вывода на дисплей LCD1602 через последовательный порт UART Arduino из-под Linux средствами языка Python
Короче говоря, есть комп с линуксом, к которому подключена Arduino через USB, а к арудине подключен дисплей LCD1602, и мы хотим на него выводить инфу.
Сначала привожу полный код программы для Arduino UNO, к которой подключен дисплей LCD1602:
#include gt LiquidCrystal_I2C lcd(0x27,16,2); /* или 0x3F. */ const char TERM_SYMBOL = ‘#’; String inputString = «»; void serialEvent() < while (Serial.available()) < char inChar = (char)Serial.read(); // get the new byte Serial.print(inChar); if (inChar != TERM_SYMBOL) < inputString += inChar; >else < lcd.setCursor(0, 0); lcd.print(inputString); // Выводим текст inputString = «»; >> > void setup() < Serial.begin(9600); Serial.println(«Hi Computer»); lcd.init(); // Инициализация lcd.backlight(); // Включаем подсветку lcd.print(«Ready to work»); // Выводим текст >void loop() // цикл
Я сделал здесь решетку ‘#’ в качестве символа завершения передачи пакета данных. Как только в потоке данных встречается символ #, данные выводятся на дисплей, и буфер обнуляется, при этом сам символ ‘#’ не выводится. Конечно, можно было бы использовать ‘n’ или др.
Далее мы напишем скрипт на Python, который будет выводить инфу на дисплей. Я выбрал Python, потому что это прикладной язык и он лучше всего подходит для подобных задач. С такими языками как C++/C# и т.п. больше возни с библиотеками, а здесь всё просто, особенно если это дело происходит под линуксом.
Первым делом устанавливаем необходимые библиотеки (для 2-ой или 3-ей версии python)
$sudo apt-get install python-serial
$sudo apt-get install python3-serial
Далее в интерпретаторе python пишем:
import serial ser = serial.Serial(«/dev/ttyUSB0») ser.baudrate = 9600 ser.write(‘ #’) # очищаем строку ser.write(«123; It’s work#») # выводим какие-либо данные
Здесь ардуина у меня подключена к порту /dev/ttyUSB0 — это я узнавал из Arduino IDE. Обычно она всегда на этом порту сидит, если других устройств на последовательный порт не подключено.
Как вы уже догадались, и в первой, и во второй программы должна быть указано одинаковая скорость в бодах. В моем случае это 9600 — стандартная, хотя и маленькая скрость. Может быть и больше (читай выше).
Платы ARDUINO по низкой цене
Нажми на изображение, чтобы заказать в интернет-магазине:
Now 13.07.23 3:01:54, Your IP: 37.78.4.85; arduino.zl3p.com/basic/serial
ePN
Источник: arduino.zl3p.com
Как изменить COM-порт Arduino
Arduino — это плата для разработки, используемая студентами, инженерами и учителями в учебных целях. Для связи с Arduino нам нужна IDE, известная как Arduino IDE. Мы можем загружать скетчи на плату Arduino с помощью ПК или ноутбука. Для этой последовательной связи Arduino нужен COM-порт для загрузки в него кода.
COM-порт широко известен как порт ввода-вывода для устройства, обычно ПК, который обеспечивает связь между Arduino и ПК. Иногда COM-порт не работает, и нам нужно изменить его на другой, поэтому вот краткое руководство по изменению COM-порта для Arduino.
Почему нам нужно изменить COM-порт в Arduino
Изменение COM-порта Arduino необходимо, поскольку некоторым пользователям нужен определенный порт для Arduino, что требует от них изменения установленного по умолчанию COM-порта на ПК для Arduino. ПК настраивают несколько последовательных портов в соответствии с подключенными устройствами, поэтому для подключения Arduino к определенному порту нам нужно сначала изменить его.
Еще одна причина, по которой нам нужно обновить выбор COM-порта, заключается в том, что иногда Arduino автоматически меняет свои COM-порты. или после каждого переподключения COM-порт обновляется, поэтому мы выбираем постоянный и стабильный COM-порт для Arduino доска. Выполните следующие шаги, чтобы обновить выбор COM-порта Arduino:
Как изменить COM-порт Arduino
COM-порт является необходимым инструментом для последовательной связи между устройствами, и существует множество устройств, включая Arduino, которые поддерживают последовательную передачу данных COM-порта. Вот несколько шагов, чтобы изменить COM-порт для платы Arduino.
Подключите плату Arduino к ПК
Сначала подключите плату Arduino, чтобы ПК мог настроить COM-порт по умолчанию для Arduino, позже мы изменим его на новый COM-порт.
Шаг 1: Откройте среду разработки Arduino. Его можно открыть с помощью ярлыка IDE или введя Arduino IDE в поле поиска окна.
Шаг 2: Как только Arduino IDE откроется, здесь откроется новое окно с интерфейсом IDE, мы можем написать любой скетч, какой захотим. В настоящее время плата Arduino отключена, поэтому COM-порт не отображается.
Шаг 3: Подключите плату Arduino к любому аппаратному последовательному порту ПК с помощью кабеля USB B.
Шаг 4: После подключения платы Arduino среда разработки Arduino настроит COM-порт для платы Arduino. Некоторые старые версии IDE могут не делать этого самостоятельно, поэтому выбирать COM-порт вручную; идти к: Сервис>Порт>Последовательные порты>COM6.
Откройте Диспетчер устройств и обновите драйверы COM-порта Arduino.
Чтобы изменить COM-порт для платы Arduino, сначала мы должны обновить драйверы для портов, а для этого нам нужно открыть диспетчер устройств. Выполните следующие действия, чтобы завершить обновление драйверов.
Шаг 1: Arduino Uno подключен к COM-порту 6, чтобы изменить COM-порт, сначала нам нужно открыть диспетчер устройств. Тип Диспетчер устройств в окне поиска Windows, как показано на изображении ниже:
Шаг 2: Диспетчер устройств откроет новое окно, в котором мы можем проверить подключенный к плате Arduino порт в «COM и LPT» раздел. Как показывает нам Arduino IDE COM6 порт для платы Arduino, точно такой же порт будет указан здесь в диспетчере устройств.
Шаг 3: Прежде чем мы сможем выбрать новый COM-порт для платы Arduino, рекомендуется обновить драйверы COM-порта для Arduino. Выберите COM-порт Arduino и щелкните его правой кнопкой мыши, откроется раскрывающееся меню. Обновить драйвер.
Шаг 4: Теперь откроется новое окно, в котором показаны два варианта обновления драйверов: либо мы можем обновить драйверы, используя локальные файлы, либо выбрать вариант автоматического обновления драйверов. Мы пойдем с автоматическим поиском варианта драйвера.
ПК выполнит поиск обновленных драйверов COM-порта, если они уже установлены, и отобразит сообщение, как показано на рисунке ниже:
Выберите новый COM-порт для платы Arduino
Поскольку драйверы успешно обновлены, мы перейдем к выбору нового COM-порта для платы Arduino.
Шаг 1: Щелкните правой кнопкой мыши COM-порт Arduino и выберите Характеристики.
Шаг 2: Новое окно откроется сейчас выберите Настройки порта вариант.
Шаг 3: Теперь нажмите Передовой.
Шаг 4: Теперь появится новый раздел. Здесь в расширенной настройке COM-портов у нас появилась опция «Номер COM-порта». Выберите номер COM-порта, и появится полный список всех доступных портов. Обычно в Windows доступно до 256 COM-портов. Все используемые COM-порты будут показывать (используемые) сообщения.
Здесь мы можем выбрать любой COM-порт для Arduino, который не используется ни на одном другом устройстве. В настоящее время плата Arduino подключена к COM-порту 6, мы выберем новый порт для Arduino. Выберите COM10 или любой другой порт и нажмите ХОРОШО.
Шаг 5: Чтобы убедиться, что COM-порт обновлен или нет, откройте Arduino IDE и найдите COM-порт Arduino. Вы увидите, что плата Arduino обновила свой COM-порт до номера 10.
Как выбрать последовательный порт в программе ардуино
Для подключения к компьютеру Arduino Leonardo или Micro вам понадобится USB-кабель с разъемом Micro-B. Такой USB-кабель служит как для передачи данных, так и для питания платы. Чтобы прошить Arduino Leonardo, в среде разработки Arduino IDE из меню Tools > Board необходимо выбрать пункт » Arduino Leonardo» или «Arduino Micro» .
Отличия от Arduino Uno
В целом, порядок работы и программирования Leonardo и Micro точно такой же, как и в других моделях Ардуино. Тем не менее, существует и несколько важных отличий.
Единый процессор — и для выполнения программ, и для связи по USB.
Leonardo и Micro отличаются от других моделей Ардуино, прежде всего, тем, что в них для выполнения всех функций используется один микроконтроллер — и для выполнения программ, и для взаимодействия с компьютером по интерфейсу USB. В Arduino Uno и других моделях для выполнения этих двух функций используются разные микроконтроллеры, соответственно, USB-соединение с компьютером всегда остается активным, независимо от текущего состояния главного микроконтроллера. Объединение обеих функций в один микроконтроллер позволило сделать Leonardo более гибким во взаимодействии с компьютером, а также уменьшить его себестоимость за счет отсутствия дополнительного процессора.
Переназначение порта при сбросе платы.
В составе устройства нет отдельной микросхемы, обслуживающей последовательную связь, поэтому используемые последовательные порты являются виртуальным — как в операционной системе ПК, так и на самом устройстве. При запуске загрузчика, Leonardo/Micro автоматически создает экземпляр класса для работы с последовательным интерфейсом, точно так же, как компьютер создает экземпляр драйвера последовательного порта при подключении Ардуино. В системе подключенная плата является экземпляром специального класса драйвера для работы с USB (Connected Device Class — CDC).
Такая организация приводит к тому, что при каждом сбросе платы, USB-соединение с компьютером будет разрываться и устанавливаться вновь. В системе устройство будет исчезать из списка доступных портов, соответственно последовательные порты будут перенумеровываться. Поэтому все программы, в которых был открыт порт Ардуино, потеряют соединение с устройством. Это одно из явных отличий Leonardo/Micro от Arduino Uno, в котором сброс микроконтроллера (ATmega328P) не приводит к разрыву USB-соединения (которое поддерживается дополнительным процессором ATmega8U2 или ATmega16U2). Эти отличия приводит к некоторым особенностям установки драйвера, процесса прошивки и взаимодействия с устройством, которые описаны ниже.
Отсутствие сброса при открытии последовательного порта.
В отличие от Arduino Uno, Arduino Leonardo и Micro не перезапускают загруженный скетч при каждом открытии последовательного порта на компьютере. Это означает, что компьютер не получит данные, отправленные платой до открытия в операционной системе последовательного порта (в том числе, например, данные, отправляемые в блоке setup()).
Такое изменение приводит к тому, что любые функции для передачи последовательных данных (такие, как print(), println(), write() и др.), написанные в блоке setup, не будут вызываться в момент открытия последовательного порта. Чтобы обойти эту проблему, можно программно проверять статус последовательного порта после вызова функции Serial.begin(), например, так:
Serial.begin(9600); // пока последовательный порт не будет открыт — ничего не делаем: while (!Serial) ;
Эмуляция клавиатуры и мыши.
Одно из преимуществ использования единого процессора для выполнения программ и USB-связи — это гибкость при взаимодействии устройства с компьютером. В частности, благодаря этому Ардуино может определяться в системе не только, как виртуальный последовательный порт (также называемый CDC), используемый для прошивки и передачи данных (подобно Arduino Uno), но и работать в качестве HID-устройства, эмулируя клавиатуру или мышь. Предупреждения об использовании этого режима см. в разделе «Правила хорошего тона при программировании», приведенном ниже.
Раздельное функционирование USB и UART.
В Arduino Leonardo и Micro, основной класс Serial ассоциирован с драйвером виртуального последовательного порта для соединения с компьютером через USB. Физически он не соединен с выводами 0 и 1, как это сделано на платах Arduino Uno и в более старых версиях. Для обращения к аппаратному последовательному порту (выводам 0 и 1, RX и TX) используйте класс Serial1 . (Для получения дополнительной информации см. справку по классу Serial).
Отличия в распиновке.
Распиновка Arduino Leonardo несколько отличается от стандартного расположения некоторых выводов (особенно выводов интерфейсов SPI и TWI). Эти отличия подробно описаны на странице описания устройства.
Установка драйверов для Arduino Leonardo и Micro
OSX
- При первом подключении Leonardo или Micro к компьютеру Mac, автоматически запустится программа «Keyboard Setup Assistant». Т.к. для Leonardo настраивать здесь особо нечего, можно просто закрыть это окно, кликнув по красной кнопке в левом верхнем углу.
OSX Keyboard Notification
Инструкции для Windows
Нижеследующие инструкции, прежде всего, относятся к Windows 7, хотя они также подходят и для Windows XP (лишь с небольшими отличиями в диалоговых окнах).
- Подключите плату к компьютеру и дождитесь, пока Windows не запустит мастер установки драйверов. Если мастер не запустился автоматически, то вручную перейдите к Диспетчеру устройств (Пуск > Панель управления > Оборудование) и отыщите в списке строку Arduino Leonardo. Щелкните по ней правой кнопкой и выберите пункт «Обновить драйвер».
Leonardo Windows Drivers
- В появившемся окне выберите «Выполнить поиск драйверов на этом компьютере» и жмите Далее.
Leonardo Windows Drivers
- Жмите кнопку «Обзор. «. В появившемся окне перейдите к папке с программным обеспечением Ардуино (которое вы предварительно скачали). Выберите папку drivers и нажмите ОК, а затем Далее.
Leonardo Windows Drivers
- Возникнет сообщение о том, что устанавливаемое оборудование не проходило тестирование в Windows Logo. Жмите на кнопку Все равно продолжить.
Leonardo Windows Drivers
- Через несколько секунд появится сообщение о том, что мастер завершил установку программного обеспечения для Arduino Leonardo. Теперь закройте окно.
Linux
Под Linux установка драйверов не требуется вообще. (Проверено на Ubuntu 10.0.4)
Прошивка программ в Arduino Leonardo и Micro
В целом, процесс загрузки программы в Arduino Leonardo или Micro особо ничем не отличается от прошивки Uno или других моделей Ардуино. Достаточно в среде разработки нажать кнопку Upload, и ваша программа будет автоматически загружена в память Ардуино и запущена им на выполнение. В общих чертах этот процесс устроен точно так же, как и в Arduino Uno: среда Arduino инициирует сброс платы, который приводит к запуску загрузчика, отвечающего за получение, хранение и запуска нового скетча.
Однако, поскольку последовательный порт, взаимодействующий с устройством, является виртуальным и исчезает при каждом сбросе платы, то среда разработки Ардуино придерживается несколько другой стратегии при выборе таймингов на загрузку скетча, в отличие от Uno и других моделей. В частности, после автоматического сброса Leonardo или Micro (через последовательный порт, выбранный в меню Tools > Serial Port), среда Ардуино ожидает появления в системе нового виртуального последовательного (CDC) / COM-порта — того, который предположительно будет «прослушивать» загрузчик. После этого среда осуществляет отправку скетча на этот вновь созданный порт.
Если автоматический сброс не сработал, то ввиду описанных отличий, использовать физическую кнопку сброса для прошивки Arduino Leonardo/Micro нужно несколько по-другому. Нажмите и удерживайте нажатой кнопку сброса на плате, после этого в среде разработки Ардуино кликните по кнопке Upload. Отпускайте кнопку сброса только после того, как в строке состояния программы появится надпись «Uploading. «. После этого на плате запустится загрузчик, что приведет к созданию виртуального (CDC) последовательного порта на компьютере. Среда разработки увидит новый порт в системе и начнет передачу прошивки через этот порт. Опять таки, эти действия необходимы, только если на устройстве не сработала традиционная процедура прошивки (т.е. по нажатию одной кнопки Upload). (Обратите внимание, что автоматический сброс устройства происходит, если компьютер открывает последовательный порт на скорости 1200 бод и затем закрывает его; соответственно, он может не сработать, если что-то в системе оказывает влияние на USB-соединение с платой — например, отключенные прерывания).
Правила хорошего тона при программировании Arduino Leonardo и Micro
Несколько слов предостережения об использовании библиотек USB Mouse и Keyboard : постоянно запущенные на устройстве библиотеки Mouse или Keyboard могут сильно усложнить процесс прошивки Ардуино. Такие функции, как Mouse.move() и Keyboard.print() перемещают указатель мыши или постоянно отправляют сигналы о нажатии клавиш подключенному компьютеру, поэтому они должны вызываться только тогда, когда вы готовы обрабатывать поступающие от них события.
Рекомендуется использовать какую-нибудь систему управления, позволяющую выключать подобную функциональность, например, в зависимости от положения переключателя или сигнала на выводе, состояние которого вы можете контролировать. Перед использованием функций библиотек Mouse или Keyboard непосредственно с компьютером, лучше всего протестировать возвращаемые ими значения с помощью функции Serial.print(). Так вы сможете удостовериться в правильности отправляемых значений. Подробнее см. примеры работы с библиотеками Mouse и Keyboard.
Эффективное использование программы Serial Monitor: поскольку последовательные данные идут только через один процессор, Ардуино может заполнять приемный буфер компьютера гораздо быстрее, чем другие устройства. Вам следует помнить, что при циклической отправке данных по последовательному интерфейсу, например, так:
void loop()
Serial Monitor в среде разработки может подтормаживать, поскольку он не будет успевать отображать поступающие от Ардуино данные. Если у вас возникла такая ситуация, добавьте небольшую задержку внутрь вашего цикла, чтобы приемный буфер компьютера не заполнялся слишком быстро. Поможет даже небольшая задержка в 1 мс:
void loop()
Приложения, работающие с последовательным портом через родные библиотеки, а не через библиотеку RXTX, как правило, считывают данные с порта гораздо быстрее, поэтому в большинстве случаев вы не столкнетесь с этой ошибкой за исключением программ, построенных на базе функций RXTX (в том числе Serial Monitor, Processing и пр.).
Для получения дополнительной информации об Arduino Leonardo и Micro, см. описание устройств Leonardo Micro. Подробнее о возможностях работы с USB см. справку по библиотекам Mouse и Keyboard.
Источник: sampawno.ru