Управление ардуино с компьютера через usb
Рассмотренный в статье Arduino. Управление сервоприводом, на примере SG90 скетч. По мне не очень интересен, так как не даёт полного представления о том, для чего использовать сервопривод. А серво привод это не просто туда сюда, это точные сильные движения. За одно мы рассмотрим, как взаимодействовать с платой Arduino через USB.
Рассмотрим следующий скетч:
Этот скетч будет выставлять позицию сервопривода на позицию, переданную с компьютера на плату.
Рассмотрим данный скетч:
Нам так же понадобится библиотека Servo.h
Мы объявляем так же переменные:
С объектом Servo myservo. И переменная pos в которую мы будем записывать позицию, на которую надо установить сервопривод.
Так же нам понадобится переменная
Сюда мы будем заносить данные поступающие с порта USB на плату.
Мы так же задаём, что общаться с серво приводом мы будем через 9 ножку (myservo.attach(9);)
Все действия с портом USB проходят через объект Serial. Функция объекта Serial begin() выставляет скорость передачи данных по порту usb. в нашем случае begin(9600) означает, что скорость передачи данных с портом USB будет 9600 бод(бит/c).
Дальше начинается самое интересное, блок loop:
Конструкция if(если выполняется условие). В нашем случае Serial.available() возвращает кол-во байт доступных для чтения. соответственно если их больше нуля, выполняем блок кода внутри if.
соответственно если мы ожидаем только цифры и какое нибудь значение обозначающее окончание ввода, то можно из кода вводимого символа вычесть 48 и у нас будет цифровое значение.
Данное значение мы помещаем в переменную incomingByte.
То есть в переменной incomingByte будет находится либо цифра или число большее 10 или меньшее 0.
if (incomingByte>=0 and incomingByte<=9) else
тоесть если incomingByte больше или равно 0 и меньше или равно 9 то это число. Рассмотрим что мы будем делать если во входящем байте закодирована цифра:
мы умножаем значение позиции pos на 10 и прибавляем знчение цифры. По сути прибавляем новое число с права. например если сейчас pos=1 и мы ввели 2 то pos=12.
Делать это можно без использования сторонних библиотек. Фактически, используя только виртуальный COM порт.
Давайте сначала напишем скетч для Arduino. Мы будем отправлять на порт строку с текстом, содержащим в себе значение переменной, которая у нас будет постоянно изменятся в цикле (таким образом имитируя данные снятые с датчика). Также будем считывать данные с порта и в случае если получим текст «1», то включим встроенный в плату светодиод. Он расположен на 13-ом пине и помечен на плате латинской буквой L. А если получим «0», то выключим его.
WPF приложение
Теперь создадим WPF приложение. Разметку сделаем довольно простой. 2 кнопки и метка для отображения текста полученного с порта это все что необходимо:
Добавим 2 пространства имен:
И в области видимости класса 2 переменные с делегатом:
Для снятия данных с порта и сравнения их с искомыми я использовал функцию ArduinoDetected:
Теперь осталось реализовать обработку события таймера. Метод OnTimedEvent можно сгенерировать средствами Intellisense. Его содержимое будет таким:
Мы считываем значение с порта и выводим его в виде текста метки. Но так как таймер у нас работает в потоке отличном от потока UI, то нам необходимо использовать Dispatcher.BeginInvoke. Вот здесь нам и пригодился объявленный в начале кода делегат.
После окончания работы с портом очень желательно его закрыть. Но так как мы работаем с ним постоянно, пока приложение открыто, то закрыть его логично при закрытии приложения. Добавим в наше окно обработку события Closing:
Получившийся пример доступен на GitHub.
Кстати, WinForms приложение создается еще быстрее и проще. Достаточно перетянуть на форму из панели инструментов элемент SerialPort (при наличии желания можно перетянуть из панели инструментов и элемент Timer). После чего в нужном месте кода, можно открыть порт, считывать из него данные и писать в него примерно как и в WPF приложении.
UWP приложение
Для того чтобы разобраться с тем как работать с последовательным портом я рассмотрел следующий пример: SerialSample
Для разрешения работы с COM портом в манифесте приложения должно быть такое вот объявление:
И одна переменная в области видимости класса:
При загрузке считаем в нее значение id порта к которому подключена плата Arduino:
Следующий Task считает 64 байта с порта и отобразит текст в поле с именем txtPortData
Рекомендуемый вариант это не объявлять каждый раз порт заново, а объявить его один раз, например, при загрузке. Но в таком случае необходимо будет регулярно считывать данные с порта, чтобы он не заполнялся старьем и данные оказывались актуальными. Смотрите как это сделано в моем примере UWP приложения. Я так полагаю, что концепт отсутствия возможности очистить буфер состоит в том, что постоянно асинхронно снимаемые данные, не особо нагружают систему. Как только необходимое количество байт считывается в буфер, выполняется следом написанный код. Есть плюс, в том, что при таком постоянном мониторинге ничего не пропустишь, но некоторым (и мне в том числе) не хватает привычной возможности один раз «считнуть» данные.
Для записи данных в порт можно использовать схожий код:
В результате я пришел к выводу, что работа в UWP с Arduino напрямую через виртуальный COM порт хоть и непривычна, но вполне возможна и без подключения сторонних библиотек.
Замечу, что Microsoft довольно тесно сотрудничает с Arduino, поэтому различных библиотек и технологий коммуникации, упрощающих разработку, множество. Самая популярная, это конечно же работающая с протоколом Firmata библиотека Windows Remote Arduino.
В этом документе описано, как подключить Ардуино к компьютеру и прошить его своей первой программой.
1 | Возьмите Ардуино и USB-кабель
Данное руководство рассчитано, прежде всего, на платы Arduino Uno, Arduino Duemilanove, Nano, Arduino Mega 2560 , или Diecimila. Если вы используете какую-то другую модель Ардуино - лучше обратитесь к соответствующей странице в разделе "Начало работы".
Вам понадобится стандартный USB-кабель (с коннекторами типа А и B): такой кабель обычно используется для подключения принтера. (Для Arduino Nano нужен другой кабель - с разъемами типа A и Mini-B).
2 | Скачайте среду разработки Arduino
Последнюю версию можно найти здесь.
После завершения закачки, распакуйте скачанный архив. Убедитесь в том, что структура директорий после распаковки не нарушена. Откройте папку - в не должно быть несколько файлов и поддиректорий.
3 | Подключите устройство
При подключении устройства к компьютеру следует иметь ввиду следующее. Arduino Uno, Mega, Duemilanove и Arduino Nano автоматически распознают источник питания - будь это USB либо внешний источник питания. Если же вы используете Arduino Diecimila, то перед подключением к компьютеру необходимо убедиться, что устройство настроено на питание от USB. Источник питания на этой плате выбирается джампером (небольшая пластмассовая деталь, позволяющая замкнуть между собой только два вывода из трех), подключающего цепь питания платы либо к USB, либо к разъему питания. Перед подключением Ардуино к компьютеру убедитесь, что джампер стоит на двух выводах, которые расположены ближе к USB-разъему.
С помощью USB-кабеля подключите Ардуино к компьютеру. При этом должен загореться зеленый светодиод питания (отмеченный на плате как PWR).
4 | Установите драйверы
Установка драйверов для Arduino Uno или Arduino Mega 2560 под Windows 7, Vista или XP:
- Подключите Ардуино к компьютеру и дождитесь, пока Windows не начнет процесс установки драйверов. Несмотря на все усилия системы, через несколько мгновений процесс завершиться неудачей.
- Зайдите в Пуск, откройте Панель управления.
- В Панели управления перейдите в раздел Система и безопасность. Далее щелкните по пункту Система и откройте Диспетчер устройств.
- Найдите раздел Порты (COM & LPT). В нем вы увидите открытый порт под именем "Arduino UNO (COMxx)"
- Щелкните правой кнопкой по пункту "Arduino UNO (COMxx)" и выберите "Обновить драйвер"
- Далее, в открывшемся окне выберите пункт "Выполнить поиск драйверов на этом компьютере"
- В завершение, выберите файл драйвера под именем "arduino.inf", расположенный в папке "Drivers" в директории скачанного ПО Ардуино (а не в под-директории "FTDI USB Drivers"). Если у вас старая версия IDE (1.0.3 или старее) - выбирайте файл под именем "Arduino UNO.inf"
- Windows завершит установку драйвера.
Установка драйверов для Arduino Duemilanove, Nano и Diecimila под Windows 7, Vista или XP:
После подключения устройства к компьютеру, Windows начнет процесс установки драйвера (если до этого вы не использовали Ардуино на этом компьютере).
На Windows Vista драйвер должен автоматически скачаться и установиться. (Реально, это работает!)
На Windows XP откроется мастер установки оборудования:
Чтобы убедиться, что драйвер корректно установлен - откройте Диспетчер устройств (на вкладке Оборудование Панели управления). Среди системных портов найдите пункт "USB Serial Port" - это и есть ваш Ардуино.
5 | Запустите среду разработки Arduino
Дважды щелкните по иконке среды Arduino. (Примечание: если язык интерфейса установлен неправильно - его можно изменить в окне настроек. Для получения дополнительной информации см. раздел Среда разработки).
6 | Откройте код тестовой программы
Откройте тестовую программу, которая просто моргает светодиодом: File > Examples > 1.Basics > Blink.
7 | Выберите в меню свою модель Ардуино
Теперь в меню Tools > Board необходимо выбрать пункт меню, соответствующий вашей модели Ардуино.
Выбор Arduino Uno
Для моделей Duemilanove с контроллером ATmega328 (модель микроконтроллера написана сверху на микросхеме) выбирайте пункт "Arduino Duemilanove" или "Nano w/ ATmega328". В первых моделях Arduino использовался контроллер ATmega168; для таких моделей необходимо выбрать пункт "Arduino Diecimila, Duemilanove or Nano w/ ATmega168". (Подробнее о пунктах меню и выборе моделей читайте на странице о среде разработки.)
8 | Выберите последовательный порт
В меню Tools > Serial Port выберите последовательный порт, к которому подключен ваш Ардуино. Как правило, это COM-порт с номером 3 (COM3) или выше (COM1 и COM2 обычно ассоциированы с аппаратными портами). Чтобы узнать нужный порт, можно временно отсоединить Ардуино и еще раз открыть меню; исчезнувший порт и будет тем портом, с которым ассоциирован ваш Ардуино. Обратно подключите устройство к компьютеру и выберите из меню необходимый порт.
9 | Прошейте программу
Если через пару секунд после прошивки на плате начал мигать оранжевый светодиод (подключенный к выводу 13) - поздравляем! Вы успешно настроили и запустили Ардуино.
Набор функций Serial служит для связи устройства Ардуино с ПК или другими устройствами, поддерживающими последовательный интерфейс обмена данными. Все платы Arduino имеют хотя бы один последовательный порт (UART). Для обмена данными Serial используют цифровые порты ввод/вывода 0 (RX) и 1 (TX) , а также USB порт. Важно учитывать, что если вы используете функции Serial, то нельзя одновременно с этим использовать пины 0 и 1 для других целей.
Среда разработки Arduino IDE имеет встроенный монитор порта. Для начала обмена данными необходимо запустить монитор нажатием кнопки « Монитор порта » и выставить ту же скорость связи, с которой вызвана функция begin().
Основные функции Serial
- begin()
- end()
- available()
- read()
- flush()
- print()
- println()
- write()
- peek()
В нашем примере мы рассмотрим только часть функция Serial.
Serial.write() – записывает в порт данные в двоичном виде.
Serial.print() - может иметь много значений, но все они служат для вывода информации в удобной для человека форме. Например, если информация, указанная как параметр для передачи, выделена кавычками – терминальная программа выведет ее без изменения. Если вы хотите вывести какое-либо значение в определенной системе исчисления, то необходимо добавить служебное слово: BIN-двоичная, OCT – восьмеричная, DEC – десятичная, HEX – шестнадцатеричная. Например: Serial.print(25,HEX).
Serial.println() делает то же, что и Serial.print(), но еще переводит строку после вывода информации.
SerialEvent() Автоматически вызывается при поступлении новых данных.
Serial.begin() Инициирует последовательное соединение и задает скорость передачи данных вбит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.
Первое что мы с вами сделаем это будем управлять встроенным светодиодом на плату Arduino который подключен к 13 пину.
В монитор порта ни какой информации не возвращается. Также можно вывести в монитор порта информацию полученную от Arduino.
Данный инструмент помогает при отладки программы . В монитор порта модно вывести состояние оборудования, на коком этапе выводит ошибку и пр.
Для работы с Ардуино нам понадобится компьютер (или смартфон), USB data-кабель и некоторый софт.
Компьютер с Windows 7 или выше. На WinХР новые версии Arduino IDE либо работают очень плохо, либо не работают вовсе. Также не компилируются некоторые библиотеки и ядро esp8266. MacOS и Linux-подобные оси тоже подходят, так как среда разработки Arduino IDE кроссплатформенная. Также программировать Ардуино можно с планшета или даже смартфона под Андроид при помощи официального приложения, соответственно смартфон/планшет должен иметь поддержку OTG (подключение и работа с внешними устройствами через usb порт). Но сразу скажу – это большое извращение, а также не все библиотеки будут компилироваться на смартфоне.
USB кабель должен быть именно data-кабелем, по такому кабелю передаются данные (например таким подключается к компьютеру смартфон/фотоаппарат/плеер). Есть три типа USB штекера, которые используются на платах Ардуино: mini-USB (Arduino Nano), micro-USB (Arduino micro) и USB type B (Arduino UNO, MEGA), бывают и китайские поделки на USB type C. Кабель можно купить у китайцев, иногда он идёт в комплекте с платой, можно взять в наших магазинах (
50 рублей), либо просто поискать на полке.
Arduino IDE
Установка
Среда разработки Arduino IDE, качаем с официального сайта и устанавливаем актуальную версию для своей операционной системы. В окне загрузки жмём JUST DOWNLOAD, чтобы начать загрузку без пожертвования
-
на установщик 1.8.13 для Windows 7 и выше
- Если у вас Windows XP – качаем версию 1.6.13
- Во время установки программа попросит установить драйвер – соглашаемся на всё
- Установка на Linux из системного репозитория – читать тут
- Установка на MacOS – читать тут
- КРИТИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ ставить Arduino Windows app из магазина приложений Windows 10, а также Beta Builds, Hourly Builds и старые версии!
Распаковка портативной
Вместо полной установки программы можно скачать архив с уже “установленной”, на странице загрузки он называется Windows ZIP file. Вот прямая ссылка на 1.8.13. Распаковав архив, получим портативную версию Arduino IDE, которую можно скинуть на флешку и использовать на любом компьютере без установки программы. Но понадобится установить драйвер для китайских плат, а также драйверы из папки с программой Arduino IDE. Возможно понадобится установить Java.
Обновление IDE
Перед установкой новой версии нужно удалить старую. Ни в коем случае не удаляйте папку установленной IDE из Program Files, удалять нужно через “Установка и удаление программ“, либо запустив файл uninstall.exe из папки с установленной программой. Иначе установщик откажется устанавливать новую программу, так как в системе остались следы от старой. Решение этой проблемы описано в видео ниже. Вкратце о том, как удалить IDE вручную:
- Папка с программой
- C:\Program Files (x86)\Arduino\ (64-битная версия Windows)
- C:\Program Files\Arduino\ (32-битная версия Windows)
- Документы\Arduino\
- C:\Пользователи (или Users)\Ваш_пользователь\AppData\Local\Arduino15\
Удаляем следы из реестра:
- Открыть редактор системного реестра:
- Windows 10: Пуск/regedit
- Предыдущие: Пуск/Выполнить/regedit
- В окне поиска пишем arduino\uninstall
- Поиск
Решение проблем
- Если перестала запускаться Arduino IDE – удаляем файлик preferences.txt из C:\Пользователи (или Users)\Ваш_пользователь\AppData\Local\Arduino15\
Драйверы
Оригинальные платы от Arduino используют USB контроллер производства FTDI, либо отдельный микроконтроллер в качестве USB интерфейса. Если вы используете китайские платы, то вам понадобится дополнительный драйвер на китайский USB-TTL контроллер. Называется он CH340 (CH341), является производимым в Китае дешёвым аналогом дорогого шведского FTDI чипа.
Драйверы можно скачать по прямой ссылке с сайта, есть запасной архив на Яндекс.диске, или можно поискать в Гугле. Распаковываем архив и запускаем файл
- SETUP.EXE (для 32-х разрядной системы)
- DRVSETUP64/SETUP64.EXE (для 64-х разрядной системы).
В появившемся окошке нажимаем INSTALL. Готово!
Если во время установки Arduino IDE вы по какой-то причине пропустили установку драйверов, то их можно установить вручную из папки с программой, расположенной по пути
- C/Program Files/Arduino/drivers (для 32-х разрядной системы)
- C/Program Files (x86)/Arduino/drivers (для 64-х разрядной системы).
- dpinst-x86.exe (для 32-х разрядной системы)
- dpinst-amd64.exe (для 64-х разрядной системы)
Драйвер CH341 для Mac можно скачать по ссылке с моего сайта , либо со страницы источника . Если у вас будут какие-то проблемы с OSX Sierra и выше, читайте вот эту статью .
В Linux уже встроен необходимый драйвер, но Arduino IDE может отказаться с ним работать: Linux определяет ардуинку как устройство ttyUSB*, обычно это ttyUSB0 (это можно узнать командой dmesg в терминале), то есть в системе появляется интерфейс /dev/ttyUSB0. Чтобы с ним работать, нужны права доступа. Читать и писать на устройство /dev/ttyUSB0 имеет пользователь root и пользователи группы dialout. Работы с правами суперпользователя лучше избегать, поэтому следует занести своего пользователя в группу dialout. Это можно сделать следующей командой (обратите внимание, команда whoami в обратных кавычках)
sudo usermod -a -G dialout `whoami`
После этого нужно перелогиниться. Дальше запускаем Arduino IDE и в меню «Инструменты/Порт» ставим галочку напротив /dev/ttyUSB0.
Вся информация по работе с IDE на данной ОСи есть вот в этой статье.
После установки и настройки всего необходимого можно попробовать прошить плату. Запускаем Arduino IDE и переходим к следующему уроку, где эту самую IDE рассмотрим более подробно.
Другие программы
- Пакет JRE (Java). Так как IDE написана на Java, для её работы требуется пакет JRE. Также качаем свежую версию с официального сайта и устанавливаем. Не актуально для свежих версий Arduino IDE, но может пригодиться для других программ.
- Дополнительно: прогерский блокнот Notepad++ для комфортной работы с текстовыми файлами библиотек или прошивок – официальный сайт.
Видео
Читайте также: