Arduino:Знакомство с Arduino/Знакомство с Arduino Leonardo и Micro

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Знакомство с Arduino Leonardo и Micro[1]

Чтобы подключить к компьютеру Arduino Leonardo или Micro, вам понадобится USB-кабель с разъемом Micro-B. Благодаря этому соединению плату можно будет и питать, и программировать, и передавать на нее (и от нее) данные. Чтобы программировать Leonardo, вам нужно будет запустить IDE Arduino, а затем открыть меню Инструменты > Плата (Tools > Board) и выбрать там пункт Arduino Leonardo или Arduino Micro.

Отличия от Arduino Uno

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

Один и тот же процессор для скетчей и USB-коммуникации

Модели Leonardo и Micro отличаются от других плат Arduino тем, что используют один и тот же микроконтроллер как для запуска скетчей, так и для USB-коммуникации с компьютером. У модели Uno и других плат под эти функции отведены разные микроконтроллеры – это значит, что каким бы ни было состояние главного микроконтроллера, с USB-соединением ничего не случится. Однако если объединить эти функции в одном процессоре, это добавляет коммуникации с компьютером некоторой гибкости. Кроме того, с устранением одного процессора снижается и стоимость платы.

Перезапись списка портов при сбросе

У этих плат нет отдельного чипа для обработки последовательной коммуникации, а это значит, что последовательный порт – виртуальный. По сути, это программная функция, работающая и на ОС, и на самой плате. Точно так же, как ваш компьютер, который создает экземпляр драйвера последовательного порта, когда вы подключаете Arduino, Leonardo/Micro создает подобный экземпляр, когда запускается ее загрузчик. В итоге ОС компьютера видит плату как экземпляр USB-драйвера Connected Device Class (CDC).

Это значит что каждый раз, когда вы сбрасываете плату, USB-соединение обрывается и устанавливается заново. Плата исчезает из списка последовательных портов, а сам список перезаписывается. Если у какой-то программы будет открыто соединение с Leonardo, то это соединение будет потеряно. Для сравнения – у Arduino Uno при сбросе главного процессора (ATmega328P) USB-соединение не закрывается (т.к. обрабатывается вспомогательным процессором – Atmega8U2 или ATmega16U2). Это отличие вносит некоторые коррективы в установку драйверов, загрузку скетчей и коммуникацию, но об этом ниже.

Нет сброса при открытии последовательного порта

В отличие от Arduino Uno, Leonardo/Micro не перезапустит скетч, если вы откроете на компьютере последовательный порт. Это значит, что вы не увидите данных, которые плата уже отправила компьютеру, включая, к примеру, большую часть данных, посланных в функции setup().

Это изменение говорит о том, что если вы используете функции print(), println() или write() (из библиотеки Serial), то при открытии «Монитора порта» они не появятся. Чтобы исправить это, после вызова функции Serial.begin() нужно поставить проверку того, открыт ли последовательный порт. Примерно так:

Serial.begin(9600);
   // ничего не делаем, пока не откроется последовательный порт:
   while (!Serial) ;

Эмуляция мыши и клавиатуры

Одно из преимуществ использования одного единственного чипа – это повышенная гибкость при коммуникации с компьютером. ОС компьютера видит плату как виртуальный последовательный порт (также именуемый CDC), с помощью которого осуществляется и программирование платы, и коммуникация между платой и компьютером (как, например, на Arduino Uno). Однако плата, помимо прочего, может вести себя и как HID (от «human interface device» – это класс USB-устройств ввода данных), т.е. как мышь или клавиатура. Впрочем, при использовании этой функции нужно использовать меры предосторожности, читайте о них ниже – в разделе «Рекомендации к программированию на Leonardo и Micro».

USB-коммуникация и последовательная коммуникация отделены друг от друга

На моделях Leonardo и Micro под USB-соединение через драйвер виртуального последовательного порта отведен класс Serial. В то же время USB-составляющая Leonardo/Micro никак не соединена с 0-ым и 1-ым аналоговыми контактами, как на Uno и более ранних версиях Arduino. Таким образом, чтобы использовать аппаратный последовательный порт (контакты 0 и 1, RX и TX), используйте класс Serial1. Более подробно читайте тут.

Некоторые контакты выполняют другие функции

У модели Leonardo слегка другая распиновка (особенно это касается контактов SPI и TWI). Более подробно читайте на странице с аппаратным описанием Leonardo.

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

OSX

  • Когда Leonardo/Micro будет подключена к Mac в самый первый раз, запустится программа Keyboard Setup Assistant. Для Leonardo ничего настраивать не нужно, поэтому этот диалог можно спокойно закрыть, кликнув на красную кнопку в левой верхней части окна.

Windows

