View Categories

Что такое Arduino

Что такое Arduino? Формально это торговая марка, под которой выпускаются официальные платы и программы. Название Arduino идёт от одноименного названия забегаловки в Италии, где создатели любили пропустить по рюмочке. С точки зрения использования, Arduino - это платформа для разработки электронных устройств, точнее их прототипов и макетов. Включает в себя железо (платы) и софт (среда разработки и набор библиотек).

Рекомендуется изучить следующие уроки:

  • Устройство процессора
  • Программирование процессора
  • Микроконтроллер

Семейство плат Arduino – несколько моделей так называемых отладочных плат. Отладочная плата представляет собой печатную плату, на которой стоит микроконтроллер (далее МК) – та самая штука, которую мы будем программировать. В младших платах Arduino используются МК семейства AVR (UNO, Nano, Mega, Leonardo), в современных моделях стоят более мощные контроллеры для серьёзных проектов.


Микроконтроллеры на платах Arduino

Микроконтроллер #

МК - это практически полноценный компьютер, умещённый в одной маленькой микросхеме - чёрный квадратик с ножками. В его состав входят следующие "блоки":

  • Процессор - вычислительный центр, мозг МК. Он умеет выполнять заданную программу, производить вычисления и управлять остальными блоками
  • Память - в ней хранится программа, которую будет выполнять процессор. Во временной памяти хранятся временные данные и промежуточные результаты вычислений
  • Интерфейсы связи - с их помощью МК может обмениваться данными с внешними устройствами и другими микросхемами (датчиками, внешней памятью)
  • Интерфейс ввода-вывода - позволяет подавать напряжение на ножки МК, а также читать поданное на них "снаружи" напряжение
  • Различные блоки специального назначения - таймеры, часы, измерители и генераторы сигналов, блоки шифрования...

По заданной программе МК может общаться с другими устройствами, производить вычисления, измерять и выдавать напряжение и так далее. Это позволяет создавать на базе МК самостоятельные устройства практически любой сложности - от светодиодной мигалки до 3D принтера или шагающего робота с камерой. Никаких ограничений нет, возможно всё.

Отладочная плата #

Работать напрямую с МК не очень удобно, но тоже возможно - достаточно подключить к нему питание и тактовый генератор (на борту у МК может быть свой генератор). Для загрузки программы с компьютера в контроллер понадобится дополнительное устройство - программатор. Для подключения всего этого и различных внешних датчиков придётся припаиваться напрямую к ножкам МК - они маленькие, это неудобно. Для этого и существуют отладочные платы, на них обычно есть:

  • Сам МК и всё необходимое для его стабильной работы
  • Кнопка перезагрузки МК и другие кнопки
  • Светодиоды для отладки
  • Средства для загрузки программы через бортовой USB порт
  • Пины с шагом 2.54мм по краям платы для удобного подключения внешних устройств и сборки макетов

Ардуино является открытой платформой, поэтому модельный ряд постоянно пополняется неофициальными платами от других производителей, такие платы называют "Arduino-совместимыми". С ними можно работать в официальной программе Arduino IDE, писать на том же языке с тем же набором команд и даже использовать те же библиотеки! Платы Teensy, платы на базе МК ESP32 и ESP8266 (Wemos, NodeMCU) и так далее. Если оригинальные платы стоят довольно дорого, то "китайские клоны", которые ничем не хуже, стоят практически по себестоимости компонентов - в среднем от 100 до 300р за плату в зависимости от "мощности" процессора.

В этом и состоит первая половина Ардуино как платформы: нам не нужно задумываться о правильном подключении, особенностях работы и способе загрузке программы на конкретную модель МК - достаточно купить плату, подключить её к компьютеру и начать работать.

Программирование #

Микроконтроллеры могут программироваться на разных языках программирования, но самые распространённые - C и C++ (C++ является расширенной версией C и почти полностью с ним совместим). C/C++ очень лёгкий и быстрый для выполнения на слабом процессоре, а также достаточно универсальный для создания программ любой сложности и возможностей.

