Всем доброго времени суток! Эта статья положит начало новому разделу нашего сайта, посвященному программированию Arduino. С течением времени эта платформа становится все более популярной среди любителей электроники, поэтому, несмотря на существование разнообразных курсов, было принято решение создать свой, самый лучший 🙂 И в этой конкретной статье разберем некоторые основополагающие понятия, которыми будем оперировать в дальнейшем. Так что сегодня будет своего рода введение, к которому плавно и переходим.
Физическая составляющая платформы Ардуино.
Что же из себя представляет Arduino? Физически - это обычная отладочная плата на базе микроконтроллера AVR. И тут логичным образом переходим к вопросу, что такое отладочная плата в целом.
Итак, непосредственно микроконтроллер может выглядеть так:
Для его работы требуется как минимум подать напряжение питания, что сделать с «голым» контроллером проблематично как минимум из-за его небольших размеров (на то он и микроконтроллер). Плюс смысл применения контроллера заключается в том, что он, например, принимает некоторые сигналы (от неких датчиков) и выдает, в свою очередь, обработанные данные или сигналы во внешний мир. Из чего вытекает еще и необходимость дополнительных подключений, помимо подачи питания и другой минимально необходимой обвязки (конденсаторов и им подобных элементов). Все это, мягко говоря, неудобно, и решением данной проблемы является использование отладочных плат.
Таким образом, отладочная плата представляет из себя микроконтроллер, а также все необходимое для его функционирования, смонтированное в виде единого законченного девайса:
У меня здесь показано на примере платы Arduino Uno, а вот в этой статье можно подробнее ознакомиться с другими вариантами. В итоге для подключения Ардуино и начала работы достаточно только обзавестись USB-кабелем, а для управления или получения данных с внешних устройств используются предусмотрительно установленные разъемы, на которые выведены порты ввода-вывода контроллера:
Таких плат полно для любых микроконтроллеров, к примеру, одна из наиболее популярных плат на базе STM32:
Как видите, идея точно такая же. Содержимое платы, виды разъемов, а также количество доступных сигналов контроллера могут быть абсолютно разными, сути это не меняет, отладочная плата NUCLEO-H743ZI на базе STM32H743:
Подключение Ардуино.
Что из себя физически представляет плата Arduino понятно, но причина популярности платформы кроется совсем в другом, а именно в способе взаимодействия с ней.
В целом, задачей микроконтроллера является выполнения программы, помещенной (прошитой) в него разработчиком. И для осуществления процесса прошивки используются специальные устройства под названием "программатор". Для микроконтроллера AVR, который и установлен на платах Ардуино, один из наиболее распространенных программаторов выглядит так:
У него имеется 6 сигналов на выходе, которые необходимо подключить к определенным ножкам МК (микроконтроллера). На плате Arduino такой разъем присутствует, вот он:
Но! На практике он почти никогда не используется, почему, сейчас разберем, в этом и кроется основная идея.
Итак, разобьем процесс программирования Ардуино на несколько этапов. Обычный путь создания прошивки для микроконтроллера можно описать следующим образом:
- Написание текста программы.
- Компиляция и сборка программы - результатом будет файл, который загружается в МК.
- Прошивка - непосредственно загрузка файла из шага 2 в память контроллера.
Для выполнения операции под номером 3 и требуется программатор. Но Arduino дает возможность обойтись без него, а выполнять прошивку, просто подключив плату по USB. Работает это все так… Память микроконтроллера разбивается на две части:
Первая часть используется исключительно для пользовательской программы (application), а вот вторая зарезервирована под специальный загрузчик (bootloader). Работа этого загрузчика заключается в том, что он принимает данные (пользовательскую программу) извне (от компьютера или другого МК, в случае Arduino байты проникают в плату посредством USB) и сам записывает эти данные во внутреннюю память контроллера, в соответствующую часть.
Что это нам дает? А то, что не требуется покупать отдельный программатор и, по сути, для работы платы нужен только компьютер и USB-кабель 👍
Программирование Ардуино.
Переходим к программной части, и тут еще одна отличительная особенность Arduino. Опять же, в целом, взаимодействие с микроконтроллером заключается в записи определенных значений в его регистры. Для облегчения и ускорения данной деятельности существуют дополнительные библиотеки, которые упрощают процесс. Например, позволяют вызывать некие функции с понятным названием вместо того, чтобы взаимодействовать с регистрами напрямую. Конечно же пример, как без него, вариант с использованием библиотеки:
// Настройка порта на работу в режиме входа int inputPin = 4; pinMode(inputPin, INPUT_PULLUP); // Проверка состояния на входе if (digitalRead(inputPin) == HIGH) { // Высокий уровень } else { // Низкий уровень }
Те же самые действия, но с регистрами напрямую:
// Настройка порта на работу в режиме входа DDRB &= ~(1 << PINB4); // Проверка состояния на входе if ((PINB & (1 << PINB4)) == (1 << PINB4)) { // Высокий уровень } else { // Низкий уровень }
Собственно, разница налицо. Таким образом, при разработке нужно те или иные библиотеки подключать к проекту, настраивать и т. д. Arduino же имеет свою собственную среду разработки – Arduino IDE – то есть редактор, непосредственно в котором нужно писать свою программу, которая затем (вспоминаем предыдущий раздел) отправляется в память микроконтроллера. При этом Arduino IDE уже включает в себя и необходимые библиотеки и механизм для загрузки программы в микроконтроллер, подключенный к компьютеру по USB.
Собираем озвученное воедино и на практике имеем тот факт, что для полноценного использования платы Ардуино необходимы только:
- Компьютер с Arduino IDE.
- USB-кабель.
- Сама плата.
Все, на этом точка, минимальный набор инструментов:
А учитывая тот факт, что Arduino IDE еще и процесс разработки делает максимально простым, то имеем по итогу платформу, начать работу с которой можно с минимальным порогом вхождения, то есть максимально просто. Это и делает Arduino настолько популярной среди абсолютно разных категорий пользователей. Кроме того, среда разработки абсолютно бесплатна.
Конечно же есть и ложка/половник дегтя. Практически за всякое удобство и упрощение нужно чем-то платить, в частности, оптимальностью и производительностью. Тот же bootloader занимает часть памяти контроллера, делая ее недоступной для пользователя. Программа, использующая готовые библиотеки Ардуино, становится зачастую менее оптимальной, как с точки зрения производительности, так и с точки зрения быстродействия.
Но при всем при этом плюсы порой перевешивают минусы, все зависит от конкретного проекта и от конкретной задачи. Поэтому Arduino полностью заслуженно занимает свою нишу и является в ней невероятно популярной и распространенной.
Вообще-то, в вводной статье я планировал охватить еще пару тем, чтобы затем сразу перейти к делу, но получилось довольно объемно, значит будет несколько вводных статей, не проблема. А на сегодня заканчиваем, всех благодарю за внимание 🤝
Спасибо за Ваши материалы! Знайте, Вас читают и Вам очень благодарны!
Благодарю за прекрасный отзыв! Думаю скоро активно займусь сайтом )