Ниже – инструкции для Windows 7. Впрочем, для Windows XP они тоже работают, но с той поправкой, что диалоговые окна будут немного отличаться.

  • Подключите плату и подождите, пока Windows начнет процесс установки драйвера. Если установщик не запустится автоматически, пройдите к «Менеджеру устройств» (кнопка «Пуск» > «Панель управления» > «Система и безопасность» > «Система»), найдите запись Arduino Leonardo, кликните по ней правой кнопкой мыши и выберите пункт «Обновить драйверы...»
  • На следующем экране выберите пункт «Выполнить поиск драйверов на этом компьютере» и кликните «Далее».
  • Нажмите на кнопку «Обзор...» Появится еще одно диалоговое окно, проследуйте в нем до папки с IDE Arduino, которую вы только что загрузили. Выберите папку drivers и кликните ОК, а затем «Далее».
  • Вы получите уведомление о том, что устанавливаемое ПО не проверялось на совместимость с Windows. Кликните на «Все равно продолжить».
  • Спустя некоторое время это окно сообщит, что мастер закончил установку ПО для Arduino Leonardo. Нажмите кнопку «Закрыть».

Linux

Для Ubuntu 10.0.4 драйвера устанавливать не нужно.

Загрузка кода на Leonardo и Micro

В целом загрузка кода на Leonardo и Micro осуществляется так же, как на Uno и другие Arduino. Кликните на кнопку «Загрузка» в IDE Arduino и ваш скетч будет автоматически загружен на плату, а потом запущен. Это работает примерно так – IDE Arduino инициирует сброс платы, запуская загрузчик, который ответственен за получение, хранение и запуск нового скетча.

Но порт виртуальный, поэтому после сброса платы он пропадет, и по этой причине IDE Arduino выполняет синхронизацию загрузки несколько иначе, чем для Uno и других Arduino. В частности, после инициации авто-сброса Leonardo/Micro (при помощи последовательного порта, выбранного в меню Инструменты > Порт) IDE Arduino будет ждать появления нового виртуального (CDC) последовательного / COM-порта – того, который, по его мнению, представляет загрузчик. После этого IDE Arduino выполнит загрузку скетча на вновь появившийся порт.

Это изменение влияет на то, как следует пользоваться ручной кнопкой сброса, если по какой-то причине не будет работать автоматический сброс. На Leonardo/Micro это делается следующим образом: зажмите кнопку сброса, а затем кликните на кнопку «Загрузка» в IDE Arduino. Отпускать кнопку сброса можно лишь тогда, когда в статусной панели IDE Arduino появится сообщение «Загружаем...» После того, как вы проделаете эти действия, запустится загрузчик и создаст на компьютере новый виртуальный (CDC) последовательный порт. IDE Arduino увидит этот порт и выполнит загрузку через него. Опять же, все это необходимо лишь в том случае, если у вас не работает нормальная процедура загрузки (т.е. простое нажатие на кнопку «Загрузка» в IDE Arduino).

Примечание: Автоматический сброс инициируется, когда компьютер открывает последовательный порт на скорости 1200 бод, а затем закрывает его. Но это не сработает, если что-то будет мешать USB-коммуникации платы. Например, отключение прерываний.

Рекомендации к программированию на Leonardo и Micro

Небольшое предупреждение насчет использования библиотек для USB-мышек и USB-клавиатур

Если библиотеки Mouse или Keyboard будут постоянно запущены, это затруднит программирование платы. Функции вроде Mouse.move() и Keyboard.print() используются для передвижения курсора и отправки на компьютер тех или иных клавишных значений, поэтому вызов этих функций нужно делать лишь тогда, когда вы будете готовы их обработать. Мы рекомендуем использовать для включения этого функционала специальную систему управления – например, добавить в схему физический переключатель или сделать так, чтобы вводимые данные были строго определенного типа (т.е. те, что вы могли бы контролировать). При использовании библиотек Mouse или Keyboard сначала лучше протестировать, какими будут выходные данные, и это делается при помощи функции Serial.print(). Благодаря ей вы можете удостовериться, правильные ли отправляются значения. Более подробно об этом читайте в статьях о скетчах-примерах для библиотек Mouse и Keyboard.

Советы по использованию «Монитора порта»

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

Таким образом, если последовательная коммуникация будет вестись непрерывно, например, с помощью такого кода...

void loop() {
    int sensorReading = analogRead(A0);
    Serial.println(sensorReading);
}

...то эффективность работы «Монитора порта» в IDE Arduino может существенно снизиться, т.к. он будет пытаться успевать за процессом передачи данных. Если вы встретились с этой проблемой, добавьте в цикл короткую задержку, чтобы буфер заполнялся не так быстро. Хватит даже миллисекунды...

void loop() {
    int sensorReading = analogRead(A0);
    Serial.println(sensorReading);
    delay(1);
}

Приложения, использующие родные библиотеки, а не RXTX-библиотеку, считывают буфер быстрее, поэтому эта проблема, скорее всего, будет встречаться лишь в том ПО, где используется RXTX-коммуникация – в «Мониторе порта» IDE Arduino, Processing и т.д.

См.также

Внешние ссылки