Если мы пишем программу для компьютера, то там всё довольно просто и стандартизированно - есть готовые инструменты и библиотеки для работы с клавиатурой, для вывода на дисплей и так далее. Они будут работать условно на любом процессоре, потому что мы пишем программу не под процессор, а под операционную систему (Windows, Linux, Mac), и всё необходимое она сделает за нас.

Микроконтроллер же содержит в себе множество специальных блоков, которых нет у компьютерного процессора, и работа с этими блоками выполняется при помощи специальных инструкций. Формат записи этих инструкций, как и особенности работы самих блоков очень сильно отличаются не только у разных семейств МК, но и в рамках одного семейства!

Чтобы заставить МК выполнять какую-то задачу, нужно не только знать C/C++, но и уметь работать с конкретной моделью МК, уметь пользоваться документацией и другой связанной с ним справочной информацией

Wiring #

Раньше "порог входа" в программирование МК был довольно высоким - нужно было научиться программировать, а затем освоить особенности работы с конкретным семейством или моделью МК. Требовалось какое-то универсальное решение, и вскоре оно появилось - в 2004 году вышел открытый фреймворк Wiring.

По сути - это набор библиотек для выполнения некоторых типовых действий с МК: подать напряжение на ножку, измерить напряжение, подождать время, отправить данные по одному из интерфейсов связи и так далее. Суть в том, что это именно фреймворк (framework, каркас) - то есть фиксированный набор инструментов, который будет работать одинаково на любом микроконтроллере, который его поддерживает. Можно взять абсолютно любой МК, реализовать эти инструменты с учётом его особенностей и запустить на нём программу, которая написана с использованием фреймворка. Другими словами, разрабатывать программу не под конкретный МК с его особенностями, а под фреймворк - тогда такая программа сможет практически без изменений запускаться на других МК, для которых существует своя версия фреймворка. А так как фреймворк открытый и "народный" - можно самостоятельно написать поддержку для любого МК и добавить эту версию в общий каталог.

Библиотека - набор файлов с кодом, которым мы можем пользоваться просто ознакомившись с документацией или посмотрев примеры. Такой подход называется "черным ящиком", мы можем даже не догадываться, насколько сложный код содержится в библиотеке, но будем с лёгкостью пользоваться возможностями, который этот код даёт

Более того, если писать библиотеки под фреймворк, то они тоже смогут работать на всех МК, которые его поддерживают. На момент написания урока в открытой базе библиотек Arduino находится более 7000 библиотек под различные датчики, модули, дисплеи, камеры, цифровые микросхемы и так далее. Сейчас достаточно купить любой модуль, найти к нему готовую библиотеку и уже через 5 минут получить рабочее устройство. Это буквально обрушило порог вхождения в разработку электроники почти до нуля: никакого копания в документации и низкоуровнего программирования - берёшь готовый удобный инструмент и просто его используешь.

Плюсы использования фреймворка:

  • Простой переход с одной модели МК на другой, например если не хватает памяти или свободных пинов
  • Огромное количество библиотек под любые железки и задачи
  • Крайне низкий порог вхождения в работу с микроконтроллерами
  • Высокая скорость разработки проекта на любом железе

Минусы:

  • Фреймворк охватывает только самые базовые возможности, для работы с некоторыми блоками МК всё так же нужно писать специальный низкоуровневый код или использовать библиотеки
  • Фреймворк "настраивает" некоторые блоки МК под свои нужды, эти настройки могут конфликтовать с настройками, которые программист захочет изменить вручную под себя
  • Некоторые инструменты могут быть реализованы в фреймворке неэффективно в угоду универсальности - выполняться медленнее, чем при работе с МК "напрямую"

Arduino #

Помимо самой идеи и реализации под некоторые модели МК, Wiring предлагает также свою среду разработки - Wiring IDE, в которой можно писать код и загружать его одним кликом мыши по кнопке "загрузка". Уже на следующий год, в 2005, Arduino делает свою ветку фреймворка Wiring под своим брендом и выпускает одноимённую Arduino IDE:


Найди 10 отличий

На каком языке программируется Arduino? Многие называют его "упрощённый C++", "разновидность C++", "язык Ардуино", сами Arduino называют его "Arduino Wiring" или "Arduino Programming Language". Но на самом деле язык здесь - самый обыкновенный C++ со всем соответствующим ему синтаксисом и возможностями, операторами и прочими инструментами. Программа в Arduino IDE компилируется самым обыкновенным компилятором, который содержит набор стандартных библиотек C/C++, а также иногда набором специальных библиотек для конкретного семейства МК. Arduino же - фреймворк, по сути - "библиотека" с набором дополнительных удобных инструментов для работы с МК. Но есть и несколько отличий.

Минимальная программа #

Фреймворк Arduino слегка меняет стандартный вид программы на C/C++, которая выглядит вот так:

// минимальная программа на C/C++

int main() {
    // код программы
}
// минимальная программа на Arduino фреймворке

void setup() {
    // выполнится однократно при запуске МК
}

void loop() {
    // будет выполняться циклично на всём протяжении работы МК
}

Это сделано для того, чтобы фреймворк мог выполнять свой служебный код в нужных ему моментах, например при запуске МК он производит некоторую инициализацию оборудования, а затем запускает наш код из блока setup. Далее программа начинает работать в бесконечном цикле, в котором фреймворк тоже делает какие-то свои дела, а затем вызывает наш блок кода loop.

Критика с дивана #

"Чистый Си" без библиотек #

Очень многие считают, что эффективный код нужно писать без библиотек, чистым полотном. Это полнейшая чушь, потому что:

  • Современные МК имеют достаточно памяти для того, чтобы разработчик мог позволить себе сэкономить время и использовать готовые высокоуровневые инструменты. Более того, серьёзные разработки делаются с использованием операционных систем реального времени, которые сами по себе являются огромной тяжёлой библиотекой. Никто не пишет на ассемблере, за окном не 1970 год
  • Компилятор самостоятельно "вырежет" неиспользуемый код из библиотеки
  • Если писать крупный проект чисто голым кодом - это будет полотно на несколько тысяч строк, в котором невозможно будет разобраться. Программу разбивают на файлы и модули – по сути на те же самые библиотеки! Некоторые алгоритмы и части программы изначально удобно обернуть в независимую библиотеку и использовать в том числе для других проектов, чтобы не писать их заново. Так что писать без библиотек невозможно в принципе, неважно скачаете ли вы её с интернета или напишете сами
  • Если вы новичок, то в 99% библиотека из интернета будет написана и оптимизирована в разы лучше, чем ваш код

Хейтеры #

В мире серьезных программистов и разработчиков очень не любят Ардуино. Почему? Рассмотрим несколько популярных негативных комментариев о платформе:

В среде Arduino IDE работа с МК упрощена настолько, что ардуинщику вообще ничего не нужно знать о его архитектуре и о том, как он вообще программируется и настраивается: все сделано в виде готовых и понятных функций

  • С каких пор удобство и простота стали плохими? Для новичка это единственный способ познакомиться с миром робототехники без изучения кипы документации и получения соответствующего образования. Ардуино создана в первую очередь для обучения, а во вторую – для быстрого и удобного создания прототипов электронных устройств, в этом её суть

Это всё конечно хорошо, но скрытый за ширмой дружелюбного "Ардуино Вайринга" код ужасает: за безобидными на первый взгляд функциями кроются полотна кода, который что-то проверят, перепроверяет, перенастраивает уже настроенное и делает многие другие на первый взгляд ненужные вещи. Это безобразие работает очень медленно и занимает кучу места!

  • Да, стандартные инструменты имеют множество защит "от дурака", они тяжёлые и медленные (не все). Но новичок и не сможет написать такой код, где скорость и память будут настолько критичны! А если понадобится, то к этому времени он уже будет в состоянии писать код оптимально и использовать более эффективные инструменты, а при желании сделает свою ветку фреймворка с блэкджеком и пряниками

Стандартные инструменты фреймворка описывают незначительную часть всех возможностей и настроек, которые есть в МК

  • А никто и не обещал вам HAL! Возможности МК раскрываются при использовании библиотек, благо сообщество действительно огромное. Также всегда можно научиться работать с документацией и настраивать всё что угодно и как угодно вручную

Arduino IDE "скрывает" от пользователя важные низкоуровневые настройки

  • И правильно делает! Одна ошибка – и ты ошибся, остался с заблокированным МК. При желании через Arduino IDE можно и фьюзы прошить, и под другие частоты настроить, но для этого всё таки лучше использовать специализированные утилиты

Ардуино для детей! Серьёзные дяди работают с "голым камнем"

  • Всё верно, для детей и домохозяек. Плата Ардуино задумана для создания макетов, прототипов, её можно рассматривать как часть электронного "конструктора" для обучения. На плате есть вся необходимая обвязка, почему не использовать её даже как сердце готового проекта?

Arduino IDE для детей! Серьёзные дяди работают во взрослых средах разработки

  • Верно, но есть небольшой нюанс: Arduino IDE официально бесплатная, после простой установки (Далее, Далее, Далее, Готово) она сразу готова к работе: достаточно выбрать плату из списка и начать писать и загружать код. Взрослые среды разработки требуют взрослого подхода и порог вхождения для работы с ними несоизмеримо высок. Помимо непростой установки и настройки вас ждут расширенные настройки самого МК, чтение документации и даташитов, "взрослый" интерфейс и множество нюансов в самом программировании и настройках компилятора. Времени на изучение этого всего уйдёт много, а нормальных уроков вы скорее всего не найдёте

Ардуинщики ходят по замкнутому кругу, они никогда не разовьются дальше мигания светодиодом

  • Платформа ничем не ограничивает разработчика, но если он сам не захочет - не разовьётся. Автор данных уроков не считает себя сильно развитым, но вроде в основах разбирается неплохо

На Ардуино нельзя создать что-то реально сложное и интересное

  • Скажите это ЧПУ станкам (прошивка GRBL), 3D принтерам (прошивка Marlin), квадрокоптерам и самолётам (прошивка Ardupilot) и многим другим крупным проектам

А STM32 лучше! И в разы мощнее! И возможностей у неё больше! И она дешевле!!!

  • Да, да, да. Но не забывайте про порог вхождения и размер сообщества с контентом, библиотеками и примерами "для новичков", а также о сложности работы с STM в целом. Также под STM очень мало библиотек, а ещё меньше - нормальных или хотя бы работающих без багов

Качество кода "с форумов" просто ужасное

  • Да, из-за простых, но понятных стандартных примеров аудитория ардуинщиков выросла очень быстро и буквально завалила интернет своими проектами, завлекая тем самым в это хобби других новичков. 99% обучающих примеров к библиотекам написаны с целью показать работу библиотеки, а не научить программировать. Люди берут эти примеры за основу и продолжают дальше писать так же и делиться им, а другие видят этот код и тоже придерживаются чужого стиля. В идеале должно быть наоборот - сначала учимся писать код и оформлять его по всем правилам и хорошим практикам, а затем уже делать проекты. Но никто так не делает, для этого я и пишу эти уроки

Что ещё хочется сказать по поводу негатива от "профессионалов" – в большинстве случаев они просто завидуют: в "их время" для создания даже простенького проекта на базе МК нужно было потратить огромное количество времени на изучение документации на все используемые железки на английском языке, научиться работать в недружелюбной среде разработки, развести и спаять плату, купить дорогой программатор и прочее прочее. А в наше время можно купить плату за 150р, воткнуть её в USB, запустить программу вида "блокнот с кнопкой Загрузить" и начать кодить с использованием огромного количества готовых библиотек и примеров для практически любых железок на рынке, а на любой свой вопрос можно найти ответ в гугле или спросить у нейросети.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх