Ардуино уно система команд. Arduino Uno: программирование 8-битного микроконтроллера с использованием 32-битных типов данных

Как работает Arduino Uno с 8-битным микроконтроллером при использовании 32-битных типов данных в программе. Какую роль играет компилятор в этом процессе. Какие особенности нужно учитывать при программировании.

Содержание

Архитектура Arduino Uno и ее влияние на программирование

Arduino Uno построен на базе 8-битного микроконтроллера ATmega328P от Atmel (теперь часть Microchip Technology). Это означает, что внутренняя архитектура микроконтроллера оптимизирована для работы с 8-битными данными. Давайте разберем, что это значит на практике:

  • Регистры процессора имеют ширину 8 бит
  • Шина данных также 8-битная
  • Арифметико-логическое устройство (АЛУ) выполняет операции над 8-битными числами
  • Большинство инструкций процессора работают с 8-битными операндами

Однако это не означает, что вы ограничены только 8-битными вычислениями. Современные компиляторы позволяют использовать более широкие типы данных, эффективно разбивая операции на последовательность 8-битных инструкций.


Роль компилятора в обработке многобайтных типов данных

Когда вы программируете Arduino Uno, вы обычно используете Arduino IDE, которая под капотом использует компилятор avr-gcc. Этот компилятор играет ключевую роль в преобразовании вашего высокоуровневого кода на C++ в машинные инструкции для ATmega328P.

Рассмотрим пример использования 32-битного целого числа:

«`cpp uint32_t largeNumber = 1000000000; // 1 миллиард largeNumber += 500000000; // Добавляем еще полмиллиарда Serial.println(largeNumber); «`

Компилятор выполняет следующие шаги при обработке этого кода:

  1. Разбивает 32-битное число на четыре 8-битных фрагмента
  2. Генерирует последовательность инструкций для выполнения операции сложения по частям
  3. Обрабатывает переносы между байтами
  4. Сохраняет результат как 32-битное значение в памяти
  5. Генерирует код для вывода этого 32-битного значения через Serial

Все это происходит автоматически, позволяя вам работать с большими числами, несмотря на ограничения базового оборудования.


Влияние использования многобайтных типов на производительность

Использование типов данных, превышающих естественную разрядность процессора, имеет свои последствия:

  • Увеличивается размер кода: каждая операция с многобайтным типом требует нескольких инструкций
  • Снижается скорость выполнения: обработка многобайтных чисел занимает больше тактов процессора
  • Возрастает потребление памяти: многобайтные переменные занимают больше места в ОЗУ

Поэтому при программировании микроконтроллеров важно выбирать наименьший подходящий тип данных для каждой переменной. Это помогает оптимизировать использование ресурсов устройства.

Когда стоит использовать многобайтные типы на Arduino Uno?

Несмотря на накладные расходы, есть ситуации, когда использование типов данных больше 8 бит оправдано:

  • При работе с большими числами (например, миллисекунды в функции millis())
  • При выполнении точных вычислений, требующих высокой точности
  • При обработке данных с внешних устройств, использующих широкие форматы данных
  • В алгоритмах, где преимущества использования больших типов перевешивают потери в производительности

Оптимизация кода при использовании многобайтных типов

Если вам необходимо использовать 32-битные или более широкие типы данных, вот несколько советов по оптимизации:


  1. Используйте целочисленные типы вместо чисел с плавающей точкой, где это возможно
  2. Применяйте битовые операции вместо умножения и деления на степени двойки
  3. Избегайте ненужных преобразований типов
  4. Используйте библиотеки, оптимизированные для работы с большими числами на AVR

Рассмотрим пример оптимизации:

«`cpp // Менее оптимальный вариант uint32_t value = someFunction(); value = value * 4; // Более оптимальный вариант uint32_t value = someFunction(); value <<= 2; // Умножение на 4 с помощью побитового сдвига ```

Инструменты для анализа использования ресурсов

Чтобы оценить влияние использования многобайтных типов на ваш проект, можно использовать следующие инструменты:

  • Arduino IDE: Показывает размер скомпилированного скетча
  • avr-size: Утилита командной строки для анализа размера секций программы
  • avr-objdump: Позволяет просмотреть ассемблерный код, сгенерированный компилятором

Эти инструменты помогут вам понять, как ваш выбор типов данных влияет на эффективность использования ресурсов микроконтроллера.

Заключение

Программирование Arduino Uno с использованием многобайтных типов данных — это компромисс между удобством разработки и эффективностью использования ресурсов. Понимание того, как компилятор обрабатывает эти типы, позволяет принимать обоснованные решения при разработке проектов на базе 8-битных микроконтроллеров.


Ключ к успешному программированию на Arduino Uno — это баланс между использованием возможностей языка C++ и учетом ограничений базового оборудования. С правильным подходом вы сможете создавать сложные и эффективные проекты, несмотря на кажущиеся ограничения 8-битной архитектуры.


Структура микроконтроллеров — Ардуино_Лаб. практикум


Подборка по базе: Теория и методика физического воспитания с практикумом.rtf, Новое пособие по WORD. Лабораторный практикум Часть 2 (3).doc, Теория и методика физического воспитания с практикумом.rtf, Трудовое право. Практикум.pdf, история практикум.doc, ГОТОВЫЙ Практикум тактика 2020.docx, МУконт_Общий психологический практикум_37.03.01 Психология_часть, 1. Практикум по ОБЖ.doc, теплотехника практикум.docx, Лабораторный практикум по Word_4 (функция слияния_политология).p
1.2
Структура микроконтроллеров
Структура модульного микроконтроллера приведена на рисунке 4.
Рисунок 4 – Модульная организация микроконтроллера
Процессорное ядро включает в себя:
— центральный процессор;
— внутреннюю контроллерную магистраль (ВКМ) в составе шин адреса, данных и управления;
— схему синхронизации микроконтроллера;
— схему управления режимами работы микроконтроллера, включая поддержку режимов пониженного энергопотребления, начального запуска (сброса) и т.д.
Изменяемый функциональный блок включает в себя модули памяти различного типа и объема, порты ввода/вывода, модули тактовых генераторов (Г), таймеры. В относительно простых микроконтроллерах модуль обработки прерываний входит в состав процессорного ядра. В более сложных микроконтроллерах он представляет собой отдельный модуль с развитыми возможностями. В состав изменяемого функционального блока могут входить и такие дополнительные модули как компараторы напряжения, аналого- цифровые преобразователи (АЦП) и другие. Каждый модуль проектируется для работы в составе микроконтроллера с учетом протокола ВКМ. Данный подход позволяет создавать разнообразные по структуре микроконтроллеры в пределах одного семейства.

1.2.1
Процессорное ядро микроконтроллера
Структура процессорного ядра микроконтроллера. Основными характеристиками, определяющими производительность процессорного ядра микроконтроллера, являются: а) набор регистров для хранения промежуточных данных; б) система команд процессора; в) способы адресации операндов в пространстве памяти; г) организация процессов выборки и исполнения команды.
С точки зрения системы команд и способов адресации операндов процессорное ядро современных 8-разрядных микроконтроллеров реализует один из двух принципов построения процессоров CISC и
RISC.
К микроконтроллерам с
CISC-архитектурой относятся микроконтроллеры фирмы Intel с ядром MCS-51, которые поддерживаются в настоящее время целым рядом производителей, микроконтроллеры семейств НС05, НС08 и НС11 фирмы Motorola и ряд других.
В процессорах с RISC-архитектурой набор исполняемых команд сокращен до минимума. Для реализации более сложных операций приходится комбинировать команды. При этом все команды имеют формат фиксированной длины (например, 12, 14 или 16 бит), выборка команды из памяти и ее исполнение осуществляется за один цикл
(такт) синхронизации. Система команд RISC-процессора предполагает возможность равноправного использования всех регистров процессора. Это обеспечивает дополнительную гибкость при выполнении ряда операций. К микроконтроллерам с RISC- процессором относятся микроконтроллеры AVR фирмы Atmel, микроконтроллеры PIC16 и PIC17 фирмы Microchip и другие.
На первый взгляд, микроконтроллеры с RISC-процессором должны иметь более высокую производительность по сравнению с
CISC микроконтроллерами при одной и той же тактовой частоте внутренней магистрали.
Однако на практике вопрос о производительности более сложен и неоднозначен.
Во-первых, оценка производительности микроконтроллеров по времени выполнения команд различных систем (RISC и CISC) не совсем корректна. Обычно производительность микропроцессоров и микроконтроллеров принято оценивать числом операций пересылки
«регистр-регистр», которые могут быть выполнены в течение одной секунды. В микроконтроллерах с CISC-процессором время выполнения операции «регистр-регистр» составляет от 1до 3 циклов,

что, казалось бы, уступает производительности микроконтроллера с
RISC-процессором. Однако стремление к сокращению формата команд при сохранении ортогональности системы команд RISC- процессора приводит к вынужденному ограничению числа доступных в одной команде регистров. Так, например, системой команд микроконтроллера PIC16 предусмотрена возможность пересылки результата операции только в один из двух регистров – регистр- источник операнда f или рабочий регистр W. Таким образом, операция пересылки содержимого одного из доступных регистров в другой (не источник операнда и не рабочий) потребует использования двух команд. Такая необходимость часто возникает при пересылке содержимого одного из регистров общего назначения (РОН) в один из портов микроконтроллера. В то же время, в системе команд большинства CISC-процессоров присутствуют команды пересылки содержимого РОН в один из портов ввода/вывода. То есть более сложная система команд иногда позволяет реализовать более эффективный способ выполнения операции.
Во-вторых, оценка производительности микроконтроллера по скорости пересылки «регистр-регистр» не учитывает особенностей конкретного реализуемого алгоритма управления. Так, при разработке быстродействующих устройств автоматизированного управления основное внимание следует уделять времени выполнения операций умножения и деления при реализации уравнений различных передаточных функций. А при реализации пульта дистанционного управления бытовой техникой следует оценивать время выполнения логических функций, которые используются при генерации последовательной кодовой посылки управления. Поэтому в критических ситуациях, требующих высокого быстродействия, следует оценивать производительность на множестве тех операций, которые преимущественно используются в алгоритме управления и имеют ограничения по времени выполнения.
В-третьих, необходимо еще учитывать, что указанные в справочных данных на микроконтроллеры частоты синхронизации обычно соответствуют частоте подключаемого кварцевого резонатора, в то время как длительность цикла центрального процессора определяется частотой обмена по ВКМ. Соотношение этих частот индивидуально для каждого микроконтроллера и должно быть принято в расчет при сравнении производительности различных моделей контроллеров.
С точки зрения организации процессов выборки и исполнения команды в современных
8-разрядных микроконтроллерах

применяется одна из двух уже упоминавшихся архитектур МПС: фон неймановская (принстонская) или гарвардская.
Гарвардская архитектура почти не использовалась до конца 70-х годов, пока производители микроконтроллеров не поняли, что она дает определенные преимущества разработчикам автономных систем управления.
Дело в том, что, судя по опыту использования МПС для управления различными объектами, для реализации большинства алгоритмов управления такие преимущества фон-неймановской архитектуры как гибкость и универсальность не имеют большого значения. Анализ реальных программ управления показал, что необходимый объем памяти данных микроконтроллеров, используемый для хранения промежуточных результатов, как правило, на порядок меньше требуемого объема памяти программ. В этих условиях использование единого адресного пространства приводило к увеличению формата команд за счет увеличения числа разрядов для адресации операндов. Применение отдельной небольшой по объему памяти данных способствовало сокращению длины команд и ускорению поиска информации в памяти данных.
Кроме того, гарвардская архитектура обеспечивает потенциально более высокую скорость выполнения программы по сравнению с фон- неймановской за счет возможности реализации параллельных операций. Выборка следующей команды может происходить одновременно с выполнением предыдущей, и нет необходимости останавливать процессор на время выборки команды. Этот метод реализации операций позволяет обеспечивать выполнение различных команд за одинаковое число тактов, что дает возможность более просто определить время выполнения циклов и критичных участков программы.
Большинство производителей современных
8-разрядных микроконтроллеров используют гарвардскую архитектуру. Однако гарвардская архитектура является недостаточно гибкой для реализации некоторых программных процедур. Поэтому сравнение микроконтроллеров, выполненных по разным архитектурам, следует проводить применительно к конкретному приложению.
Система команд процессора микроконтроллера. Так же, как и в любой микропроцессорной системе, набор команд процессора микроконтроллера включает в себя четыре основные группы команд:
— команды пересылки данных;
— арифметические команды;
— логические команды;

— команды переходов.
Для реализации возможности независимого управления разрядами портов (регистров) в большинстве современных микроконтроллеров предусмотрена также группа команд битового управления (булевый или битовый процессор). Наличие команд битового процессора позволяет существенно сократить объем кода управляющих программ и время их выполнения.
В ряде микроконтроллеров выделяют также группу команд управления ресурсами контроллера, используемую для настройки режимов работы портов ввода/вывода, управления таймером и т.п. В большинстве современных микроконтроллеров внутренние ресурсы контроллера отображаются на память данных, поэтому для целей управления ресурсами используются команды пересылки данных.
Система команд микроконтроллеров по сравнению с системой команд универсального МП имеет, как правило, менее развитые группы арифметических и логических команд, зато более мощные группы команд пересылки данных и управления. Эта особенность связана со сферой применения микроконтроллеров, требующей, прежде всего, контроля окружающей обстановки и формирования управляющих воздействий.
Схема синхронизации микроконтроллера. Схема синхронизации микроконтроллер обеспечивает формирование сигналов синхронизации, необходимых для выполнения командных циклов центрального процессора, а также обмена информацией по внутренней магистрали. В зависимости от исполнения центрального процессора командный цикл может включать в себя от одного до нескольких (4–6) тактов синхронизации. Схема синхронизации формирует также метки времени, необходимые для работы таймеров микроконтроллера. В состав схемы синхронизации входят делители частоты, которые формируют необходимые последовательности синхросигналов.
Память программ и данных микроконтроллера.
В микроконтроллерах используется четыре основных вида памяти:
1) Память программ представляет собой постоянную память
(ПЗУ), предназначенную для хранения программного кода (команд) и констант. Ее содержимое в ходе выполнения программы не изменяется.
2) Память данных предназначена для хранения переменных в процессе выполнения программы и представляет собой ОЗУ.

3) Энергонезависимая память данных предназначена для хранения данных, которые должны сохраниться при пропадании питания микроконтроллера. Обычно выполнено в виде EEPROM.
4) Регистры микроконтроллера− этот вид памяти включает в себя внутренние регистры процессора и регистры, которые служат для управления периферийными устройствами (регистры специальных функций).
Память программ. Основным свойством памяти программ является ее энергонезависимость, то есть возможность хранения программы при отсутствии питания. С точки зрения пользователей микроконтроллерами следует различать следующие типы энергонезависимой памяти программ:
1) ПЗУ масочного типа – mask-ROM. Содержимое ячеек ПЗУ этого типа заносится при ее изготовлении с помощью масок и не может быть впоследствии заменено или допрограммировано. Поэтому микроконтроллеры с таким типом памяти программ следует использовать только после достаточно длительной опытной эксплуатации. Основным недостатком данной памяти является необходимость значительных затрат на создание нового комплекта фотошаблонов и их внедрение в производство. Обычно такой процесс занимает 2–3 месяца и является экономически выгодным только при выпуске десятков тысяч приборов. ПЗУ масочного типа обеспечивают высокую надежность хранения информации по причине программирования в заводских условиях с последующим контролем результата.
2) ПЗУ, программируемые пользователем, с ультрафиолетовым стиранием – EPROM (ErasableProgrammable ROM). ПЗУ данного типа программируются электрическими сигналами истираются с помощью ультрафиолетового облучения. Ячейка памяти EPROM представляет собой МОП-транзистор с «плавающим» затвором, заряд на который переносится с управляющего затвора при подаче соответствующих электрических сигналов. Для стирания содержимого ячейки она облучается ультрафиолетовым светом, который сообщает заряду на плавающем затворе энергию, достаточную для преодоления потенциального барьера истекания на подложку. Этот процесс может занимать от нескольких секунд до нескольких минут. микроконтроллеры с
EPROM допускают многократное программирование и выпускаются в керамическом корпусе с кварцевым окошком для доступа ультрафиолетового света. Такой корпус стоит довольно дорого, что значительно увеличивает стоимость микроконтроллера.
Для уменьшения стоимости

микроконтроллера с EPROM его заключают в корпус без окошка
(версия EPROM с однократным программированием).
3) ПЗУ, однократно программируемые пользователем, –
OTPROM (One-Time Programmable ROM). Представляют собой версию EPROM, выполненную в корпусе без окошка для уменьшения стоимости микроконтроллера на его основе. Сокращение стоимости при использовании таких корпусов настолько значительно, что в последнее время эти версии EPROM часто используют вместо масочных ПЗУ.
4) ПЗУ, программируемые пользователем, с электрическим стиранием – EEPROM (Electrically Erasable Programmable ROM). ПЗУ данного типа можно считать новым поколением EPROM, в которой стирание ячеек памяти производится также электрическими сигналами за счет использования туннельных механизмов.
Применение EEPROM позволяет стирать и программировать микроконтроллер, не снимая его с платы. Таким способом можно производить отладку и модернизацию программного обеспечения.
Это дает огромный выигрыш на начальных стадиях разработки микроконтроллерных систем или в процессе их изучения, когда много времени уходит на поиск причин неработоспособности системы и выполнение циклов стирания-программирования памяти программ.
По цене EEPROM занимают среднее положение между OTPROM и
EPROM. Технология программирования памяти EEPROM допускает побайтовое стирание и программирование ячеек. Несмотря на очевидные преимущества EEPROM, только в редких моделях микроконтроллеров такая память используется для хранения программ. Связано это с тем, что, во-первых, EEPROM имеют ограниченный объем памяти. Во-вторых, почти одновременно с
EEPROM появились
Flash-ПЗУ, которые при сходных потребительских характеристиках имеют более низкую стоимость.
5)
ПЗУ с электрическим стиранием типа Flash – Flash-ROM.
Функционально Flash-память мало отличается от EEPROM. Основное различие состоит в способе стирания записанной информации. В памяти EEPROM стирание производится отдельно для каждой ячейки, а во Flash-памяти стирать можно только целыми блоками. Если необходимо изменить содержимое одной ячейки Flash-памяти, потребуется перепрограммировать весь блок.
Упрощение декодирующих схем по сравнению с EEPROM привело к тому, что микроконтроллеры с
Flash-памятью становятся конкурентоспособными по отношению не только к

микроконтроллерам с однократно программируемыми ПЗУ, но и с масочными ПЗУ также.
Память данных ОЗУ. Память данных микроконтроллеров выполняется, как правило, на основе статического ОЗУ. Термин
«статическое» означает, что содержимое ячеек ОЗУ сохраняется при снижении тактовой частоты микроконтроллеров до сколь угодно малых значений (с целью снижения энергопотребления). Большинство микроконтроллеров имеют такой параметр, как «напряжение хранения информации» – USTANDBY. При снижении напряжения питания ниже минимально допустимого уровня UDDMIN, но выше уровня
USTANDBY работа программы микроконтроллера выполняться не будет, но информация в ОЗУ сохраняется. При восстановлении напряжения питания можно будет сбросить и продолжить выполнение программы без потери данных. Уровень напряжения хранения составляет обычно около 1 В, что позволяет в случае необходимости перевести микроконтроллер на питание от автономного источника (батареи) и сохранить в этом режиме данные
ОЗУ.
Объем памяти данных микроконтроллера, как правило, невелик и составляет обычно десятки и сотни байт. Это обстоятельство необходимо учитывать при разработке программ для микроконтроллера. Так, при программировании микроконтроллера константы, если возможно, не хранятся как переменные, а заносятся в
ПЗУ программ. Максимально используются аппаратные возможности микроконтроллера, в частности, таймеры. Прикладные программы должны ориентироваться на работу без использования больших массивов данных.
Энергонезависимая память данных. Доступ к этой памяти
(EEPROM) обычно осуществляется через специальные регистры. Так что ЕЕPROM память можно рассматривать как отдельный функциональный модуль (контроллер). Этот вид памяти присутствует не у всех микроконтроллеров.
Регистры микроконтроллера. Как и все микропроцессорные системы, микроконтроллеры имеют набор регистров, которые используются для управления его ресурсами. В число этих регистров входят обычно регистры процессора (аккумулятор, регистры состояния, индексные регистры), регистры управления (регистры управления прерываниями, таймером), регистры, обеспечивающие ввод/вывод данных (регистры данных портов, регистры управления параллельным, последовательным или аналоговым вводом/выводом).
Обращение к этим регистрам может производиться по-разному.

В микроконтроллерах с RISC-процессором все регистры (часто и аккумулятор) располагаются по явно задаваемым адресам. Это обеспечивает более высокую гибкость при работе процессора.
Одним из важных вопросов является размещение регистров в адресном пространстве микроконтроллера. В некоторых микроконтроллерах все регистры и память данных располагаются в одном адресном пространстве. Это означает, что память данных совмещена с регистрами. Такой подход называется «отображением ресурсов микроконтроллера на память».
В других микроконтроллерах адресное пространство устройств ввода/вывода отделено от общего пространства памяти. Отдельное пространство ввода/вывода дает некоторое преимущество процессорам с гарвардской архитектурой, обеспечивая возможность считывать команду во время обращения к регистру ввода/вывода.
Стек микроконтроллера. В микроконтроллерах ОЗУ данных используется также для организации вызова подпрограмм и обработки прерываний. При этих операциях содержимое программного счетчика и основных регистров (аккумулятор, регистр состояния и другие) сохраняется и затем восстанавливается при возврате к основной программе.
В фон-неймановской архитектуре единая область памяти используется, в том числе, и для реализации стека. При этом снижается производительность устройства, так как одновременный доступ к различным видам памяти невозможен. В частности, при выполнении команды вызова подпрограммы следующая команда выбирается после того, как в стек будет помещено содержимое программного счетчика.
В гарвардской архитектуре стековые операции производятся в специально выделенной для этой цели памяти. Это означает, что при выполнении программы вызова подпрограмм процессор с гарвардской архитектурой производит несколько действий одновременно.
Необходимо помнить, что микроконтроллер обеих архитектур имеют ограниченную емкость памяти для хранения данных. Если в процессоре имеется отдельный стек и объем записанных в него данных превышает его емкость, то происходит циклическое изменение содержимого указателя стека, и он начинает ссылаться на ранее заполненную ячейку стека. Это означает, что после слишком большого количества вызовов подпрограмм в стеке окажется неправильный адрес возврата. Если микроконтроллер использует общую область памяти для размещения данных и стека, то существует опасность, что при переполнении стека произойдет запись в область
данных, либо будет сделана попытка записи загружаемых в стек данных в область ПЗУ.
Внешняя память. Несмотря на существующую тенденцию по переходу к закрытой архитектуре микроконтроллера, в некоторых случаях возникает необходимость подключения дополнительной внешней памяти (как памяти программ, так и данных).
Если микроконтроллер содержит специальные аппаратные средства для подключения внешней памяти, то эта операция производится штатным способом (как для МП).
Второй, более универсальный, способ заключается в том, чтобы использовать порты ввода/вывода для подключения внешней памяти и реализовать обращение к памяти программными средствами. Такой способ позволяет задействовать простые устройства ввода/вывода без реализации сложных шинных интерфейсов, однако приводит к снижению быстродействия системы при обращении к внешней памяти.

arduino uno с 8-битной MCU (ATmega328) но программой с 32-битной C/C++ программой



Я был бы очень признателен Вам за ваше терпение, чтобы объяснить на первый взгляд наивный вопрос?

Arduino Uno с 8-битным MCU (ATmega328), но мы программируем его с 32-битной C программой таможни? почему?

  1. Arduino Uno (например), использует 8-битный AVR MCU (ATmega328), который, как я понимаю, режим адресации и основные арифметические операции находятся на 8-битных операциях,

  2. в то время как когда я программирую в Arduino IDE, по умолчанию я программирую так, как будто это 32-битная программа C/C++ (например, я могу определить uint32_t,…. или, )

итак, все это сделано компилятором в Arduino IDE ? (кто это ? АВР-gcc? )

и… компиляция выполняет больше работы по переводу 32-битных арифметических операций в 8-битные арифметические операции ?

arduino-uno avr-gcc arduino-ide
Поделиться Источник rayzi001     26 июля 2015 в 07:19

2 ответа




1

Как было сказано ранее, 32-разрядные арифметические операции разбиваются на несколько 8-разрядных операций, которые может обрабатывать ваш 8-разрядный MCU. Я сам не пробовал, но подозреваю, что выполнение чего-либо более сложного, чем простая арифметика с большими типами переменных, потребляет гораздо больше ваших аппаратных ресурсов, и, вероятно, его следует избегать, если это возможно.

Поделиться Daniel     27 июля 2015 в 18:11



1

Каждый процессор / микроконтроллер работает с определенным набором команд. По сути, компиляторы должны скомпилировать ваш исходный код в машинный код, поэтому компилятор должен знать (8-битный) набор команд процессора. Поэтому, если вы возьмете, например, дополнение uint32_t, оно должно «compile» его в несколько инструкций добавления, потому что 8-битный AVR может добавить только два 8-битных значения. Это упрощенный пример, но я надеюсь, что вы поймете идею.

Поделиться Rev1.0     27 июля 2015 в 08:26


Похожие вопросы:


32-битная производительность против 64-битной

У меня есть .NET assembly(3.5 framework), и он в основном имеет набор пользовательских элементов управления, которые делают много вещей, таких как построение точек и тому подобное. assembly…


Связывание 32-битной библиотеки с программой 64-bit

У меня есть 32-битная двоичная библиотека .so, и я должен сгенерировать программу 64-bit, которая ее использует. Есть ли способ обернуть или преобразовать его, чтобы его можно было использовать с…


Добавление 64 бит на 32 битной машине

Я работаю над программой в assembly, которая складывает два 64 bit слова вместе. Я работаю с 32-битной системой. Насколько я понимаю, 32-битная система будет содержать только 32 бита на слово. Может…


Могу ли я подключиться к серверу 64 bit mysql с 32-битной машины с 32-битной клиентской библиотекой mysql?

Могу ли я подключиться к серверу 64 bit mysql с 32-битной машины с 32-битной клиентской библиотекой mysql? Я имею в виду, что сервер имеет версию 64 bit и работает на машине 64 bit, а клиентское…


Размер массива C++ в 64-битной среде против 32-битной

предположим, у меня есть класс, определенный следующим образом class foo { char [10] bar; } Как будет отличаться размер этого класса в среде 64 bit по сравнению с 32-битной, если предположить, что…


Как найти с помощью c-программы, является ли моя машина 16-битной или 32-битной или 64-bit

Может ли кто-нибудь дать простую c-программу, чтобы узнать, является ли моя машина 16-битной, 32-битной или 64-bit ?


Перекомпиляция 32-битной библиотеки C++ в 64 bit

Я хотел использовать библиотеку libtcod. Я запускаю windows 8 64 bit и использую dev-c++. В основном учебник говорит, что если вы находитесь на 64-битной системе, вам придется перекомпилировать…


Развертывание приложения winform 64 bit C# на 32-битной машине

Я разработал приложение C# winform с использованием VS 2012 на машине 64 bit, теперь я хотел бы развернуть его на 32-битной машине, но я получаю ошибку вида … не является допустимым приложением…


С плавающей точкой в 32-битной точности

Пожалуйста, помогите мне преобразовать байтовый массив в вещественный с плавающей запятой с 32-битной точностью, используя c# . У меня есть байтовый массив … Вещественная точка с плавающей запятой…


Как отправить номера от C# до Arduino Uno с портом usb?

Я хочу отправить целые числа (от 101 до 1616)из программы c# в UNO arduino, используя порт usb. Я знаю, как использовать регистры arduino Uno, и хотел бы знать, есть ли прерывание при восстановлении…

Комплект Intel® Edison для Arduino* Спецификации продукции

Дата выпуска

Дата выпуска продукта.

Ожидается задержка

Ожидается снятие с производства — это оценка времени, когда для продукции начнется процесс снятия с производства. Уведомление о снятии продукции с производства (PDN), опубликованное в начале процесса, будет включать в себя все сведения об основных этапах снятия с производства. Некоторые подразделения могут сообщать сведения о сроках снятия с производства до публикации PDN. Обратитесь к представителю Intel для получения информации о сроках снятия с производства и вариантах продления сроков.

Кол-во соединений QPI

QPI (Quick Path Interconnect) обеспечивающий соединяет высокоскоростное соединение по принципу точка-точка при помощи шины между процессором и набором микросхем.

Поддерживаемая частота системной шины

FSB (системная шина) непосредственно соединяет процессор и блока контроллеров памяти (MCH).

Четность системной шины

Четность системной шины обеспечивает возможность проверки ошибок в данных, отправленных в FSB (системная шина).

Литография

Литография указывает на полупроводниковую технологию, используемую для производства интегрированных наборов микросхем и отчет показывается в нанометре (нм), что указывает на размер функций, встроенных в полупроводник.

Доступные варианты для встраиваемых систем

Доступные варианты для встраиваемых систем указывают на продукты, обеспечивающие продленную возможность приобретения для интеллектуальных систем и встроенных решений. Спецификация продукции и условия использования представлены в отчете Production Release Qualification (PRQ). Обратитесь к представителю Intel для получения подробной информации.

Макс. объем памяти (зависит от типа памяти)

Макс. объем памяти означает максимальный объем памяти, поддерживаемый процессором.

Типы памяти

Процессоры Intel® поддерживают четыре разных типа памяти: одноканальная, двухканальная, трехканальная и Flex.

Расширения физических адресов

Расширения физических адресов (PAE) — это функция, обеспечивающая возможность получения 32-разрядными процессорами доступа к пространству физических адресов, превышающему 4 гигабайта.

Макс. число модулей DIMM

Модуль памяти DIMM — это набор микросхем DRAM (Dynamic Random-Access Memory), расположенных на небольших печатных платах.

Поддержка памяти ECC

Поддержка памяти ECC указывает на поддержку процессором памяти с кодом коррекции ошибок. Память ECC представляет собой такой типа памяти, который поддерживает выявление и исправление распространенных типов внутренних повреждений памяти. Обратите внимание, что поддержка памяти ECC требует поддержки и процессора, и набора микросхем.

Версия USB

USB (Универсальная последовательная шина) — это технология подключения отраслевого стандарта для подключения периферийных устройств к компьютеру.

Кол-во последовательных портов

Последовательный порт — это компьютерный интерфейс, используемый для соединения периферийных устройств.

Интегрированный сетевой адаптер

Интегрированный сетевой адаптер предполагает наличие MAC-адреса встроенного Ethernet-устройства Intel или портов локальной сети на системной плате.

Firewire

Firewire представляет собой стандарт интерфейса последовательной шины, позволяющий обеспечить соединение между разными частями оборудования для быстрого обмена информацией.

Новые команды Intel® AES

Команды Intel® AES-NI (Intel® AES New Instructions) представляют собой набор команд, позволяющий быстро и безопасно обеспечить шифрование и расшифровку данных. Команды AES-NI могут применяться для решения широкого спектра криптографических задач, например, в приложениях, обеспечивающих групповое шифрование, расшифровку, аутентификацию, генерацию случайных чисел и аутентифицированное шифрование.

Технология Intel® Trusted Execution

Технология Intel® Trusted Execution расширяет возможности безопасного исполнения команд посредством аппаратного расширения возможностей процессоров и наборов микросхем Intel®. Эта технология обеспечивает для платформ цифрового офиса такие функции защиты, как измеряемый запуск приложений и защищенное выполнение команд. Это достигается за счет создания среды, где приложения выполняются изолированно от других приложений системы.

Технология Anti-Theft

Технология Intel® для защиты от краж помогает обеспечить безопасность данных на переносном компьютере в случае, если его потеряли или украли. Для использования технологии Intel® для защиты от краж необходимо оформить подписку у поставщика услуги технологии Intel® для защиты от краж.

Кратко об Arduino и Raspberry Pi (Briefly about Arduino and Raspberry Pi) — Modeling and recognition of 2D/3D images

Tags:  Микроконтроллер Arduino UNO Микрокомпьютер Raspberry Pi

Введение
Сравнение Arduino и Raspberry Pi
Основные элементы Arduino UNO
Основные элементы Raspberry Pi 4 Model B
Полезные ссылки

Изначально компьютер создавался как чисто аппаратное устройство (без программирования) для решения конкретных задач. Прыжком в развитии компьютера послужила идея программного способа реализации задач (см. От машинного кода до API систем). Достоинство этого способа — универсальность, недостатки — отсутствие тесной связи с периферийными устройствами, медленное выполнение операций.

Сейчас наметилась обратная тенденция:

  • реализовывать наиболее часто используемые программы аппаратно;
  • разрабатывать программно-аппаратные комплексы под решение конкретных задач.

Эта тенденция получила наибольшее развитие в робототехнике.

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

На текущий момент самые популярный микроконтроллер — Arduino,  а микрокомпьютер — Raspberry Pi. Самая популярная версия Arduino называется Arduino Uno. Текущая модель Raspberry 2019 г.  —  Pi 4 Model B.

 

Микрокомпьютер (Raspberry Pi) обладает всеми возможностями персонального компьютера (ПК): процессор, память, операционная система, подключение к монитору (ТВ), работа в сети. Raspberry Pi, в отличие от  ПК, имеет дополнительные периферийные устройства, например —  порты ввода/вывода общего назначения (GPIO). Через эти выводы (штыревые разъемы) RPi может взаимодействовать с электронным миром, состоящим из датчиков, индикаторов и исполнительных механизмов.

Микроконтроллер (Arduino UNO) — плата с микропроцессором и встроенными периферийными устройствами (ввода-вывода, таймерами и т.п). В ходе работы микроконтроллер считывает команды из памяти или порта ввода и исполняет их. Система команд заложена в архитектуре микроконтроллера и выполнение кода команды выражается в проведении внутренними элементами микросхемы определенных микроопераций.

В отличие от обычных компьютерных микропроцессоров, в микроконтроллерах часто используется раздельное хранение данных и команд в ОЗУ и ПЗУ соответственно. Кроме ОЗУ, микроконтроллер может иметь встроенную энергонезависимую память для хранения программы и данных. Многие модели контроллеров вообще не имеют шин для подключения внешней памяти. Наиболее дешёвые типы памяти допускают лишь однократную запись. Другие модификации контроллеров обладают возможностью многократной перезаписи программы в энергонезависимой памяти.

Во многих проектах Arduino и Raspberry Pi используются совместно, причем Arduino выступает в качестве управляющей платы, на которой выполняются команды, выдаваемые ПО Raspberry Pi. При этом порт USB используется для загрузки программы и для обмена данными между Arduino и Raspberry Pi.

 

  • Микроконтроллер ­- аналог микропроцессора в обычном ПК;
  • Кнопка сброса ­ осуществляет сброс микроконтроллера и повторый запуск программы;
  • Порт USB ­ обеспечивает связь с ПК и питание устройства;
  • Светодиод #13 , соединенный с цифровым выходом #13;
  • Питание +7-12V ­ — дополнительное питание от внешнего источника (батарея, блок питания);

Процессор: Broadcom BCM2711, 4 ядра Cortex-A72 (ARMv8), 64-bit SoC @ 1.5 GHz

RAM: На выбор модели (LPDDR4-2400 SDRAM): 1Gb, 2Gb, 4Gb

Питание: USB Type-C (5V, минимум 3А). Возможно питание через GPIO (5V, минимум 3А).

Порты и разъемы:

Беспроводные интерфейсы: Двухдиапазонный WiFi (2.4 GHz и 5.0 GHz IEEE 802.11ac/n) Bluetooth 5.0, BLE (Bluetooth Low Energy)

Индикаторы: Встроенные светодиоды: индикация питания, работа с microSD картой, режим работы Ethernet.

пошаговая инструкция по сборке. Самые интересные ардуино проекты

Доброго времени суток, уважаемые читатели и пользователи лучшего портала Трешбокс! Ни для кого не секрет, что на созданных своими руками вещах можно неплохо заработать. Если идея действительно интересная, то на ее основе можно создать собственный бизнес. Использование Arduino в этой области является очень удобным решением, ведь Arduino не запрещена для использования в коммерческих целях. О пяти интересных бизнес-идеях мы сегодня с вами поговорим.

Как это реализовать?

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

Делать бизнес на Arduino очень выгодно, так как скетч вам нужно писать только один раз. В следующие копии вы просто «заливаете» уже готовый. Сами идеи смотрите ниже.

Автоматическое управление температурой дома


По порядку: Arduino Nano, Arduino Uno и NRF24L01


Я не хотел называть этот пункт как «умный» дом, ведь эта идея заключается только в управлении температурой. Я бы реализовал эту идею с помощью нескольких Arduino Nano и одной Arduino Mega/Uno. Связь между ними будет осуществляться с помощью модуля радиосвязи NRF24L01. Этот модуль позволяет связывать между собой до шести Arduino.

Arduino Nano будет заключена в небольшой корпус вместе датчиком температуры и влажности DHT22, модулем радиосвязи NRF24L01 и источником питания — батарейкой, например. Несколько таких маленьких коробочек будут размещены по всему дому.


DHT2 и текстовый LCD дисплей


Данные с Arduino Nano будут приниматься «базой», которой является Arduino Uno или Mega, заключенная в большой корпус вместе с NRF24L01 (в качестве приемника), текстовым LCD-дисплеем и источником питания (батарейка). Все это будет находиться возле системы отопления. «База» сможет принимать и обрабатывать данные о температуре и в зависимости от значения этих данных, будет посылаться команда системе отопления — повысить или понизить температуру.

«Умная» теплица


Пример готового решения.


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


По порядку: Arduino Mega, DHT22 и текстовый LCD дисплей.


Одна Arduino способна контролировать температуру теплицы (с помощью того же датчика DHT22), выводить нужную информацию на LCD дисплей, подавать команду на открытие крана для подачи воды, а также управлять моторами для открытия и закрытия дверей.

ЧПУ станок


По порядку: Arduino Mega, L298N и шаговый двигатель.


Сюда же можно отнести и 3D принтеры. В интернете есть множество способов сделать ЧПУ станок на базе Arduino. Не все из них рабочие, но хорошие варианты точно найдутся. Из «железа» вам потребуется Arduino, желательно Mega, а также драйвер двигателей L298N и, естественно, сами двигатели. Все остальное — это рама и программный код. Должен заметить, что это одна из самых сложных идей в плане реализации.

Роботы


Пример готового решения.


Несомненно, роботы очень нравятся детям, особенно те, которыми они сами могут управлять. С помощью Arduino, роботов можно сделать даже из подручных материалов. Когда-то я рассматривал идею сделать робота в корпусе от пылесоса, который был очень похож на астромеханического дроида из «Звездных войн».

По порядку: HC-SR04, L293D, HC-06 и NRF24L01


Ультразвуковой дальномер HC-SR04 может определять расстояние до препятствий, чтобы в последствии их обогнуть. Драйвер двигателей L293D, который используется как плата расширения, способен управлять сразу четырьмя двигателями и тремя сервоприводами. В плане связи, мы не сильно ограничены. Можно использовать bluetooth-модуль HC-06, что позволит управлять вашим детищем со смартфона, но не может похвастаться хорошей дальностью связи, что не скажешь о уже известном модуле радиосвязи NRF24L01. Однако, тогда у вас пропадет возможность управления со смартфона.


Аккумуляторы 18650


В качестве источника питания можно использовать аккумуляторы формата 18650, параллельно соединенные для увеличения общей емкости.

Итог

К сожалению, это все идеи, которые мне удалось найти. Уверен, если вы заинтересуетесь какой-то идеей, вы сможете найти много информации на эту тему в интернете.
Сразу хочу сказать, что я не включал в этот список квадракоптеры и другие летательные аппараты ведь для них уже есть готовые платы управления. Скорее всего, Arduino бы просто не выдержала такую нагрузку.

В любом случае, надеюсь, вам было интересно. Напишите в комментариях, сталкивались вы с подобными идеями?

Увлечение платформой Arduino привело меня к устройствам, работающим по шине I2C (сокращение от английских слов Inter-Integrated Circuit) также называемые как «Two-Wire» устройства. Выпускается большое количество микросхем, аппаратно поддерживающих I2C шину. Это и всевозможные датчики, часы реального времени, память, расширители портов и много чего другого. В статье ниже представлена модернизация проекта сканера устройств с шиной I2C на базе Arduino, который описан на странице http://playground.arduino.cc/Main/I2cScanner и пример практической работы с автономным от компьютера прототипом устройства.

Управляющая программа, способы дистанционного управления (bluetooth или APC220), все остаётся прежним.

В статью добавлены схемы и программные коды для переноса проекта на распространенные палаты управления моторами ( и )

Читать

Автоматический полив растений

Пару лет назад увлёкся разведением разных экзотических растений. Благо, подоконники (почти полметра на полтора) позволяют поставить довольно много горшков. Но в прошлом году, как может помнят москивичи, жара была неслабая. Так как работаю я в офисе, то удавалось поливать только утром и вечером. И этого явно было маловато.

Плюс ещё отъезды на дачу на выходные… А один только полметровый куст эвкалипта способен за два дня и ночь испарить 2-3л воды и успеть завянуть.

Фитильная система не понравилась тем, что она нерегулируема и жрёт место на окне. Которого и так мало. Лейки-пипетки типа plant genie не подошли по причине того, что даже познав дао втыкания их в горшок(не так воткнул — или не капает или вытекает за пару часов), их надо или так много, что не хватает площади горшка или горшок небольшой и просто переворачивается. Ну и на заявленные две недели этих 0.22л тоже не особо хватает.

» представляет учебный курс «Arduino для начинающих». Серия представлена 10 уроками, а также дополнительным материалом. Уроки включают текстовые инструкции, фотографии и обучающие видео. В каждом уроке вы найдете список необходимых компонентов, листинг программы и схему подключения. Изучив эти 10 базовых уроков, вы сможете приступить к более интересным моделям и сборке роботов на основе Arduino. Курс ориентирован на новичков, чтобы к нему приступить, не нужны никакие дополнительные сведения из электротехники или робототехники.

Краткие сведения об Arduino

Что такое Arduino?

Arduino (Ардуино) — аппаратная вычислительная платформа, основными компонентами которой являются плата ввода-вывода и среда разработки. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере. Arduino как и относится к одноплатным компьютерам.

Как связаны Arduino и роботы?

Ответ очень прост — Arduino часто используется как мозг робота.

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

Урок 1. Мигающий светодиод на Arduino

На первом уроке вы научитесь подключать светодиод к Arduino и управлять его мигать. Это самая простая и базовая модель.

Светодиод — полупроводниковый прибор, создающий оптическое излучение при пропускании через него электрического тока в прямом направлении.

Урок 2. Подключение кнопки на Arduino

На этом уроке вы научитесь подключать кнопку и светодиод к Arduino.

При нажатой кнопке светодиод будет гореть, при отжатой – не гореть. Это также базовая модель.

Урок 3. Подключение потенциометра на Arduino

В этом уроке вы научитесь подключать потенциометр к Arduino.

Потенциометр — это резистор с регулируемым сопротивлением. Потенциометры используются как регуляторы различных параметров – громкости звука, мощности, напряжения и т.п. Это также одна из базовых схем. В нашей модели от поворота ручки потенциометра будет зависеть яркость светодиода.

Урок 4. Управление сервоприводом на Arduino

На этом уроке вы научитесь подключать сервопривод к Arduino.

Сервопривод – это мотор, положением вала которого можно управлять, задавая угол поворота.

Сервоприводы используются для моделирования различных механических движений роботов.

Урок 5. Трехцветный светодиод на Arduino

На этом уроке вы научитесь подключать трехцветный светодиод к Arduino.

Трехцветный светодиод (rgb led) — это три светодиода разных цветов в одном корпусе. Они бывают как с небольшой печатной платой, на которой расположены резисторы, так и без встроенных резисторов. В уроке рассмотрены оба варианта.

Урок 6. Пьезоэлемент на Arduino

На этом уроке вы научитесь подключать пьезоэлемент к Arduino.

Пьезоэлемент — электромеханический преобразователь, который переводит электричеcкое напряжение в колебание мембраны. Эти колебания и создают звук.

В нашей модели частоту звука можно регулировать, задавая соответствующие параметры в программе.

Урок 7. Фоторезистор на Arduino

На этом уроке нашего курса вы научитесь подключать фоторезистор к Arduino.

Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него.

В нашей модели светодиод горит только если яркость света над фоторезистором меньше определенной, эту яркость можно регулировать в программе.

Урок 8. Датчик движения (PIR) на Arduino. Автоматическая отправка E-mail

На этом уроке нашего курса вы научитесь подключать датчик движения (PIR) к Arduino, а также организовывать автоматическую отправку e-mail.

Датчик движения (PIR) — инфракрасный датчик для обнаружения движения или присутствия людей или животных.

В нашей модели при получении с PIR-датчика сигнала о движении человека Arduino посылает компьютеру команду отправить E-mail и отправка письма происходит автоматически.

Урок 9. Подключение датчика температуры и влажности DHT11 или DHT22

На этом уроке нашего вы научитесь подключать датчик температуры и влажности DHT11 или DHT22 к Arduino, а также познакомитесь с различиями в их характеристиках.

Датчик температуры и влажности — это составной цифровой датчик, состоящий из емкостного датчика влажности и термистора для измерения температуры.

В нашей модели Arduino считывает показания датчика и осуществляется вывод показаний на экран компьютера.

Урок 10. Подключение матричной клавиатуры

На этом уроке нашего курса вы научитесь подключать матричную клавиатуру к плате Arduino, а также познакомитесь с различными интересными схемами.

Матричная клавиатура придумана, чтобы упростить подключение большого числа кнопок. Такие устройства встречаются везде — в клавиатурах компьютеров, калькуляторах и так далее.

Урок 11. Подключение модуля часов реального времени DS3231

На последнем уроке нашего курса вы научитесь подключать модуль часов реального времени из семейства
DS к плате Arduino, а также познакомитесь с различными интересными схемами.

Модуль часов реального времени — это электронная схема, предназначенная для учета хронометрических данных (текущее время, дата, день недели и др.), представляет собой систему из автономного источника питания и учитывающего устройства.

Приложение. Готовые каркасы и роботы Arduino


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

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

Еще один вариант — покупка каркаса или корпуса робота: платформы на колесиках или гусенице, гуманоида, паука и т.п. В этом случае начинку робота придется делать самостоятельно.

Приложение. Мобильный справочник


– помощник для разработчиков алгоритмов под платформу Arduino, цель которого дать конечному пользователю возможность иметь при себе мобильный набор команд (справочник).

Приложение состоит из 3-х основных разделов:

  • Операторы;
  • Данные;
  • Функции.

Где купить Arduino


Наборы Arduino

Курс будет пополняться дополнительными уроками. Подпишитесь на нас

Arduino/Genuino UNO — это флагманская плата для разработки собственных проектов, построения простых систем автоматики и робототехники на базе микроконтроллера ATmega328 с бесплатным программным обеспечением и открытой архитектурой. Arduino UNO R3 является сегодня самой популярной платформой для начинающих изобретателей, любителей мастерить своими руками, студентов и школьников.

Arduino UNO: распиновка платы

Что такое Arduino UNO Ch440 мы уже рассказывали, поэтому перейдем сразу к характеристикам и описанию платы Ардуино УНО. Распиновка и принципиальная схема платформы представлена на фото далее. Как мы уже говорили, вся линейка плат имеет полностью открытую архитектуру системы, что позволяет любому стороннему производителю копировать и модернизировать платы Arduino Genuino UNO.

Arduino UNO распиновка платы на русском, ICSP

UNO является лучшим вариантом для знакомства с микроконтроллерами. Плата имеет удобный размер и все необходимое для начала работы: 14 цифровых входов/выходов (6 портов могут работать в режиме ШИМ), 6 аналоговых входов для датчиков, разъем USB для программирования и разъем питания Arduino UNO от блока питания или кроны. Но главное — это огромное множество уроков и инструкций в Интернете.

Характеристики платы Arduino UNO

  • Микроконтроллер: ATmega328
  • Тактовая частота: 16 МГц
  • Напряжение логических уровней: 5 В
  • Входное напряжение питания: 7–12 В
  • Портов ввода-вывода общего назначения: 20
  • Максимальный ток с порта ввода-вывода: 40 мА
  • Максимальный выходной ток порта 3.3 В: 50 мА
  • Максимальный выходной ток порта 5 В: 800 мА
  • Портов с поддержкой ШИМ: 6
  • Портов, подключённых к АЦП: 6
  • Разрядность АЦП: 10 бит
  • Flash-память: 32 КБ
  • EEPROM-память: 1 КБ
  • Оперативная память: 2 КБ
  • Габариты: 69×53 мм

Arduino UNO: схема электрическая


Arduino UNO: порты ввода вывода, питание

Рабочее напряжение — 5 В при подключении через USB с любых устройств (компьютер, ноутбук, зарядка от смартфона и т.д.). При одновременном подключении внешнего адаптера (аккумулятора, кроны, блока питания), питание автоматически переключается, но плату можно по-прежнему программировать через компьютер. Рекомендуемое питание Arduino Uno от батареек или аккумулятора от 7 до 12 В.


Arduino UNO: питание от внешнего источника

5V – на пин Ардуино подает 5В, его можно использовать для питания устройств
3.3V – на пин подается напряжение 3.3В от внутреннего стабилизатора
GND – вывод земли
VIN – пин для подачи внешнего напряжения
IREF – пин для информирования о рабочем напряжении платы

Можно питание на микроконтроллер подать через порт VIN с помощью проводов. «Плюс» от внешнего источника подается на порт VIN, а «Минус» на GND (заземление). Подача внешнего напряжения 5 Вольт на пин 5V не допустимо, так как питание Genuino Arduino Uno обходит стороной стабилизатор, что может привести к поломке. Все цифровые порты на плате выдают стабилизированное напряжение в 5 Вольт.

Arduino UNO: прошивка, память



Программирование платы происходит в бесплатной среде Arduino IDE на русском , которую можно скачать на официальном сайте. Для подключения устройств и модулей используются коннекторы («папа-папа» и «папа-мама»), которые подключаются к портам Ардуино. Чтобы начать работать с платформой, перейдите в раздел Arduino uno r3 «Уроки для начинающих » , где представлены подробные инструкции с примерами.

Плата поддерживает три типа памяти:

Flash – память объемом 32 кБ, используется для хранения программы. Когда контроллер прошивается скетчем через USB, он записывается именно во Flash – память. Чтобы очистить память Arduino UNO следует загрузить пустой скетч.

SRAM память — это оперативная память Ардуино объемом 2 кБ. Здесь хранятся переменные и объекты, создаваемые в скетче. SRAM память энерго-зависимая, при отключении источника питания от платы, все данные удалятся.

EEPROM — это энергонезависимая память объемом 1кБ. Сюда можно записывать данные, которые при выключении питания не исчезнут. Минус EEPROM в ограничении циклов перезаписи — 100 000 раз по утверждениям производителя.

Описание Ардуино УНО на русском

Рекомендуем вам ознакомиться с другими платами из линейки Arduino-Genuino, например, аналог самой популярной платы UNO — RobotDyn UNO R3 от китайского производителя. Плата по своим характеристикам ничем не уступает официальному производителю, но при этом имеет более демократичную цену и ряд преимуществ. Таких как, более удобный USB-разъем и большее количество аналоговых входов.


Собрали лучшие и даже сумасшедшие Arduino-проекты, которые мы встретили в 2015 году.

Arduino Wake-Up Machine

Взлом кодовых замков с помощью Arduino

Этот механизм, управляемый Arduino, может открыть любой кодовый замок менее чем за 30 секунд. Проект хакера Samy Kamkar продемонстрировал уязвимость.

Робот, сортирующий Skittles

Проект распечатанного на 3D-принтере Arduino-робота, который поможет сэкономить время, необходимое на сортировку Skittles. Возможно, самое большое разочарование, что механизм не универсален и подходит для M&M’s. Видео и более подробное описание

Protopiper — гаджет для прототипирования

Удивительный гаджет для прототипирования. Устали бегать с рулеткой? Обладая этим устройством, вы можете быстро набросать эскиз размером с комнату.

Open Source снегоуборщик

Двигателем прогресса во многих случаях является лень. Убирать снег лопатой? Для этой работы нужен робот. Возможно продавцам снегоуборщиков не понравится этот проект, т.к. автор считает, что каждый может самостоятельно сделать себе такой. .

Бластер для переключения музыки

У всех разные музыкальные вкусы. Но бывает так, что музыка просто ужасна. Она не нравится никому в компании. Так бывает. Если ваша мечта а такие моменты — выстрелить из пистолета и поменять музыку… то знайте, что проект реализован, мечты сбываются.

Придай своим волосам больше возможностей

Незаметно отправлять сообщения, запускать приложения, транслировать свое место положение — все это можно делать аккуратно поглаживая свои волосы — это так естественно для девушек.

Вяжи с Arduino

Чтобы вязать необязательно обращаться к бабушке или покупать профессиональное оборудование. Сделай сам робота, который вяжет, используя Arduino.

Робот BB-8 на Arduino

Проект для тех, кто мечтает сделать робота BB-8 из Звездных Войн.

О’кей Google, Сезам, открой дверь

В это проекте студент MIT реализовал открывание двери с помощью голосовой команды Google Now. Чтобы попасть в дом, нужно просто сказать: «Сезам, откройся». Видео и описание проекта .

Печатная машинка, играющая симфонию

Печатная машинка 1960 года превратилась не только в принтер, но и в музыкальный инструмент.

Робот AT-AT

Управляемый робот AT-AT из Звездных Войн.

Робот T-800 из Терминатора

В мире очень много поклонников фильма «Терминатор», но немногие воссоздали робота T-800. Подробнее почитать о проекте и посмотреть видео можно .

Робот миньон из яйца от Kinder-сюрприза

Веселый самодельный робот, которого можно сделать самому. Подробнее оп проекте .

Управление телевизором силой мысли

Пульт от телевизора больше не нужен. Все что нужно сделать — это подумать о смене канала. В проекте использован чип из игры Star Wars Force Trainer (Звездные войны), выпущенной в 2009 году. Подробнее .

Первое включение ардуино уно. Подключение и программирование ардуино для начинающих

В этом уроке мы установим программное обеспечение и запустим первую готовую программу для проверки.

Итак, вы приобрели Arduino Uno или любую другую совместимую плату, и нужно сделать следующий шаг — установить необходимое программное обеспечение.

Сначала небольшое отступление. Существует настоящая плата Arduino, сделанная в Италии. Но не стоит думать, что все остальные являются подделками. Разработчики Arduino выложили в открытый доступ все свои наработки и разрешили всем создавать свои платы по созданным схемам. Единственная просьба — не использовать само имя Arduino, поэтому можно встретить альтернативные названия, типа Freeduino, Genuino, Seeeduino, Adafruit 32UT, SparkFun Pro и прочее. Поэтому по поведению китайские платы ничем не отличаются от итальянской (хотя бывают небольшие различия).

Входить в мир Arduino можно двумя способами. Первый — вы не программист. В этом случае поначалу вы можете собирать схему по рисункам и запускать готовые примеры , которые идут в составе Arduino IDE или взятые из других источников. Если желание создавать свои проекты не исчезнет, то потихоньку можете разбираться в коде. Они совсем не сложные в учебных примерах, хотя и написаны на C++. Второй случай — вы программист, но не разбираетесь в электронике. Аналогично, по картинкам собираете схемы из различных приборов и запускаете программу. Понимая, что делает код, вы можете что-то поменять или усложнить, пробуя различные варианты. Позже вы набьёте руку и освоите необходимый объём для электронщика, чтобы рассчитать количество нужных радиодеталей, уберечь плату от короткого замыкания и прочие вещи.

Установка программы и драйверов за несколько лет упростилась. Microsoft решила подружиться с Arduino и в версиях Windows 8/10 плата опознаётся без проблем. В Windows 7 нужно немного поработать ручками (описание в нижней части страницы).

Кроме самой платы Uno (или любой другой), нам понадобится USB-кабель типа A-B (у других плат могут быть другие кабели). У меня он шёл в комплекте с набором. Это стандартный кабель, который обычно прилагается к принтерам и другим устройствам, его можно купить в компьютерных магазинах.

Далее нужно скачать среду разработки, в которой мы будем писать код. Последнюю версию Arduino IDE можно скачать с этой страницы . Вам необходимо выбрать ссылку, соответствующую вашей операционной системе (например, Windows) и скачать архив (около 180 Мб).

После того, как вы скачаете zip-файл, разархивируйте его в любой удобной папке (желательно, чтобы в названии вашей папки не встречались русские символы). При желании можно скачать готовый установщик в виде exe-файла.

После разархивации файла у вас появится отдельная папка Arduino с номером версии с множеством файлов и подпапок.

Если вы успешно преодолели данный шаг, то переходим к следующему этапу — запускаем программу Arduino (arduino.exe). У вас появится окно разработки под Arduino. Сама программа написана на Java и я видел обсуждения, что иногда программа требует установить файлы исполнения Java. У меня они были изначально, так как на этом языке пишу программы для Android.

Когда я устанавливал на Windows 8/10, то проблем с драйвером не возникло и всё установилось автоматически. При работе с некоторыми китайскими платами следует также установить драйвера, информацию о драйверах и установке ищите самостоятельно под свою плату.

Набираемся мужества и подключаем с помощью USB-кабеля плату с компьютером. На плате должна загореться зелёная светодиодная лампочка (помечена надписью ON ). Запускаем Arduino IDE и в меню Tools | Board выбираем свою плату. После этого выбираем порт Tools | Port . Обычно это COM3, COM4.

Следующий шаг — загрузить скетч (так называют программу в Arduino) в микроконтроллер. Сам скетч пустой и ничего не делает. Важно только убедиться, что он успешно загрузился. В нижней части IDE появится сообщение об успешной загрузке.

01.Basics: BareMinimum

Приступать к настоящей работе с платой страшновато, вдруг что-то сгорит. Поэтому пока отложим его в сторону от греха подальше и запустим Arduino IDE. Разработчики платы подготовили серию простых примеров, которые следует изучить, чтобы заложить фундамент для будущих проектов. Найти их можно в меню File | Examples . В разделе 01.Basics находятся самые простые примеры. А самый примитивный из них — скетч BareMinimum . Вам даже не понадобится плата.

На языке Arduino проекты с листингом называются скетчами (sketch) и имеют расширение INO .

Давайте изучим первый скетч: File | Examples | 01.Basics | BareMinimum . Откроется окно с следующим кодом:

Void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }

Вам сейчас необходимо запомнить, что в программе должны быть две обязательные функции: setup() и loop() . После названия функции и круглых скобок идут фигурные скобки, внутри которых будет располагаться ваш код. Говорят, что между фигурными скобками располагается блок кода для функции или тело функции.

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

Функция loop() в бесконечном цикле последовательно раз за разом исполняет команды, которые описаны в её теле. Иными словами после завершения функции снова произойдёт её вызов.

Внутри функций размещены комментарии к коду, которые начинается с двойного слеша (//). Всё, что идёт после двойного слеша и до конца строки считается комментарием. Вы можете писать сюда что угодно, на программу это никак не повлияет. При написании своих программ советую не скупиться на комментарии и описывать, что выполняет ваша команда. Поверьте, очень многие новички, возвращаясь к своему коду, не могут вспомнить, что они запрограммировали. Комментарии можно размещать не только внутри функций, но и над ними.

Запоминать код и записывать его в тетрадочку не нужно. Когда вы будете создавать собственный скетч через File | New , то появится точно такой же код. И вы можете создавать свои проекты и сохранять их.

Как видите, рассмотренный нами пример является лишь шаблоном и ничего полезного не делает. В следующем уроке мы уже научимся подключать плату и загружать в него программу.

Установка Android IDE под Windows 7

Для старых версий нужно установить драйвер самостоятельно. При первом подключении Windows самостоятельно попытается установить драйвер, хотя мы его и не просили. Самоуверенная Windows признается, что ей не удалось установить драйвер. Чтобы убедиться в этом, идём в Пуск→Панель управления→Система (а можно было просто нажать клавиши Win+Pause Break) и выбираем слева ссылку Диспетчер устройств . Там увидим, что напротив Arduino Uno стоит желтый предупреждающий значок.

Ничего страшного не произошло. Сейчас мы исправим ситуацию. Щёлкаем мышкой на данной записи и выбираем из контекстного меню пункт Обновить драйверы… . Далее выбираем опцию Выполнить поиск драйверов на этом компьютере , чтобы вручную указать местоположение драйверов. Сам драйвер ArduinoUNO.inf находится в подпапке Drivers той самой папки Arduino , о которой говорилось выше.

Теперь Windows сможет правильно установить драйвер и все будет тип-топ.

Общего назначения (могут являться как входами, так и выходами), кварцевый генератор на 16 МГц, два разъема: силовой и USB, разъем ISCP для внутрисхемного программирования и кнопку горячей перезагрузки устройства. Для стабильной работы плату необходимо подключить к питанию либо через встроенный USB Разъем, либо подключив разъем питания к источнику от 7 до 12В. Через переходник питания плата также может работать и от батареи формата Крона.

Основное отличие платы от предыдущих – для взаимодействия по USB Arduino Uno использует отдельный микроконтроллер ATmega8U2. Прошлые версии Arduino использовали для этого микросхему программатора FTDI.

Несложно догадаться, что благодаря своему итальянскому происхождению, слова “Arduino” и “Uno” взяты именно из этого языка. Компания назвалась “Arduino” в честь короля Италии 11 века Ардуина, а Уно переводится с итальянского как “первый”.

Размеры и габариты платы

Печатная плата Arduino Uno является Open-Hardware, поэтому все ее характеристики доступны в открытом доступе.

Длина и ширина платы составляют 69 мм x 53 мм.

Силовой и USB разъемы выступают за границы печатной платы на 2 мм.

Расстояние между выводами соответствует стандарту 2.54 мм, однако расстояние между 7 и 8 контактами составляет 4 мм.

Разъемы питания

Плата Arduino Uno имеет на борту 3 способа подключения питания: через USB, через внешний разъем питания и через разъем Vin, выведенный на одну из гребенок сбоку. Платформа имеет на борту встроенный стабилизатор, позволяющий не только автоматически выбирать источник питания, но и выравнивать ток до стабильных 5 вольт, необходимых контроллеру для работы.

Внешнее питание можно подавать как напрямую от USB порта компьютера, так и от любого AC/DC блока питания через разъем питания или USB.

На плате предусмотрено несколько выводов, позволяющих запитывать от нее подключенные датчики, сенсоры и актуаторы. Все эти выводы помечены:

  • Vin – вход питания, используется для получения питания от внешнего источника. Через данных вывод происходит только подача питания на плату, получить оттуда питание для внешних устройств невозможно. На вход Vin рекомендуется подавать напряжение в диапазоне от 7В до 20В, во избежании перегрева и сгорания встроенного стабилизатора.
  • 5V – источник пятивольтового напряжения для питания внешних устройств. При получении питания платой из любых других источников (USB, разъем питания или Vin) на этом контакте вы всегда сможете получить стабильное напряжение 5 вольт. Его можно вывести на макетную плату или подать напрямую на необходимое устройство.
  • 3V3 – источник 3.3 вольтового напряжения для питания внешних устройств. Работает по такому-же принципу, что и контакт 5V. С данной ножки также можно вывести напряжение на макетную плату, либо подать на необходимый датчик/сенсор напрямую.
  • GND – контакт для подключения земли. Необходим для создания замкнутой цепи при подключении к контактам Vin, 5V или 3V3. Во всех случаях ножку GND необходимо выводить как минус, иначе цепь не будет замкнута и питание (что внешнее, что внутреннее) не подасться.

Характеристики памяти

Платформа Arduino Uno имеет на борту микроконтроллер ATmega328, который обладает Flash, SRAM и EEPROM памятью.

  • FLASH – 32kB, из которых 0.5kB используется для хранения загрузчика
  • SRAM (ОЗУ) – 2kB
  • EEPROM – 1kB (доступна с помощью библиотеки EEPROM)

Контакты ввода-вывода и интерфейсы

Так как Arduino Uno обладает пятивольтовой логикой, то и значение будет находиться в диапазоне от 0 до 5 вольт, однако при помощи функции можно изменять верхний предел.

Последовательный UART интерфейс: контакты 0 (RX) и 1 (TX)

Данные выводы используются для обмена данными по . Контакт RX используется для получения данных, а контакт TX – для их отправки. Эти выводы подключены к соответствующим контактам последовательной шины схемы ATmega8U2 USB-to-TTL, выступающей в данном контексте в роли программатора.

Внешнее прерывание: контакты 2 и 3

Данные контакты могут конфигурироваться на вызов различных прерываний, когда программа останавливает выполнение основного кода и производит выполнение кода прерывания.

Вызов прерывания может быть задан по-разному:

  • на младшем значении
  • на переднем или заднем фронте
  • при изменении значения

ШИМ: контакты 3, 5, 6, 9, 10, и 11

SPI интерфейс: контакты 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)

I2C интерфейс: контакты 4 (SDA) и 5 (SCL)

При помощи данных контактов к Arduino можно подключать внешние цифровые устройства, умеющие общаться по . Для реализации интерфейса в среде Arduino IDE присутствует библиотека Wire.

Встроенный светодиод: контакт 13

Для проверки вашего кода по ходу его написания, самый удобный способ индикации – встроенный светодиод. Подав значение HIGH на 13 контакт, он загорается на плате красным цветом, тем самым показывая, что условие вашей программы выполнилось (или наоборот, что-то пошло не так). 13 контакт удобно использовать в коде программы для проверки ошибок и отладки.

Кстати, хотим заметить, что последовательно к 13-ому контакту подключен резистор на 220 Ом, поэтому не стоит использовать его для вывода питания ваших устройств.

Дополнительные контакты: AREF и RESET

Помимо всех вышеперечисленных, на платформе Uno имеется еще 2 дополнительных контакта.

Данный контакт отвечает за определение опорного напряжения аналоговых входов платформы. Используется только с функцией .

Данный контакт необходим для аппаратной перезагрузки микроконтроллера. При подаче сигнала низкого уровня (LOW) на контакт Reset, происходит перезагрузка устройства.

Данный контакт обычно соединен с аппаратной кнопкой перезагрузки, установленной на плате.

Связь с внешним миром

Для осуществления связи с внешними устройствами (компьютером и другими микроконтроллерами) на плате существует несколько дополнительных устройств.

На контактах 0 (RX) и 1 (TX) контроллер ATmega328 поддерживает UART – последовательный интерфейс передачи данных. ATmega8U2, выполняющий на плате роль программатора, транслирует этот интерфейс через USB, позволяя платформе общаться с компьютером через стандартный COM-порт. Прошивка, установленная в контроллер ATmega8U2, имеет на борту стандартные драйверы USB-COM, поэтому для подключения не потребуется никаких дополнительных драйверов.

При помощи мониторинга последовательной шины, называемого , среда Arduino IDE посылает и получает данные от Arduino. При обмене данными на плате видно мигание светодиодов RX и TX. При использовании UART-интерфейса через контакты 0 и 1, светодиоды не мигают.

Плата может взаимодействовать по UART-интерфейсу не только через аппаратным, но и через программным способом. Для этого в среде Arduino IDE предусмотрена библиотека SoftwareSerial.

Также, на плате предусмотрены выводы основных интерфейсов взаимодействия с периферией: SPI и I2C (TWI).

Среда программирования Arduino IDE

Платформа Arduino Uno, как и все другие Arduino-совместимые платформы, программируется в среде Для работы с ней в настройках программы необходимо выбрать нужную платформу. Это можно сделать в верхнем меню -> Tools -> Boards -> Arduino UNO.

Выбор микроконтроллера зависит от того, какой стоит именно на вашей плате. Обычно это ATmega328.

Плата как правило поставляется уже прошитая необходимым загрузчиком и должна определяться системой в автоматическом режиме (за исключением плат на основе программатора Ch440G). Связь микроконтроллера с компьютером осуществляется стандартным протоколом STK500.

Помимо обычного подключения, на плате также размещен разъем ISCP для внутрисхемного программирования, позволяющий перезаписать загрузчик или загрузить прошивку в контроллер в обход стандартного программатора.

Обычно, в микроконтроллерах перед загрузкой кода предусмотрен вход платы в специальный режим загрузки, однако Arduino Uno избавлена от данного действия для упрощения загрузки в нее программ. Стандартно, перед загрузкой каждый микроконтроллер получает сигнал DTR (digital reset), но в данной плате вывод DTR подключен к микроконтроллеру ATmega8U2 через 100 нФ конденсатор и программатор сам управляет процессом загрузки новой прошивки в контроллер. Таким образом, загрузка прошивки происходит моментально после нажания кнопки Upload в среде Arduino IDE.

Эта функция имеет еще одно интересное применение. Каждый раз при подключении платформы к компьютеру с OC Windows, MacOS или Linux, происходит автоматическая перезагрузка платы и в следующие полсекунды на плате работает загрузчик. Таким образом, для избежания получения некорректных данных, во время загрузки прошивок происходит задержка первых нескольких байтов информации.

Arduino Uno поддерживает отключение автоматической перезагрузки. Для этого необходимо разорвать линию RESET-EN. Еще один способ отключения автоматической перезагрузки – подключение между линиями RESET-EN и линией питания 5V резистора номиналом 110 Ом.

Защита USB разъема от перенапряжения

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

Данный документ разъясняет, как подключить плату Arduino к компьютеру и загрузить ваш первый скетч.

Необходимое железо — Arduino и USB-кабель

В этом руководстве предполагается, что вы используете Arduino Uno, Arduino Duemilanove, Nano или Diecimila.

Вам потребуется также кабель стандарта USB (с разъемами типа USB-A и USB-B): такой, каким, к примеру, подключается USB-принтер. (Для Arduino Nano вам потребуется вместо этого кабель с разъемами А и мини-В).

Программа — среда разработки для Arduino

Найдите последнюю версию на странице скачивания .

После окончания загрузки распакуйте скачанный файл. Убедитесь, что не нарушена структура папок. Откройте папку двойным кликом на ней. В ней должны быть несколько файлов и подкаталогов.

Подсоедините плату

Arduino Uno, Mega, Duemilanove и Arduino Nano получают питание автоматически от любого USB-подключения к компьютеру или другому источнику питания. При использовании Arduino Diecimila убедитесь, что плата сконфигурирована для получения питания через USB-подключение. Источник питания выбирается с помощью маленького пластикового джампера, надетого на два из трех штырьков между разъемами USB и питания. Проверьте, чтобы он был установлен на два штырька, ближайших к разъему USB.

Подсоедините плату Arduino к вашему компьютеру, используя USB-кабель. Должен загореться зеленый светодиод питания, помеченный PWR.

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

Установка драйверов для на Windows7, Vista или XP:

  • Подключите вашу плату и подождите, пока Windows начнет процесс установки драйвера. Через некоторое время, несмотря на все её попытки, процесс закончится безрезультатно.
  • Нажмите на кнопку ПУСК и откройте Панель управления.
  • В панели управления перейдите на вкладку Система и безопасность (System and Security). Затем выберите Система. Когда откроется окно Система, выберите Диспетчер устройств (Device Manager).
  • Обратите внимание на порты (COM и LPT). Вы увидите открытый порт под названием «Arduino UNO (COMxx)».
  • Щелкните на названии «Arduino UNO (COMxx)» правой кнопкой мышки и выберите опцию «Обновить драйвер» (Update Driver Software).
  • Кликните «Browse my computer for Driver software».
  • Для завершения найдите и выберите файл драйвера для Uno — «ArduinoUNO.inf», расположенный в папке Drivers программного обеспечения для Arduino (не в подкаталоге «FTDI USB Drivers»).
  • На этом Windows закончит установку драйвера.
Выберите ваш последовательный порт

Выберите устройство последовательной передачи платы Arduino из меню Tools | Serial Port. Вероятно, это будет COM3 или выше (COM1 и COM2 обычно резервируются для аппаратных COM-портов). Чтобы найти нужный порт, вы можете отсоединить плату Arduino и повторно открыть меню; пункт, который исчез, и будет портом платы Arduino. Вновь подсоедините плату и выберите последовательный порт.

Загрузите скетч в Arduino

Теперь просто нажмите кнопку «Upload» в программе — среде разработки. Подождите несколько секунд — вы увидите мигание светодиодов RX и TX на плате. В случае успешной загрузки в строке состояния появится сообщение «Done uploading (Загрузка выполнена)».
(Замечание. Если у вас Arduino Mini, NG или другая плата, вам необходимо физически кнопкой подать команду reset непосредственно перед нажатием кнопки «Upload»).

Несколько секунд спустя после окончания загрузки вы увидите как светодиод вывода 13 (L) на плате начнет мигать оранжевым цветом. Поздравляю, если это так! Вы получили готовый к работе Arduino!

Которые имеют стандартизированное расположение всех выводов для микроконтроллеров, а также одинаковые габариты в границах одной модели продукта. Некоторые из них имеют дополнительные элементы, позволяющие осуществлять контроль напряжения подаваемого питания и USB, который благодаря своей универсальности может и подзаряжать плату, и использоваться для связи микроконтроллера с компьютером. Одной из наилучших вариаций семейства этих плат является модель Arduino UNO R3.

Общий вид платы

На фото можно увидеть как стандартные подписи, нанесённые при изготовлении самой платы, так и добавленные с помощью графического редактора. Дело в том, что для работы в схемах используются все составляющие, но так как не все они были подписаны, пришлось исправить эту несправедливость. Теперь переходим к объяснению схематического рисунка, что за что отвечает на нём. Стоит хорошо рассмотреть Arduino UNO R3, схема этой платы представлена в многих книгах-пособиях, но для полноты статьи публикуется и здесь.

Ниже вся изображенная информация будет представлена в виде схематического рисунка, который весьма сильно отличается от визуального образа платы. Но такие отличия нисколько не влияют на качество работы с печатной платой, необходимо только понять принцип её работы, и вы увидите, что здесь ничего сложного нет.

Как МК и компьютер видят друг друга

Для корректного функционирования Arduino UNO R3 драйвер для него должен быть установлен на компьютере, что работает с платой. Выбор драйвера зависит от операционной системы. Существует отдельное ПО для Arduino UNO R3: драйвер Windows 7, Windows Vista и XP. То есть с помощью любой аппаратуры, на которую установлены эти операционные системы, можно работать с печатной платой. Arduino UNO R3 совместим со всеми компьютерамы, выпущенными с нулевых.

Почти все видимые выводы соединены напрямую с микроконтроллером. Часть из них может быть как доступной для подключения, так и задействована во внутренней схеме. Вывод USB может использоваться для подачи питания напряжением 5 В, а также для обмена информацией с компьютером, который в таком случае распознаёт устройство как неодновременный последовательный порт.

Напряжение для работы платы

Рабочее напряжение составляет 5 В. Но вход для внешнего питания рассчитан на 7-12 В. Экспериментально было установлено, что для работы хватает минимального напряжения 6 В, а максимум, который плата может выдержать, — 20 В. Но лучше не отклоняться от рекомендованных параметров, чтобы не было нежелательных ситуаций, как-то выход из строя и ему подобные варианты, зависимые от подачи напряжения.

Система энергоснабжения устроена таким образом, что происходит автоматическое переключение с USB-порта на другой источник энергии, если последний подаёт больше 6,7 В. Такие требования к предоставляемому напряжению для Arduino UNO R3, схема подключения и питания были разработаны для оптимальной работы платы.

Преимущества работы с различными напряжениями этим не ограничиваются. Плата Arduino UNO R3 может заставить работать МК и на более низком (3,3 В) напряжении, но только из-за того, что он сам функционирует на частоте 8 Гц. Плата же требует 16 Гц и, соответственно, большего напряжения.

Краткая информация о выводах

Они на плате двух типов: аналоговые и цифровые. Цифровые обозначаются буквой D (0-13), и их насчитывают 14 штук. Тогда как аналоговых шесть, и обозначаются они буквой А (0-5). Общая нумерация начинается с D, и 15-й вывод нумеруется А0, 16-й пронумерован как А1. Цифровой вывод можно использовать в качестве как входа, так и выхода, тогда как аналоговый допустимо примениять только в качестве входа.

Для чего предназначены выводы?

IOREF выдаёт необходимое для работы напряжение — 5 В.

D0 и D2 используются для обмена данными с помощью асинхронного последовательного порта. Они подключены к USB-контролеру. Но при этом следует быть осторожным, ведь их нельзя напрямую подключить к порту RS. Для подключения необходимо произвести преобразование, которое силами этих выводов не осуществляется. Информация по подключению Arduino UNO R3 (инструкция) находится в конце статьи.

Также вывод D2 или D3 можно использовать, чтобы вызвать внешнее прерывание.

D3, D5, D6, D9, D10 и D11 благодаря тому, что они связаны со счетчиками на самом микроконтроллере, используются для сигнала широтно-импульсной модуляции, а также как счетчики для внешних импульсов.

D10-D13 необходимы, чтобы МК мог работать с посторонними устройствами посредством протокола SPI. Если микроконтроллер является ведомым в конструкции, то используется D10.

Возможности ввода-вывода

Благодаря аналоговым входам можно измерить напряжение подаваемого сигнала. С их помощью реально смастерить даже осциллограф, который, правда, будет ограничен возможностями процессора. Цифровые выводы способны как генерировать сигнал, так и принимать его. Могут они работать и с ШИМ-сигналами, поэтому их используют для управления двигателем или устройством генерирования звука. Также их используют для «общения» с другими устройствами вроде однопроводной шины, асинхронного последовательного порта, SPI, I2C. Благодаря конструктивным особенностям подключение I2C и SPI возможно даже на одну шину.

Для обмена какого типа данных и в каких случаях используются различные выводы?

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

С помощью SPI цифровые устройства могут работать в тех случаях, когда необходима высокая скорость передачи всех данных. Такой обмен используется при работе с сетями Ethernet, Wi-Fi.

Техника безопасности при подаче тока

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

  1. На одном выводе микроконтроллера ток должен иметь напряжение не больше 40 мА.
  2. На одной группе выводов текущий ток не должен превысить отметку 100 мА. Самих групп выводов три.
  3. Одновременный ток на микроконтроллере не должен превысить отметку 200 мА.

Инструкция по настройке

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


Вы стали счастливым обладателем платы Arduino. Что же делать дальше? А дальше нужно подружить Arduino с компьютером. Мы рассмотрим начало работы с Arduino Uno в операционной системе Windows.

1. Установка Arduino IDE

Для начала нужно установить на компьютер интегрированную среду разработки Arduino — Arduino IDE.

Установка Arduino IDE с помощью инсталлятора избавит вас от большинства потенциальных проблем с драйверами и программным окружением.

2. Запуск Arduino IDE

После того как вы загрузили и установили Arduino IDE, давайте запустим её!

Перед нами окно Arduino IDE. Обратите внимание — мы ещё не подключали нашу плату Arduino Uno к компьютеру, а в правом нижнем углу уже красуется надпись «Arduino Uno on COM1». Таким образом Arduino IDE сообщает нам, что в данный момент она настроена на работу с целевой платой Arduino Uno. А когда придёт время, Arduino IDE будет искать Arduino Uno на порту COM1.

Позже мы поменяем эти настройки.

Что-то пошло не так?

    Arduino IDE не запускается? Вероятно на компьютере некорректно установлена JRE (Java Runtime Environment). Обратитесь к пункту (1) для переустановки Arduino IDE: инсталлятор сделает всю работу по развёртыванию JRE.

3. Подключение Arduino к компьютеру

После установки Arduino IDE пришло время подключить Arduino Uno к компьютеру.

Соедините Arduino Uno с компьютером через USB-кабель. Вы увидите, как на плате загорится светодиод «ON», и начнёт мигать светодиод «L». Это означает, что на плату подано питание, и микроконтроллер Arduino Uno начал выполнять прошитую на заводе программу «Blink» (мигание светодиодом).

Чтобы настроить Arduino IDE на работу с Arduino Uno, нам необходимо узнать, какой номер COM-порта присвоил компьютер Arduino Uno. Для этого нужно зайти в «Диспетчер устройств» Windows и раскрыть вкладку «Порты (COM и LPT)». Мы должны увидеть следующую картину:

Это означает, что операционная система распознала нашу плату Arduino Uno как COM-порт, подобрала для неё правильный драйвер и назначила этому COM-порту номер 7. Если мы подключим к компьютеру другую плату Arduino, то операционная система назначит ей другой номер. Поэтому, если у вас несколько плат Arduino, очень важно не запутаться в номерах COM-портов.

Что-то пошло не так?

4. Настройка Arduino IDE на работу с Arduino Uno

Теперь нам необходимо сообщить Arduino IDE, что плата, с которой ей предстоит общаться, находится на COM-порту «COM7».

Для этого переходим в меню «Сервис» → «Последовательный порт» и выбираем порт «COM7». Теперь Arduino IDE знает — что-то находится на порту «COM7». И с этим «чем-то» ей вскоре предстоит общаться.

Чтобы у Arduino IDE не осталось никаких сомнений, необходимо прямо указать: «Мы будем использовать Arduino Uno!». Для этого переходим в меню «Сервис» → «Плата» и выбираем нашу «Arduino Uno».

Что-то пошло не так?

    Список последовательных портов пуст? Значит Arduino Uno некорректно подключена. Вернитесь к пункту (3), чтобы отладить соединение.

    Arduino IDE невероятно тормозит при навигации по меню? Отключите в диспетчере устройств все внешние устройства типа «Bluetooth Serial». Например, виртуальное устройство для соединения с мобильным телефоном по Bluetooth может вызвать такое поведение.

Среда настроена, плата подключена. Теперь можно переходить к загрузке скетча.

Arduino IDE содержит очень много готовых примеров, в которых можно быстро подсмотреть решение какой-либо задачи. Есть в ней и простой пример «Blink». Давайте выберем его.

Немного модифицируем код, чтобы увидеть разницу с заводским миганием светодиода.

Вместо строчки:

Delay(1000 ) ;

Delay(100 ) ;

Полная версия кода:

/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13 ; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT) ; } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH) ; // turn the LED on (HIGH is the voltage level) delay(100 ) ; // wait for a second digitalWrite(led, LOW) ; // turn the LED off by making the voltage LOW delay(100 ) ; // wait for a second }

Теперь светодиод «L» должен загораться и гаснуть на десятую часть секунды. То есть в 10 раз быстрее, чем в заводской версии.

Загрузим наш скетч в Arduino Uno и проверим, так ли это? После загрузки светодиод начнёт мигать быстрее. Это значит, что всё получилось. Теперь можно смело переходить к «Экспериментам »

Что-то пошло не так?

    В результате загрузки появляется ошибка вида avrdude: stk500_get sync(): not in sync: resp = 0x00 ? Это значит, что Arduino настроена некорректно. Вернитесь к предыдущим пунктам, чтобы убедиться в том, что устройство было распознано операционной системой и в Arduino IDE установлены правильные настройки для COM-порта и модели платы.

A000073 от Arduino Corporation | Макетные платы и комплекты

Описание продукта

Arduino Uno — это плата микроконтроллера на базе ATmega328. Он имеет 14 цифровых входов / выходов (из которых 6 могут использоваться как выходы ШИМ), 6 аналоговых входов, керамический резонатор 16 МГц, USB-соединение, разъем питания, разъем ICSP и кнопку сброса. Он содержит все необходимое для поддержки микроконтроллера; просто подключите его к компьютеру с помощью кабеля USB или включите адаптер переменного тока в постоянный или аккумулятор, чтобы начать работу.

Uno отличается от всех предыдущих плат тем, что не использует микросхему драйвера FTDI USB-to-serial. Вместо этого в нем используется Atmega16U2 (Atmega8U2 до версии R2), запрограммированный как преобразователь USB-to-serial

.

Благодаря тактовой частоте 16 МГц он может эффективно выполнять команды инструкций. Его флэш-память объемом 32 КБ дает достаточно места для загрузки большинства эскизов / кода в Arduino Uno.

Это версия SMD. В этой версии микросхема ATmega крепится к плате на поверхности, поэтому ее нелегко заменить, в отличие от оригинала, где микросхему можно легко вынуть и заменить.Исполнение будет таким же, как у оригинала. Щелкните здесь, если вы ищете версию DIP.

Готовы масштабировать свой дизайн Arduino Uno? Получите ATmega328P здесь!

Характеристики

— Микроконтроллер: ATmega328
— Рабочее напряжение: 5 В
— Входное напряжение (рекомендуемое): 7-12 В
— Входное напряжение (пределы): 6-20 В
— Контакты цифрового ввода / вывода: 14 (из которых 6 обеспечивают выход ШИМ)
— Аналоговые входные контакты: 6
— Постоянный ток на каждый вход / выход: 40 мА
— Постоянный ток для 3.Вывод 3 В: 50 мА
— Флэш-память: 32 КБ (ATmega328), из которых 0,5 КБ используется загрузчиком
— SRAM: 2 КБ (ATmega328)
— EEPROM: 1 КБ (ATmega328)

Дополнительная информация:

Режим DFU

Эталонный проект

Схема

Программное обеспечение Arduino (скачать)

Узнайте, как программировать платы Arduino сегодня с помощью этих команд

Проверить Сканирует ваш код и сообщает о любых ошибках
Загрузить Компилирует ваш код и загружает его на плату Arduino через USB
Новый Открывает пустой эскиз Arduino
Открыть Открывает список сохраненных эскизов в браузере файлов
Сохранить Сохраняет текущий эскиз
Serial Monitor Открывает последовательный монитор в новом window
Структура программы Arduino
void setup () {} Выполняется один раз при запуске
void loop () {} Выполняется постоянно
Встроенные функции Arduino
Настройка контактов
pinMode (PIN_NUMBER, INPUT / OUTPU T) Устанавливает вывод в позиции PIN_NUMBER как ВХОД или ВЫХОД -вверх резистор
digitalRead (PIN_NUMBER) Считывает ввод с PIN_NUMBER и возвращает 1 или 0 (HIGH или LOW)
digitalWrite (PIN_NUMBER, VALUE) Записывает значение 1 или 0 (HIGH или LOW) к цифровому выводу PIN_NUMBER
analogRead (PIN_NUMBER) Считывает аналоговый вывод PIN_NUMBER и возвращает целое число от 0 до 1023
analogWrite (PIN_NUMBER, VALUE) Эмулирует аналоговый выход VALUE с помощью PWM на PIN_NUMBER (примечание: доступно только на контактах 3, 5, 6, 9, 10 и 11)
аналоговая ссылка (ПО УМОЛЧАНИЮ) Используйте опорное напряжение по умолчанию (5 В или 3.3 В в зависимости от напряжения на плате)
аналоговая ссылка (ВНУТРЕННЯЯ) Используйте внутреннее опорное напряжение (1,1 В для ATmega168 / 328p, 2,56 для ATmega 32U4 / 8)
аналоговая ссылка (ВНЕШНЯЯ) Используйте приложенное напряжение к выводу AREF в качестве опорного напряжения (примечание: только 0-5 В)
Функции времени
миллис () Возвращает время в миллисекундах с момента начала работы скетча Arduino как длинное целое число без знака
микросекунд () Возвращает время в микросекундах с момента начала работы скетча Arduino как длинное целое число без знака
delay (INTEGER) Задерживает выполнение программы на INTEGER миллисекунды
delayMicroseconds (INTEGER) Delays выполнение программы для целых микросекунд
Математические функции
мин (i, j) Возвращает наименьшее из двух значений i и j
max (i, j) Возвращает наибольшее из двух значений i и j
abs (i) Возвращает абсолютное значение i.
sin (угол) Возвращает синус угла в радианах
cos (угол) Возвращает косинус угла в радианах
tan (угол) Возвращает тангенс угла угол в радианах
sqrt (i) Возвращает квадратный корень из i
pow (основание, экспонента) Возводит основание числа в экспоненту числа (например,g pow (2, 3) == 8)
constrain (i, minval, maxval) Сопоставляет значение i между minval и maxval
map (val, fromL, fromH, toL, toH) Переназначает val из одного диапазона в другой
random (i) Возвращает случайное длинное целое число меньше i
random (i, j) Возвращает случайное длинное целое число между i и j
randomSeed (k) Использует значение k для заполнения функции random ()
Приведение
(тип) переменной Преобразует значение переменной в новый тип
Serial Связь
Последовательный.begin (speed) Запуск последовательной связи с указанной скоростью
Serial.end () Завершение последовательной связи
Serial.print (DATA) Печатает ДАННЫЕ на последовательный порт. ДАННЫЕ могут быть символами, строками, целыми числами и числами с плавающей запятой
Serial.available () Возвращает количество символов, доступных для чтения в последовательном буфере
Serial.read () Прочитать первый символ в последовательном буфере (возвращает -1, если данные недоступны)
Последовательный.write (DATA) Запись данных в последовательный буфер. ДАННЫЕ могут быть символом, целым числом или массивом
Serial.flush () Очищает последовательный буфер после завершения исходящей связи
Servo (#include the Servo.h tag)
Servo myServo Создает переменную myServo типа Servo
myServo.attach (PIN_NUMBER) Связывает myServo с контактом в местоположении PIN_NUMBER
myServo.write (angle) Записывает угол между 0 и 180 сервоприводом, подключенным к myServo
myServo.writeMicroseconds (us) Записывает значение в микросекундах на сервопривод, подключенный к myServo (обычно между 1000 и 2000 с 1500 в качестве средней)
myServo.read () Возвращает целое число, содержащее текущий угол сервопривода от 0 до 180
myServo.attached () Возвращает истину, если сервопривод прикреплен к выводу
myServo.detach () Разъединяет myServo с прикрепленным контактом
myServo.detach () Разъединяет myServo с подключенным контактом

Аппаратная поддержка: Использование Arduinos с JMRI

Изображение предоставлено: http://www.motorhomesites.org.uk

Arduino микро контроллеры — это компьютеры специального назначения, которые с соответствующими датчиками и другими электроника, может использоваться для эмуляции командных станций и декодеров DCC, управления стрелками машины, световые здания и декорации, а также анимировать практически все на вашем макете — все под контролем JMRI.

Введение в использование Arduinos с JMRI

Использование arduinos в вашем макете не сложнее, чем вы хотите. Вы можете получить блок система занятости и работа и связь с вашими датчиками и панелями в JMRI в всего пару часов. Вы также можете создать собственную анимацию макета, которая запускается Logix или сценарий Jython, и на устранение всех недостатков уйдут дни. Вы даже можете использовать Arduino как ваша командная станция DCC с DCC ++.Это до ты.

Программное обеспечение для разработки кода на вашем Arduino можно бесплатно скачать на сайте arduino.cc.

Есть много способов использования arduinos на железной дороге с JMRI:

  • В качестве командного пункта DCC
  • Как декодер DCC, установленный в локомотиве
  • Как декодер DCC, присоединенный к вспомогательному устройству, включая стрелочные переводы и фонари
  • Для определения занятости блока с помощью датчиков тока, инфракрасных, фотооптических или других датчики
  • Для управления реле для включения и выключения аксессуаров
  • Для непосредственного управления освещением и создания различных световых эффектов
  • Для управления двигателями различных типов (с помощью дополнительных плат управления двигателями), например, для движущиеся знаки, колеса обозрения и т. д.
  • Чтобы объединить занятость блока и управление двигателем для создания запускаемых анимаций
  • Для управления серводвигателями для создания других типов анимации, включая стрелочные переводы. эксплуатация, переходные ворота и многое другое.

JMRI обеспечивает поддержку использования arduino в качестве командной станции DCC (DCC ++) или в качестве декодера DCC (путем настройки файла определения декодера. Вы также можете использовать arduinos для управления одним или несколькими вспомогательными устройствами на вашей железной дороге, подключив arduino на ваш компьютер, на котором запущен JMRI, либо через дорожки (в этом случае он получит команды, как любой другой декодер) или через вспомогательную сеть, такую ​​как C / MRI или Loconet, в которой в случае, если они будут связываться с JMRI, следуя правилам этого протокола.Разделы ниже поможет вам начать работу.

Дополнительные справочные материалы

Вы можете найти информацию о типичных проектах в различных местах сети. Некоторые к посмотрите, включают:

  • По вопросам использования arduinos с моделями железных дорог (включая использование с JMRI), перейдите на в дискуссионную группу «arduini»
  • Примеры анимации, декодеров DCC и т.п. см. В книге Джеффа Бунзы. блог.[Многие из них могут быть легко адаптированы для связи с JMRI.]
  • Чтобы код arduino реализовал ряд тем, перечисленных выше, перейдите на эту страницу в Github. Также введите в таких поисковых запросах, как «arduino», «модель железной дороги», «DCC» и, конечно же, «JMRI».
  • Для всего, что связано с arduinos и JMRI, зайдите на YouTube и найдите сотни видео, некоторые с очень подробными описаниями того, как настроить JMRI для взаимодействия с arduinos.

Почти ежедневно создаются новые блоги и видеоролики с описанием дополнительных вариантов использования ардуино на железной дороге. С постоянным внедрением новых датчиков и контроллеров в подключаться к контактам на Arduino, вряд ли есть элемент с электронным управлением, который не может управляться через JMRI.

[В начало страницы]

Подключение к JMRI

Arduinos взаимодействует с вашим компьютером под управлением Windows, Mac или Linux различными способами. в зависимости от выполняемой функции:

В следующих разделах даются советы по использованию некоторых различных средств связи. подходы.

Эмуляция узла CMRI

Один из самых простых способов связать ваш arduino с JMRI — это установить программное обеспечение. что позволяет имитировать узел CMRI. [См. Справку CMRI страницу с информацией об использовании узлов CMRI с JMRI.] На Arduino установите один из библиотеки Arduino C / MRI и включите их в свой скетч (например, библиотеку Майкл Адамс доступен на Github (см. Также Stephen Веб-сайт Brackstone для примера его использования).См. Также ниже набор шагов по установке и работе с Arduino в качестве CMRI. узел с JMRI.

Некоторые примечания, представляющие интерес при программировании вашего Arduino как узла CMRI:

  • Обязательно установите такую ​​же скорость передачи данных (скорость передачи) в эскизе Arduino и в системном соединении JMRI CMRI. Скорость передачи будет отображаться только в окне «Настройки JMRI-> Подключения», если вы установите флажок для «Дополнительные настройки подключения.»
  • При определении объектов JMRI, таких как датчики и стрелочные переводы, которые идентифицируются с помощью CMRI. бит, JMRI начинает нумеровать биты CMRI с 1, в то время как обычное программное обеспечение CMRI для arduinos запускается с 0. Запись («установка») бита 0 CMRI в эскизе arduino устанавливает входной бит 1 JMRI CMRI для соответствующего узла. Таким образом, датчик JMRI с именем CS2001 (бит 1 на узле 2) будет контролируется установкой бита 0 CMRI в коде в скетче Arduino. Чтение («получение») CMRI бит 0 в скетче Arduino будет читать бит, управляющий стрелкой JMRI или светом прикреплен к выходному биту 1 CMRI в JMRI, т.е.грамм. CT2001 или CL2001 (обратите внимание, что у вас не может быть и свет, и стрелка, управляющие одним и тем же выходным битом). См. Также пример настройки ниже.
  • При использовании arduinos для управления показателями JMRI помните, что поведение JMRI отличается, если для стрелочного перевода задан выход в установившемся режиме по сравнению с импульсным выходом (см. Параметры явки CMRI для получения дополнительной информации). это проще настроить стрелку JMRI для стабильного вывода и использовать программирование Arduino для примите соответствующие меры в зависимости от типа используемого стрелочного перевода.
  • Обратная связь по стрелкам работает для CMRI иначе, чем для других сетей, если также используется фасция. панельные переключатели как часть вашей работы. Arduino легко запрограммировать на переключатели бросьте свои стрелки, однако, поведение JMRI может быть не таким, как вы ожидаете (если вы попытаетесь отправить отзыв в JMRI, JMRI фактически проигнорирует это и попытается установить явку вернуться к тому, что указано в таблице явки JMRI). Правильную информацию см. В разделе «Параметры явки CMRI».
  • CMRI Network Manager можно использовать для включения и отключите связь с любым узлом CMRI, который вы хотите, что-то, что полезно, если один или другие временно выведены из эксплуатации или проходят испытания.
  • Когда вы меняете состояние более чем одного устройства, подключенного к CMRI (скажем, двух стрелок) в один Route или Logix, вы не можете быть уверены, получите ли вы оба бита в первый раз, когда ваша программа Arduino запрашивает их. Через некоторое время (обычно на долю во-вторых), вы это сделаете, но запрограммируйте свой скетч Arduino так, чтобы он учитывал эту проблему.

См. Также раздел ниже, где приведен пошаговый пример создания узел CMRI на базе Arduino.

[В начало страницы]

Последовательная связь

Arduinos можно напрямую подключить к USB-порту и использовать последовательную связь через Скрипт Jython, выполняемый в JMRI. Примером является включен в каталог JMRI Jython. Джефф Бунза описывает сценарий последовательной связи для сбора данных датчиков от Arduino.это нет необходимости настраивать соединение с системой JMRI для использования прямой последовательной связи.

[В начало страницы]

Использование нескольких Arduinos через RS-485

Хотя JMRI позволяет использовать более одного подключения CMRI настроенный для макета, часто бывает удобно подключить несколько Arduinos к одному Подключение CMRInet. Это устраняет необходимость в отдельных USB-кабелях, идущих от каждого arduino для разделения USB-портов на вашем компьютере.Вместо этого можно подключить несколько ардуинов. через адаптер RS-485 к двухпроводному кабелю RS-485 в «гирляндной цепи» (каждый Arduino подключен к следующему), заканчивая адаптером RS-485-to-USB для подключения к компьютеру JMRI, как показано на эта диаграмма:

Подключите каждый Arduino к коммуникационной плате RS-485 через последовательные контакты на вашем Arduino. Есть несколько источников для платы связи RS485, цена которых варьируется от нескольких долларов до более чем 30 долларов.Вам также понадобится один преобразователь USB-RS485, также доступный. из нескольких источников.

См. Снова Стивена Брэкстоуна, чтобы получить хорошее описание того, как выполнить эту настройку.

Затем включите библиотеку RS-485 в свой скетч Arduino (например, этот, сделанный Майклом Адамсом). Делать убедитесь, что каждому arduino назначен другой номер узла CMRI. Вам не нужно никаких дополнительных программное обеспечение на вашем компьютере. Просто сообщите JMRI, к какому USB-порту подключен преобразователь, и все arduinos в сети RS485 будут видны JMRI.

[В начало страницы]

Использование функций и инструментов JMRI с Arduinos

Arduinos можно подключить практически к любому электронному компоненту, используемому на модельной железной дороге, включая двигатели стрелочных переводов, реле стрелок, светодиодное освещение и широкий спектр датчиков. Ты можно, например, определить датчик в JMRI, который идентифицируется битом ввода CMRI и стрелкой идентифицируется с выходным битом CMRI, оба из которых обрабатываются Arduino для управления стрелочный мотор.Или вы можете идентифицировать эти датчики и стрелочные переводы как «внутренние» (объекты JMRI не связанный с оборудованием в вашем макете) и используйте сценарий для обработки потока данных туда и обратно к ардуино.

Вот несколько примеров со ссылками на пояснительные статьи и / или код Arduino, которые вы можете учиться у:

  • Блочные детекторы присутствия: Подключите Arduino к нескольким блочным детекторам занятости и определить датчики JMRI, чтобы сообщать, заняты ли блоки.На панелях компоновки будут отображаться треки изменение цвета по мере того, как блоки переходят от незанятого к занятому и обратно.
  • Детекторы местоположения: Подключите Arduino к «точечному» датчику, например к фотооптическому. модуль, инфракрасный модуль, считыватель на эффекте Холла, считыватель RFID и т. д. Определите датчик JMRI, который становится активным, когда активен физический датчик, и использует его для управления маршрутами, Logix или другое действие JMRI, «инициированное».
  • Стрелочный пульт: Подключите Arduino к стрелочному двигателю или переключателю (потребуется использование вспомогательной печатной платы для питания этих устройств).Определите явку в JMRI и датчик обратной связи. Когда arduino получает запрос от JMRI, чтобы бросить стрелку (через любой выбранный вами сетевой протокол — см. выше) ардуино закинуть стрелку и поставить датчик.
  • Управление несколькими стрелками через последовательную связь: см. Пошаговые инструкции и код из Джефф Бунза здесь.
  • Запуск Logix: Подключите Arduino к переключателю или кнопке на лицевой панели.Определить Датчик JMRI, который используется для запуска Logix, чтобы что-то сделать (возможно, бросить какие-то стрелки, поставил фары и тд). Запрограммируйте Arduino, чтобы установить датчик, когда переключатель или кнопка активирован.
  • Управление светом или анимацией: добавьте контроллер двигателя к вашему Arduino, создайте объект освещения JMRI для отправки команды управления, создайте несколько датчики в JMRI для обратной связи и используйте этот эскиз для управлять вспомогательным двигателем, например, в колесе обозрения.Используйте световые объекты JMRI для отправки команд для изменения скорости или других характеристики анимации либо через последовательную связь, либо с использованием байта методы коммуникации, обсуждаемые на этой странице.
  • Спидометр: отслеживайте время, необходимое локомотиву для переключения между двумя (или более датчиков) и, используя расстояние между ними, вычислить его скорость. Отправьте эту информацию по адресу JMRI либо через последовательную связь, либо с использованием обсуждаемых методов байтовой связи на этой странице.
  • Счетчик автомобилей: с помощью детекторов местоположения, размещенных над уровнем грузовиков и сцепных устройств, напишите скетч Arduino для подсчета проезжающих машин. Подключиться к JMRI через последовательной связи и напишите сценарий для записи номера в объект памяти JMRI, который можно отобразить на панели, отображающей ваш макет.
  • DCC Decoder: превратите ваш Arduino в декодер, совместимый с NMRI. Используйте DecoderPro для изменения переменных конфигурации.

Возможности практически безграничны.

[В начало страницы]

Пошаговый пример использования Arduino в качестве узла CMRI

В этом примере будут рассмотрены основные этапы использования Arduino для отслеживания занятости блока. датчик и JMRI, использующий этот датчик для изменения цвета дорожки занятого раздел на панели макета. Это не учебник по Arduinos или JMRI, но скорее, чтобы предоставить руководство для тех, кто в целом знаком с обоими, но просто пытается использовать их вместе.Гораздо больше можно найти, проверив некоторые ссылки, перечисленные во введении выше.

  • Сначала подключите любой детектор присутствия блока (BOD), который вы используете, к соответствующему контакты на ардуино.
  • Использование IDE Arduino (интегрированная среда разработки) или другая среда разработки, создать (или скачать) скетч (программа arduino), который включает библиотеку CMRI.
  • В эскизе назначьте этот эмулируемый узел CMRI как Узел 1.
  • В скетче используйте бит 0 для отправки состояния датчика (незанятый = 0 или занят = 1). Некоторые датчики будут указывать занятый блок сигналом LOW на выводе Arduino, в то время как другие будут ВЫСОКИМИ — убедитесь, что вы знаете, какой из них подходит для вашего конкретного датчика, поэтому вы установите бит CMRI соответствующим образом.
  • Подключите USB-порт вашего Arduino к USB-кабелю, а затем к компьютеру.
  • Обратите внимание, к какому USB-порту подключен Arduino (например, на машине Windows в диспетчер устройств и посмотрите, какой номер порта появляется, когда вы подключаете кабель Arduino к USB-порт).
  • Загрузите скетч из среды разработки на ваш Arduino.
  • Откройте JMRI PanelPro.
  • Выберите Edit-> Preferences-> Connections в раскрывающемся меню, а затем «+» для добавить новое соединение.
  • Выберите «CMRI» и «Последовательный», а затем последовательный порт, к которому подключен ваш Arduino. как показано здесь. ПРИМЕЧАНИЕ: вы не сможете одновременно запустите последовательный монитор Arduino IDE и JMRI в зависимости от того, что, если открыть второй увидит, что порт используется.
  • Отметьте «Дополнительные настройки подключения» и выберите такую ​​же «Скорость передачи» (последовательный скорость связи), который вы использовали в скетче Arduino.
  • Щелкните «Настроить узлы», а затем «Добавить узел». Когда откроется окно «Добавить узел», измените «Адрес узла» на 1 и нажмите «Добавить узел», как показано здесь. Закройте это окно и нажмите «Готово». НЕОБХОДИМО УДАЛИТЬ «Сохранить» в окне настроек.
  • Откройте таблицу датчиков и создайте датчик CMRI. с системным именем 1001 (первый бит CMRI на узле 1)
  • Откройте таблицу блоков и создайте блок.Установить датчик присутствия к только что созданному датчику.
  • Перейдите на созданную вами панель и назначьте только что созданному блоку соответствующий участок пути.
  • Запускай поезда и наблюдай за происходящим!

[В начало страницы]

CBUS® — зарегистрированная торговая марка доктора Майкла Болтона


Спецификация платформы

— Arduino CLI

Это спецификация платформы Arduino для использования с программным обеспечением для разработки Arduino, начиная с Arduino IDE. 1.5.х серия.

Платформы

добавляют поддержку новых плат в программное обеспечение для разработки Arduino. Их можно установить через Boards Manager или ручная установка в аппаратную папку Arduino. папка с альбомом (также известная как «каталог пользователя»).
Платформа может состоять всего из одного файла конфигурации.

Структура папок оборудования

Новые папки оборудования имеют двухуровневую иерархическую структуру:

  • первый уровень — поставщик / обслуживающий персонал
  • второй уровень — это поддерживаемая архитектура

Поставщик / сопровождающий может иметь несколько поддерживаемых архитектур.Например, ниже у нас есть три производителя оборудования, названные «arduino», «yyyyy» и «xxxxx»:

  hardware / arduino / avr / ... - Arduino - платы AVR
hardware / arduino / sam / ... - Arduino - Платы SAM (32bit ARM)
оборудование / гггг / avr / ... - ггг - AVR
оборудование / xxxxx / avr / ... - Xxx - AVR
  

Производитель «arduino» поддерживает две архитектуры (AVR и SAM), а «xxxxx» и «yyyyy» — только AVR.

Значения архитектуры чувствительны к регистру (например, AVR ! = avr ).

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

Конфигурации архитектуры

Каждая архитектура должна быть настроена с помощью набора файлов конфигурации:

  • платформа.txt содержит определения для используемой архитектуры ЦП (компилятор, параметры процесса сборки, используемые инструменты для загрузки и т. д.)
  • boards.txt содержит определения плат (название платы, параметры для построения и загрузки эскизов и т. Д.)
  • programmers.txt содержит определения для внешних программистов (обычно используются для записи загрузчиков или эскизов на пустой ЦП / плата)

Формат файлов конфигурации

Файл конфигурации представляет собой список свойств «ключ = значение».Значение свойства можно выразить с помощью значения другого свойства, поместив его имя в квадратные скобки «{» «}». Например:

  compiler.path = / tools / g ++ _ arm_none_eabi / bin /
compiler.c.cmd = arm-none-eabi-gcc
[....]
recipe.c.o.pattern = {путь к компилятору} {compiler.c.cmd}
  

В этом примере для свойства recipe.c.o.pattern будет установлено значение / tools / g ++ _ arm_none_eabi / bin / arm-none-eabi-gcc , который является составом свойств компилятора .путь и compiler.c.cmd .

Строки, начинающиеся с # , рассматриваются как комментарии и игнорируются.

  # Как в этом примере
# --------------------
# Я комментирую!
  
Автоматическое переопределение свойств для конкретной ОС

Мы можем указать для свойства значение, зависящее от ОС. Например, следующий файл:

  tools.bossac.cmd = bossac
tools.bossac.cmd.windows = bossac.exe
  

установит свойство tools.bossac.cmd на значение bossac в Linux и macOS и bossac.exe в Windows. Поддерживается суффиксы: .linux , .windows и .macosx .

Глобальные предопределенные свойства

Следующие автоматически сгенерированные свойства могут использоваться глобально во всех файлах конфигурации:

  • {runtime.platform.path} : абсолютный путь к папке платформы платы (т. Е. К папке содержащие доски.txt)
  • {runtime.hardware.path} : абсолютный путь к папке оборудования (т. Е. К папке, содержащей папка на платформе)
  • {runtime.ide.path} : абсолютный путь к папке Arduino IDE или Arduino CLI
  • {runtime.ide.version} : номер версии IDE Arduino в виде числа (здесь используются две цифры на номер версии. компонент, и удаляет точки и ведущие нули, поэтому Arduino IDE 1.8.3 становится 01.08.03 , который становится runtime.ide.version = 10803 ). При использовании программного обеспечения для разработки Arduino, отличного от Arduino IDE, для этого параметра установлено значение бессмысленный номер версии.
  • {ide_version} : псевдоним совместимости для {runtime.ide.version}
  • {runtime.os} : работающая ОС («linux», «windows», «macosx»)
  • {программное обеспечение} : установить «ARDUINO»
  • {name} : название поставщика платформы
  • {_id} : идентификатор платы, компилируемой для
  • .
  • {сборка.fqbn} : FQBN (полное имя платы) платы, для которой выполняется компиляция. FQBN следует формату: ПОСТАВЩИК: АРХИТЕКТУРА: BOARD_ID [: MENU_ID = OPTION_ID [, MENU2_ID = OPTION_ID ...]]
  • {build.source.path} : путь к скомпилированному скетчу. Если эскиз находится в несохраненном состоянии, он будет его временная папка.
  • {build.library_discovery_phase} : устанавливается в 1 во время обнаружения библиотеки и в 0 во время нормальной сборки. Макрос определен с этим свойством можно использовать для отключения включения тяжелых заголовков во время обнаружения, чтобы уменьшить компиляцию время.Это свойство было добавлено в Arduino IDE 1.8.14 / Arduino Builder 1.6.0 / Arduino CLI 0.12.0. Примечание: с тем же intent, -DARDUINO_LIB_DISCOVERY_PHASE был добавлен в recipe.preproc.macros во время обнаружения библиотеки в Arduino Builder 1.5.3 / Arduino CLI 0.10.0. Этот флаг был заменен более гибким {build.library_discovery_phase} имущество.
  • {compiler.optimization_flags} : подробности см. В разделе «Конфигурация отладки Sketch» ​​
  • {доп.time.utc} : время Unix (секунды с 1970-01-01T00: 00: 00Z) в соответствии с машиной, на которой выполняется сборка
  • {extra.time.local} : время Unix с местным часовым поясом и смещением DST
  • {extra.time.zone} : смещение местного часового пояса без компонента DST
  • {extra.time.dst} : смещение местного летнего времени

Примечание о совместимости: в версиях до Arduino IDE 1.6.0 использовалась только одна цифра на компонент номера версии в {время выполнения.ide.version} (таким образом, 1.5.9 было 159 , а не 10509 ).

platform.txt

Файл platform.txt содержит информацию о конкретных аспектах платформы (флаги командной строки компилятора, пути, системные библиотеки и т. д.).

Должны быть определены следующие метаданные:

  name = Платы Arduino AVR
версия = 1.5.3
  

Имя будет отображаться как заголовок раздела меню платы Arduino IDE или поле имени arduino-cli основной список вывода для платформы.
версия в настоящее время неиспользуемый, он зарезервирован для будущего использования (возможно, вместе с Boards Manager для обработки зависимостей от ядер).

Процесс сборки

Файл platform.txt используется для настройки процесса сборки. Это делается через список рецептов . Каждый рецепт — это выражение командной строки, объясняющее, как вызывать компилятор (или другие инструменты) для каждого шаг сборки и какой параметр следует передать.

Программа разработки Arduino перед запуском сборки определяет список файлов для компиляции.Список состоит из:

  • Эскиз пользователя
  • Исходный код
  • в выбранной плате Core
  • Исходный код
  • в библиотеках, использованных в скетче

Временная папка создается для хранения артефактов сборки, путь к которым доступен через глобальное свойство {build.path} . Свойство {build.project_name} с названием проекта и свойство {build.arch} с также указывается название архитектуры.

  • {build.path} : путь к временной папке для хранения артефактов сборки
  • {build.project_name} : название проекта
  • {build.arch} : архитектура MCU (avr, sam и т. Д.)

Доступны некоторые другие свойства {build.xxx} , которые описаны в разделе Board.txt данного руководства.

Рецепты для компиляции исходного кода

Мы сказали, что программа разработки Arduino определяет список файлов для компиляции.Каждый файл может быть исходным кодом написано на C (файлы .c), C ++ (файлы .cpp) или ассемблере (файлы .S). Каждый язык компилируется с использованием соответствующих рецепт :

  • шаблон recipe.c.o. : для файлов C
  • recipe.cpp.o.pattern : для файлов CPP
  • recipe.S.o.pattern : для файлов сборки

Рецепты могут быть построены путем объединения следующих автоматически сгенерированных свойств (для каждого скомпилированного файла):

  • {includes} : список включаемых путей в формате «-I / include / path -I / another / path…. «
  • {source_file} : путь к исходному файлу
  • {object_file} : путь к выходному файлу

Например, для АРН используется следующее:

  ## Глобальные определения компилятора
compiler.path = {runtime.ide.path} / tools / avr / bin /
compiler.c.cmd = avr-gcc
compiler.c.flags = -c -g -Os -w -ffunction-section -fdata-section -MMD

[......]

## Скомпилировать файлы c
recipe.c.o.pattern = "{compiler.path} {compiler.c.cmd}" {compiler.c.flags} -mmcu = {build.mcu} -DF_CPU = {build.f_cpu} -DARDUINO = {runtime.ide.version} -DARDUINO_ {build.board} -DARDUINO_ARCH_ {build.arch} {build.extra_flags} {включает} "{source_file}" -o " {object_file} "
  

Обратите внимание, что некоторые свойства, такие как, например, {build.mcu} , взяты из файла boards.txt , который задокументирован. далее в этой спецификации.

Рецепты сборки архива core.a

Ядро выбранной платы скомпилировано, как описано в предыдущем абзаце, но объектные файлы, полученные из компиляция также заархивирована в статическую библиотеку с именем core.a с использованием рецепта . ar.pattern .

Рецепт может быть построен путем объединения следующих автоматически сгенерированных свойств:

  • {object_file} : объектный файл для включения в архив
  • {archive_file_path} : полный архивный файл (например, «/path/to/core.a»). Это свойство было добавлено в Arduino IDE. 1.6.6 / arduino builder 1.0.0-beta12 вместо {build.path} / {archive_file} .
  • {archive_file} : имя результирующего архива (например,»core.a»)

Например, Arduino предоставляет для AVR следующее:

  compiler.ar.cmd = avr-ar
compiler.ar.flags = rcs

[......]

## Создать архивы
recipe.ar.pattern = "{compiler.path} {compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}"
  
Рецепты для связывания

Все артефакты, созданные на предыдущих этапах (файлы объектов эскиза, файлы объектов библиотек и архив core.a), являются связаны вместе по рецепту .c.combine.pattern .

Рецепт может быть построен путем объединения следующих автоматически сгенерированных свойств:

  • {object_files} : список объектных файлов для включения в архив («file1.o file2.o ….»)
  • {archive_file_path} : полный архивный файл (например, «/path/to/core.a»). Это свойство было добавлено в Arduino IDE. 1.6.6 / arduino builder 1.0.0-beta12 вместо {build.path} / {archive_file} .
  • {archive_file} : имя файла основного архива (например,»core.a»)
  • {compiler.libraries.ldflags} : флаги компоновки для предварительно скомпилированных библиотек, которые состоят из автоматически сгенерированных -L флаги для пути к библиотеке и -l флаги для файлов библиотеки, а также любые настраиваемые флаги, предоставляемые через ldflags поле library.properties. Для поддержки предварительно скомпилированных библиотек файл platform.txt должен содержать определение compiler.libraries.ldflags , к которому будут добавлены любые автоматически сгенерированные флаги.Поддержка для предварительно скомпилированные библиотеки были добавлены в Arduino IDE 1.8.6 / arduino-builder 1.4.0.

Например, для АРН используется следующее:

  compiler.c.elf.flags = -Os -Wl, - gc-разделы
compiler.c.elf.cmd = avr-gcc

compiler.libraries.ldflags =

[......]

## Объедините gc-разделы, архивы и объекты
recipe.c.combine.pattern = "{compiler.path} {compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu = {build.mcu} -o "{build.path} / {build.project_name} .elf "{object_files} {компилятор.библиотеки.ldflags} "{archive_file_path}" "-L {build.path}" -lm
  
Рецепты извлечения исполняемых файлов и других двоичных данных

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

  recipe.objcopy.FILE_EXTENSION_1.pattern = [.....]
recipe.objcopy.FILE_EXTENSION_2.pattern = [.....]
[.....]
  

FILE_EXTENSION_x необходимо заменить расширением извлеченного файла, например, платформе AVR требуется два файлы .hex и .eep , поэтому мы сделали два рецепта, например:

  recipe.objcopy.eep.pattern = [.....]
recipe.objcopy.hex.pattern = [.....]
  

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

Полный пример для платформы AVR может быть:

  ## Создать eeprom
recipe.objcopy.eep.pattern = "{compiler.path} {compiler.objcopy.cmd}" {compiler.objcopy.eep.flags} "{build.path} / {build.project_name} .elf" "{build. путь} / {build.имя_проекта} .eep "

## Создать шестнадцатеричный
recipe.objcopy.hex.pattern = "{compiler.path} {compiler.elf2hex.cmd}" {compiler.elf2hex.flags} "{build.path} / {build.project_name} .elf" "{build.path} /{build.project_name}.hex "
  
Рецепты для расчета размера двоичного скетча

В конце сборки программа разработки Arduino показывает пользователю окончательный размер двоичного эскиза. Размер рассчитывается по рецепту recipe.size.pattern . Вывод команды, выполненной с использованием рецепта, анализируется. через регулярные выражения, установленные в свойствах:

  • рецепт.(?: \. data | \ .bss | \ .noinit) \ s + ([0-9] +). *

    Для определения общей доступной памяти можно использовать два свойства:

    • {upload.maximum_size} : доступное пространство для хранения программ
    • {upload.maximum_data_size} : доступная динамическая память для глобальных переменных

    Если размер двоичного эскиза превышает значение этих свойств, процесс компиляции завершается ошибкой.

    Эта информация отображается в выводе консоли после компиляции скетча вместе с относительным использованием памяти. значение:

      Sketch использует 924 байта (2%) пространства для хранения программ.Максимум 32256 байт.
    Глобальные переменные используют 9 байтов (0%) динамической памяти, оставляя 2039 байтов для локальных переменных. Максимум 2048 байт.
      
    Рецепты для экспорта скомпилированного двоичного файла

    Когда вы делаете Sketch> Export compiled Binary в Arduino IDE, скомпилированный двоичный файл копируется из сборки папку в папку эскиза. Копируются два двоичных файла; стандартный двоичный файл и двоичный файл, который был объединен с файл загрузчика (идентифицируется .with_bootloader в имени файла).

    Два рецепта влияют на то, как работает Экспорт скомпилированного двоичного файла :

    • recipe.output.tmp_file : определяет имя файла двоичного файла в папке сборки.
    • recipe.output.save_file : определяет имя файла, которое будет использоваться при копировании двоичного файла в папку эскиза.

    Как и в случае с другими процессами, для Экспорт скомпилированного двоичного файла существуют хуки до и после сборки.

    recipe.hooks.savehex.presavehex.NUMBER.pattern и recipe.hooks.savehex.postsavehex.NUMBER.pattern крючки (но не recipe.output.tmp_file и recipe.output.save_file ) могут быть построены путем объединения следующих автоматически сгенерированные свойства:

    • {sketch_path} : абсолютный путь к папке эскиза
    Рецепт для запуска препроцессора

    Для определения, какие библиотеки включить в сборку, и для создания прототипов функций (просто) препроцессор запущен.Для этого существует рецепт recipe.preproc.macros . Этот рецепт должен запускать препроцессор на заданном источнике файл, записывая предварительно обработанный вывод в данный выходной файл, и генерировать (только) ошибки препроцессора в стандартном выход. Этот запуск препроцессора должен происходить с теми же определениями и другими параметрами, влияющими на препроцессор, что и для обычно компилируем исходные файлы.

    Рецепты могут быть построены путем объединения других автоматически сгенерированных свойств (для каждого скомпилированного файла):

    • {includes} : список включаемых путей в формате «-I / include / path -I / another / path…. «
    • {source_file} : путь к исходному файлу
    • {preprocessed_file_path} : путь к выходному файлу

    Например, для АРН используется следующее:

      preproc.macros.flags = -w -x c ++ -E -CC
    recipe.preproc.macros = "{compiler.path} {compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.macros.flags} -mmcu = {build.mcu} -DF_CPU = {build.f_cpu} -DARDUINO = {runtime.ide.version} -DARDUINO_ {build.board} -DARDUINO_ARCH_ {build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {включает} "{source_file}" -o "{preprocessed_file_path}"
      

    Обратите внимание, что {preprocessed_file_path} может указывать на (эквивалент вашей операционной системы) / dev / null . В этом случае, также передача -MMD в gcc проблематична, поскольку он попытается сгенерировать файл зависимостей с именем /dev/null.d , что обычно приводит к ошибке разрешения. Поскольку платформы обычно включают {compiler.cpp.flags} здесь, что включает -MMD , опция -MMD автоматически отфильтровывается из рецепта recipe.preproc.macros , чтобы предотвратить это ошибка.

    Если recipe.preproc.macros не определен, он автоматически создается из recipe.cpp.o.pattern .

    Обратите внимание, что более старые версии Arduino IDE использовали рецепт . Preproc.includes recipe (который здесь не задокументирован) для определить включает. Начиная с Arduino IDE 1.6.7 (arduino-builder 1.2.0) это было изменено, и recipe.preproc.includes — это больше не используется.

    Хуки до и после сборки (начиная с Arduino IDE 1.6.5)

    Вы можете указать действия до и после каждого рецепта. Это так называемые «крючки». Вот полный список в наличии крючки:

    • recipe.hooks.sketch.prebuild.NUMBER.pattern (вызывается перед компиляцией скетча)
    • recipe.hooks.sketch.postbuild.NUMBER.pattern (вызывается после компиляции скетча)
    • рецепт.hooks.libraries.prebuild.NUMBER.pattern (вызывается перед компиляцией библиотек)
    • recipe.hooks.libraries.postbuild.NUMBER.pattern (вызывается после компиляции библиотек)
    • recipe.hooks.core.prebuild.NUMBER.pattern (вызывается перед компиляцией ядра)
    • recipe.hooks.core.postbuild.NUMBER.pattern (вызывается после компиляции ядра)
    • recipe.hooks.linking.prelink.NUMBER.pattern (вызывается перед связыванием)
    • рецепт.hooks.linking.postlink.NUMBER.pattern (вызывается после связывания)
    • recipe.hooks.objcopy.preobjcopy.NUMBER.pattern (вызывается перед выполнением рецептов objcopy)
    • recipe.hooks.objcopy.postobjcopy.NUMBER.pattern (вызывается после выполнения рецептов objcopy)
    • recipe.hooks.savehex.presavehex.NUMBER.pattern (вызывается перед выполнением рецепта savehex)
    • recipe.hooks.savehex.postsavehex.NUMBER.pattern (вызывается после выполнения рецепта savehex)

    Пример: вы хотите выполнить две команды перед компиляцией скетча и одну после связывания.Вы добавите к своему platform.txt:

      recipe.hooks.sketch.prebuild.1.pattern = компиляция эхо-скетча началась в
    recipe.hooks.sketch.prebuild.2.pattern = дата
    
    recipe.hooks.linking.postlink.1.pattern = эхо-ссылка завершена
      

    Предупреждение: рецепты перехватов сортируются перед выполнением. Если вам нужно написать более 10 рецептов для одного крючка, добавьте номер с нулем, например:

      recipe.hooks.sketch.prebuild.01.pattern = echo 1
    recipe.hooks.sketch.prebuild.02.pattern = эхо 2
    ...
    recipe.hooks.sketch.prebuild.11.pattern = echo 11
      

    Global platform.txt

    Свойства, определенные в файле platform.txt, созданном в подпапке hardware папки установки Arduino IDE, будут будет использоваться для всех платформ и переопределит локальные свойства. Эта функция в настоящее время доступна только при использовании Arduino IDE.

    platform.local.txt

    Введено в Arduino IDE 1.5.7. Этот файл можно использовать для переопределения свойств, определенных в платформе .txt или определите новый properties без изменения platform.txt (например, когда platform.txt отслеживается системой контроля версий). Это должно помещается в ту же папку, что и файл platform.txt , который он дополняет.

    boards.txt

    Этот файл содержит определения и метаданные для плат, поддерживаемых платформой. На платы ссылаются их короткое имя, идентификатор доски. Настройки платы определяются набором свойств с ключами, имеющими идентификатор платы. как префикс.

    Например, для платы Arduino Uno выбран идентификатор платы uno. Выдержка конфигурации платы Uno в Board.txt выглядит так:

      [......]
    uno.name = Arduino Uno
    uno.build.mcu = atmega328p
    uno.build.f_cpu = 16000000L
    uno.build.board = AVR_UNO
    uno.build.core = arduino
    uno.build.variant = стандартный
    [......]
      

    Обратите внимание, что все соответствующие ключи начинаются с идентификатора платы uno.xxxxx .

    Свойство uno.name содержит понятное для человека имя доски.Это показано в меню Board IDE, поле «Board Name» текстового вывода Arduino CLI или ключ «name» вывода JSON Arduino CLI.

    Свойство uno.build.board используется для установки макроса времени компиляции ARDUINO_ {build.board} , чтобы разрешить использование условный код между #ifdef с. Если не определено, автоматически создается значение build.board и Arduino программа разработки выводит предупреждение. В этом случае макрос, определенный во время компиляции, будет ARDUINO_AVR_UNO .

    Другие свойства переопределят соответствующие глобальные свойства, когда пользователь выберет доску. Эти свойства будет глобально доступен, в других файлах конфигурации, без префикса идентификатора платы:

      uno.build.mcu => build.mcu
    uno.build.f_cpu => build.f_cpu
    uno.build.board => build.board
    uno.build.core => build.core
    uno.build.variant => build.variant
      

    Этим объясняется наличие {build.mcu} или {build.board} в рецептах platform.txt: их значение перезаписывается соответственно на {uno.build.mcu} и {uno.build.board} при выборе платы Uno! Более того, автоматически генерируются следующие свойства:

    • {build.core.path} : путь к основной папке выбранной платы (внутри основной платформы, например, оборудование / arduino / avr / core / arduino)
    • {build.system.path} : путь к системной папке базовой платформы, если она доступна (для пример оборудования / arduino / sam / system)
    • {сборка.Вариант.path} : Путь к выбранной папке вариантов платы (внутри вариантная платформа, например, hardware / arduino / avr / options / micro)

    Если платформа поддерживает обнаружение подключаемых модулей, она также может объявить набор свойств upload_port. * , эти свойства будет использоваться для идентификации платы в процессе обнаружения при подключении.

    Например, мы могли бы объявить ряд свойств upload_port.vid и upload_port.pid для Uno следующим образом:

      шт.upload_port.vid.0 = 0x2341
    uno.upload_port.pid.0 = 0x0043
    uno.upload_port.vid.1 = 0x2341
    uno.upload_port.pid.1 = 0x0001
    uno.upload_port.vid.2 = 0x2A03
    uno.upload_port.pid.2 = 0x0043
    uno.upload_port.vid.3 = 0x2341
    uno.upload_port.pid.3 = 0x0243
      

    В этом случае мы используем пару USB VID / PID платы для его идентификации, но upload_port. * могут быть любыми может помочь идентифицировать определенную доску. Для получения более подробной информации см. раздел идентификации платы подключаемого обнаружения документация.

    Ядра

    ядер помещаются в подпапку ядер . На одной платформе может быть предоставлено множество различных ядер. Для Например, допустимым макетом платформы может быть следующее:

    • hardware / arduino / avr / cores / : папка ядер для архитектуры «avr», пакет «arduino»
    • оборудование / arduino / avr / cores / arduino : ядро ​​Arduino
    • hardware / arduino / avr / cores / rtos : гипотетическое ядро ​​ОСРВ

    Собственность платы корп.core используется для поиска ядра, которое необходимо скомпилировать и связать, когда плата выбрано. Например, если плате требуется ядро ​​Arduino, для переменной build.core следует установить значение:

    .

    или, если необходимо ядро ​​RTOS, на:

    В любом случае содержимое выбранной основной папки компилируется, и путь к основной папке добавляется во включаемые файлы. путь поиска.

    ArduinoCore-API

    Хотя большая часть реализации ядра зависит от архитектуры, стандартизованный API ядра и аппаратное обеспечение независимые компоненты должны быть одинаковыми для каждой платформы Arduino.Чтобы освободить авторов платформы от бремени индивидуального сохранения дубликатов этого общего кода, Arduino опубликовала его в специальном репозитории из который может легко использоваться всеми платформами. Помимо значительного сокращения усилий, необходимых для написания и поддерживать ядро, ArduinoCore-API помогает авторам ядра обеспечивать беспрецедентный уровень переносимости между платформы, что является визитной карточкой проекта Arduino.

    См. Репозиторий arduino / ArduinoCore-API для получения дополнительной информации.

    Варианты сердечника

    Иногда плата требует некоторой настройки конфигурации ядра по умолчанию (типичным примером является другое расположение выводов). А Папка основного варианта — это дополнительная папка, которая компилируется вместе с ядром и позволяет разработчикам платформы легко добавлять определенные конфигурации.

    Варианты должны быть помещены в папку вариантов в текущей архитектуре. Например, платы Arduino AVR использует:

    • hardware / arduino / avr / cores : папка ядра для архитектуры «avr», пакет «arduino»
    • оборудование / arduino / avr / cores / arduino : ядро ​​Arduino
    • hardware / arduino / avr / options / : Папка с вариантами для архитектуры «avr», пакет «arduino»
    • аппаратное обеспечение / arduino / avr / варианты / стандартный : варианты на базе ATmega328
    • аппаратное обеспечение / arduino / avr / варианты / leonardo : варианты на базе ATmega32U4

    В этом примере для платы Arduino Uno требуется стандартный вариант , поэтому сборка .Свойство варианта установлено на стандарт :

      [.....]
    uno.build.core = arduino
    uno.build.variant = стандартный
    [.....]
      

    вместо этого плате Arduino Leonardo нужен вариант leonardo :

      [.....]
    leonardo.build.core = arduino
    leonardo.build.variant = леонардо
    [.....]
      

    В приведенном выше примере и Uno, и Leonardo используют одно и то же ядро, но используют разные варианты.
    В любом случае содержимое пути выбранной вариантной папки добавляется к пути поиска включения, и его содержимое компилируется и связано с эскизом.

    Параметр build.variant.path создается автоматически.

    Плата VID / PID

    Идентификаторы поставщика USB (VID) и идентификаторы продукта (PID) идентифицируют USB-устройства для компьютера. Если на плате используется уникальный VID / PID пара, это может быть определено вboards.txt:

      uno.vid.0 = 0x2341
    uno.pid.0 = 0x0043
    uno.vid.1 = 0x2341
    uno.pid.1 = 0x0001
      

    Свойства vid и pid заканчиваются произвольным числом, что позволяет определить несколько пар VID / PID для одного доска.Приведенный выше фрагмент определяет пары 2341: 0043 и 2341: 0001, используемые досками Uno.

    Программа разработки Arduino использует свойства vid и pid для автоматической идентификации подключенных плат. к компьютеру. Эта удобная функция недоступна для плат, не имеющих уникальной пары VID / PID.

    Конфигурация управляющего сигнала монитора последовательного порта

    Платы Arduino

    , которые используют микросхему последовательного адаптера USB-TTL для связи с компьютером (например,г., Уно, Нано, Мега) часто используют последовательные управляющие сигналы DTR (готовность терминала данных) или RTS (запрос на отправку) в качестве механизма для Программное обеспечение для разработки Arduino для запуска сброса основного микроконтроллера. Установлены контакты DTR и RTS адаптера. НИЗКИЙ , когда управляющие сигналы подтверждаются компьютером, и этот уровень НИЗКИЙ преобразуется в импульс на вывод сброса микроконтроллера схемой «автосброса» на плате. Система автоматического сброса необходима для активации загрузчик в начале загрузки.

    Эта система также используется для сброса микроконтроллера при запуске Serial Monitor. Сброс удобен тем, что позволяет просматривать весь последовательный вывод с момента запуска программы. В случае сброса, вызванного открытием Serial Monitor, нежелательно, поведение утверждения сигнала управления Serial Monitor настраивается через serial.disableDTR и serial.disableRTS свойства. Установка для этих свойств значения true предотвратит установку Serial Monitor управляющие сигналы при выборе этой платы:

      [.....]
    uno.serial.disableDTR = true
    uno.serial.disableRTS = true
    [.....]
      

    Доски для скрытия

    Добавление свойства hide к определению платы приводит к тому, что оно не отображается в меню Tools> Board в Arduino IDE.

    Значение свойства игнорируется; это наличие или отсутствие свойства, которое контролирует видимость доски.

    programmers.txt

    Этот файл содержит определения для внешних программистов. Этими программистами пользуются:

    программистов.txt работает так же, как иboards.txt. На программистов ссылаются их краткие имена: ID программиста. Настройки для программиста определяются через набор свойств с ключами, которые используют программист. ID как префикс.

    Например, ID программиста, выбранный для Программист «Arduino as ISP» — это «arduinoasisp». Определение этого программатор в programmers.txt выглядит так:

      [......]
    arduinoasisp.name = Arduino в качестве интернет-провайдера
    arduinoasisp.protocol = stk500v1
    arduinoasisp. программа.скорость = 19200
    arduinoasisp.program.tool = avrdude
    arduinoasisp.program.extra_params = -P {serial.port} -b {program.speed}
    [......]
      

    Эти свойства могут использоваться только в рецептах действий, которые используют программатор ( стереть , загрузчик и программа ).

    Свойство arduinoasisp.name определяет понятное для человека имя программиста. Это показано в Инструменты> Programmer меню IDE и вывод arduino-cli upload --programmer list и arduino-cli burn-bootloader - список программистов .

    В Arduino IDE 1.8.12 и старше все программисты всех установленных платформ были доступны для использования. Начиная с Arduino IDE 1.8.13 (и во всех соответствующих версиях других инструментов разработки Arduino), только программисты, определенные доступны плата и основная платформа выбранной в данный момент платы. По этой причине, платформам теперь может потребоваться определить копии программистов, которые ранее считались предоставленными другим Платформа.

    Программа разработки Arduino использует внешние инструменты командной строки для загрузки скомпилированного эскиза на плату или для записи. загрузчики с использованием внешних программаторов.Например, avrdude используется для плат на базе AVR и bossac для плат на базе SAM. доски, но нет ограничений, можно использовать любой исполняемый файл командной строки. Параметры командной строки указываются с помощью рецептов точно так же, как и для процесса сборки платформы.

    Инструменты настраиваются в файле platform.txt. Каждый инструмент идентифицируется коротким именем, идентификатором инструмента. Инструмент может быть используется для разных целей:

    • загрузить эскиз на целевую плату (с помощью загрузчика, предустановленного на плате)
    • запрограммировать эскиз целевой платы с помощью внешнего программатора
    • стереть флэш-памяти целевой платы с помощью внешнего программатора
    • записать загрузчик на целевую плату с помощью внешнего программатора

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

      [....]
    tools.avrdude.upload.pattern = [......]
    [....]
    tools.avrdude.program.pattern = [......]
    [....]
    tools.avrdude.erase.pattern = [......]
    [....]
    tools.avrdude.bootloader.pattern = [......]
    [.....]
      

    У инструмента могут быть не определенные действия (необязательно определять все четыре действия).
    Давайте посмотрим, как загрузка действие определено для avrdude:

      tools.avrdude.path = {runtime.tools.avrdude.path}
    tools.avrdude.cmd.path = {путь} / bin / avrdude
    tools.avrdude.config.path = {путь} /etc/avrdude.conf
    
    tools.avrdude.upload.pattern = "{cmd.path}" "-C {config.path}" -p {build.mcu} -c {upload.port.protocol} -P {upload.port.address} - b {upload.speed} -D "-Uflash: w: {build.path} / {build.project_name} .hex: i"
      

    Свойство {runtime.tools.TOOL_NAME.path} и {runtime.tools.TOOL_NAME-TOOL_VERSION.path} создается для инструменты плат Arduino AVR и любой другой платформы, установленной через Boards Manager. {runtime.tools.TOOL_NAME.path} указывает на последнюю доступную версию инструмента.

    Свойства конфигурации инструмента доступны глобально без префикса. Например, tools.avrdude.cmd.path свойство можно использовать как {cmd.path} внутри рецепта, и то же самое происходит для всех других конфигураций avrdude переменные.

    Подключаемое открытие
    Инструменты

    Discovery — это особый вид инструментов, используемых для поиска поддерживаемых плат. Платформа должна объявить один или несколько подключаемых Открытия на своей платформе .txt . На открытия можно ссылаться из других пакетов, включая встроенный фиктивный пакет, содержащий традиционные открытия.

    Есть два разных синтаксиса для объявления открытий. Если платформа использует только одно обнаружение:

      pluggable_discovery.required = VENDOR_ID: DISCOVERY_NAME
      

    вместо этого, если требуется несколько открытий:

      pluggable_discovery.required.0 = VENDOR_ID: DISCOVERY_0_NAME
    pluggable_discovery.required.1 = VENDOR_ID: DISCOVERY_1_NAME
      

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

      pluggable_discovery.required = builtin: serial-discovery
      

    , если он также поддерживает платы, подключенные через сеть, он может использовать встроенный пакет mdns-discovery :

      pluggable_discovery.required.0 = встроенный: серийное обнаружение
    pluggable_discovery.required.1 = встроенный: mdns-discovery
      

    Поскольку приведенный выше синтаксис требует указания обнаружения через поле discoveryDependencies платформы индекс пакета, его может быть неудобно использовать при ручной установке. Итак, мы предоставить другой синтаксис для облегчения разработки и бета-тестирования:

      pluggable_discovery.DISCOVERY_ID.pattern = DISCOVERY_RECIPE
      

    DISCOVERY_ID должен быть заменен уникальным идентификатором для конкретного открытия, а DISCOVERY_RECIPE должен быть заменяется командной строкой для запуска обнаружения.Примером может быть:

      ## Teensy Ports Discovery
    pluggable_discovery.teensy.pattern = "{runtime.tools.teensy_ports.path} / hardware / tools / teensy_ports" -J2
      

    Мы настоятельно рекомендуем использовать этот синтаксис только в целях разработки, а не на выпущенных платформах.

    Для обратной совместимости, если платформа не объявляет об обнаружении (с использованием свойства pluggable_discovery. * ) в platform.txt ) он автоматически унаследует builtin: serial-discovery и builtin: mdns-discovery (но не другие встроенные открытия, которые могут быть добавлены в будущем).

    Для получения подробной информации см. Спецификацию Pluggable Discovery.

    Подробный параметр

    Пользователь может включить подробность из панели настроек IDE или интерфейса командной строки Arduino --verbose флаг. Это предпочтение передается в командную строку с помощью свойства ACTION.verbose (где ACTION — это действие, которое мы рассматриваем).
    Когда включен подробный режим, свойство tools.TOOL_ID.ACTION.params.verbose копируется в ACTION.подробный . Когда подробный режим отключен, свойство tools.TOOL_ID.ACTION.params.quiet копируется в ACTION.verbose . Смущенный? Может быть, пример прояснит ситуацию:

      tools.avrdude.upload.params.verbose = -v -v -v -v
    tools.avrdude.upload.params.quiet = -q -q
    tools.avrdude.upload.pattern = "{cmd.path}" "-C {config.path}" {upload.verbose} -p {build.mcu} -c {upload.protocol} -P {serial.port} -b {upload.speed} -D "-Uflash: w: {build.path} / {build.project_name}.шестнадцатеричный: я "
      

    В этом примере, если пользователь включает подробный режим, то {upload.params.verbose} используется в {upload.verbose} :

      tools.avrdude.upload.params.verbose => upload.verbose
      

    Если пользователь не включил подробный режим, то {upload.params.quiet} используется в {upload.verbose} :

      tools.avrdude.upload.params.quiet => upload.verbose
      

    Конфигурация загрузки эскиза

    Действие «Загрузить» запускается, когда пользователь нажимает кнопку «Загрузить» на панели инструментов IDE или использует загрузка arduino-cli .Arduino использует термин «загрузка» для описания процесса передачи программу на плату Arduino.

    Свойство upload.tool. определяет инструмент, который будет использоваться для загрузки. Специфический upload.tool. Свойство должно быть определено для каждой платы в файлеboards.txt:

      [......]
    uno.upload.tool.serial = avrdude
    [......]
    leonardo.upload.tool.serial = avrdude
    leonardo.upload.tool.network = arduino_ota
    [......]
      

    Для каждой платы можно определить несколько протоколов.Когда пользователь пытается загрузить, используя протокол, не поддерживаемый плата, он вернется к по умолчанию , если он был определен:

      [......]
    uno.upload.tool.default = avrdude
    [......]
    leonardo.upload.tool.default = avrdude
    leonardo.upload.tool.network = arduino_ota
    [......]
      

    по умолчанию также используется, когда пользователь не предоставляет адрес загрузки. Это можно использовать с инструментами, у которых есть встроенные обнаружение порта (например, openocd ).

    Для обратной совместимости с IDE 1.8.15 и старше предыдущий синтаксис все еще поддерживается:

    Предыдущий синтаксис эквивалентен:

      uno.upload.tool.default = avrdude
      

    Для платы также могут быть определены другие параметры загрузки. Например, в Arduino AVR Boardsboards.txt у нас есть:

      [.....]
    uno.name = Arduino Uno
    uno.upload.tool.serial = avrdude
    uno.upload.protocol = ардуино
    uno.upload.maximum_size = 32256
    uno.upload.speed = 115200
    [.....]
    leonardo.name = Ардуино Леонардо
    Леонардо.upload.tool.serial = avrdude
    leonardo.upload.protocol = avr109
    leonardo.upload.maximum_size = 28672
    leonardo.upload.speed = 57600
    leonardo.upload.use_1200bps_touch = правда
    leonardo.upload.wait_for_upload_port = правда
    [.....]
      

    Большинство переменных {upload.XXXX} используются позже в рецепте загрузки avrdude в platform.txt:

      [.....]
    tools.avrdude.upload.pattern = "{cmd.path}" "-C {config.path}" {upload.verbose} -p {build.mcu} -c {upload.port.protocol} -P {upload. port.address} -b {загрузить.speed} -D "-Uflash: w: {build.path} / {build.project_name} .hex: i"
    [.....]
      

    При необходимости одно и то же свойство может быть определено несколько раз для разных протоколов:

      leonardo.upload.serial.speed = 57600
    leonardo.upload.network.speed = 19200
      

    Два вышеуказанных свойства будут доступны как {upload.speed} , значение будет зависеть от протокола, используемого для загрузки.

    Свойства из подключаемого обнаружения

    Если платформа поддерживает подключаемое обнаружение, она также может использовать свойства порта, возвращенные при обнаружении.Например, следующие метаданные порта, полученные в результате подключаемого обнаружения:

      {
          "eventType": "добавить",
          "порт": {
            "адрес": "/ dev / ttyACM0",
            "label": "ttyACM0",
            "протокол": "серийный",
            "protocolLabel": "Последовательный порт (USB)",
            "характеристики": {
              "pid": "0x804e",
              "vid": "0x2341",
              "serialNumber": "EBEABFD6514D32364E202020FF10181E",
              "имя": "ttyACM0"
            }
          }
        }
      

    будет доступно в рецепте как переменные:

      {upload.port.address} = / dev / ttyACM0
    {upload.port.label} = ttyACM0
    {upload.port.protocol} = серийный номер
    {upload.port.protocolLabel} = последовательный порт (USB)
    {upload.port.properties.pid} = 0x8043
    {upload.port.properties.vid} = 0x2341
    {upload.port.properties.serialNumber} = EBEABFD6514D32364E202020FF10181E
    {upload.port.properties.name} = ttyACM0
    {serial.port} = / dev / ttyACM0 # для обратной совместимости
    {serial.port.file} = ttyACM0 # только потому, что протокол = серийный
      

    Вот еще пример:

      {
          "eventType": "добавить",
          "порт": {
            "адрес": "192.168.1.232 ",
            "label": "SSH на моей плате (192.168.1.232)",
            "протокол": "ssh",
            "protocolLabel": "Сетевой порт SSH",
            "характеристики": {
              "macprefix": "AA: BB: CC",
              "macaddress": "AA: BB: CC: DD: EE: FF"
            }
          }
        }
      

    , что переводится на:

      {upload.port.address} = 192.168.1.232
    {upload.port.label} = SSH на моей плате (192.168.1.232)
    {upload.port.protocol} = ssh
    {upload.port.protocolLabel} = сетевой порт SSH
    {загрузить.port.properties.macprefix} = AA: BB: CC
    {upload.port.properties.macaddress} = AA: BB: CC: DD: EE: FF
    {serial.port} = 192.168.1.232 # для обратной совместимости
      

    Эта конфигурация вместе с выбором протокола позволяет удалить жестко запрограммированный network_pattern . Теперь мы можем заменить старый рецепт (разделить на несколько строк для ясности):

      tools.bossac.upload.network_pattern = "{runtime.tools.arduinoOTA.path} / bin / arduinoOTA"
                                    -адрес {серийный.порт} -порт 65280
                                    -sketch "{build.path} / {build.project_name} .bin"
      

    с:

      tools.arduino_ota.upload.pattern = "{runtime.tools.arduinoOTA.path} / bin / arduinoOTA"
                                -address {upload.port.address} -port 65280
                                -sketch "{build.path} / {build.project_name} .bin"
      
    Пользовательские поля

    Для некоторых рецептов загрузки могут потребоваться настраиваемые поля, которые должны быть предоставлены пользователем, например имя пользователя и пароль для загрузки. по сети.В этом случае рецепт должен использовать специальный заполнитель {upload.field.FIELD_NAME} , где FIELD_NAME необходимо указать в рецепте отдельно в следующем формате:

      инструментов.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME = FIELD_LABEL
    tools.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME.secret = true
      

    FIELD_LABEL — это метка, отображаемая в графической подсказке, где пользователя просят ввести значение для поля.

    Необязательное свойство secret должно иметь значение true , если поле является секретным (например, пароль или токен).

    Давайте посмотрим на полный пример:

      tools.arduino_ota.upload.field.username = Имя пользователя
    tools.arduino_ota.upload.field.password = Пароль
    tools.arduino_ota.upload.field.password.secret = правда
    tools.arduino_ota.upload.pattern = "{runtime.tools.arduinoOTA.path} / bin / arduinoOTA" -адрес {upload.port.address} -port 65280 -username "{upload.field.username} -password" {upload .field.password} "-sketch" {build.path} / {build.project_name} .bin "
      

    Если FIELD_LABEL длиннее 50 символов, он будет усечен до 49 символов и добавлен многоточие (). к нему.Например это поле:

      tools.arduino_ota.upload.field.some_field = Это действительно длинный ярлык, который в идеале никогда не должен устанавливаться какой-либо платформой
      

    будет отображаться пользователю как:

      Это действительно длинный ярлык, который в идеале не должен…
      
    Подтверждение загрузки

    Проверка загрузки может быть активирована с помощью файла в Arduino IDE> Настройки> Проверить код после загрузки или arduino-cli upload - проверить .Здесь используется система, аналогичная параметру verbose.

    tools.TOOL_ID.ACTION.params.verify определяет значение свойства ACTION.verify , когда проверка включена и tools.TOOL_ID.ACTION.params.noverify значение, когда проверка отключена.

    Свойство {ACTION.verify} определено только для действий upload и программы upload.tool .

    До Arduino IDE 1.6.9, tools.TOOL_ID.ACTION.params.verify / noverify не поддерживались, а {upload.verify} было установлено значение true / false в соответствии с настройками проверки, а {program.verify} оставлено неопределенным. Для по этой причине обратная совместимость со старыми версиями IDE требует добавления определений для upload.verify и program.verify properties to platform.txt:

      [.....]
    инструменты.avrdude.upload.verify =
    [.....]
    tools.avrdude.program.verify =
    [.....]
      

    Эти определения заменяются значением, определенным tools.TOOL_ID.ACTION.params.verify / noverify , когда современный используется версия программного обеспечения для разработки Arduino.

    Сброс загрузчика 1200 бит / с

    Некоторые платы Arduino используют специальный чип USB-to-serial, который заботится о перезапуске основного MCU (запуск загрузчик), когда последовательный порт открыт. Однако платы со встроенным USB-соединением (например, Leonardo или Zero) придется отключиться от USB при перезагрузке в загрузчик (после чего загрузчик переподключится к USB и предлагает новый последовательный порт для загрузки).После завершения загрузки загрузчик снова отключается от USB, запускает скетч, который затем повторно подключается к USB. Из-за этих повторных подключений открывается стандартный перезапуск по последовательному каналу. не будет работать, так как это приведет к исчезновению и повторному закрытию последовательного порта. Вместо этого скетч, работающий на Эти платы интерпретируют битрейт в 1200 бит / с как сигнал о необходимости запуска загрузчика.

    Чтобы позволить программе разработки Arduino выполнить эти шаги, два свойства платы могут быть установлены на true :

    • use_1200bps_touch вызывает кратковременное открытие выбранного последовательного порта со скоростью 1200 бит / с (8N1) перед началом загрузки.
    • wait_for_upload_port заставляет процедуру загрузки ожидать (повторного) появления последовательного порта до и после загрузить. Это используется, только если также установлено значение use_1200bps_touch . Когда установлено, после касания 1200 бит / с ПО для разработки будет ждать появления нового последовательного порта и использовать его в качестве порта для загрузки. В качестве альтернативы, если исходный порт не исчезает в течение нескольких секунд, загрузка продолжается с исходным портом (который может быть в случае, если плата уже была вставлена ​​в загрузчик вручную, или отключение и повторное подключение были пропущены).Кроме того, после завершения загрузки среда IDE снова ожидает появления нового порта (или первоначально выбранного порта). порт должен присутствовать).

    Обратите внимание, что реализация IDE этого сенсорного экрана 1200 бит / с имеет некоторые особенности, а более новый arduino-cli реализация также кажется другой (не ждет порта после сброса, который, вероятно, нужен только в IDE для предотвращения открытия неправильного порта на последовательном мониторе и не имеет более короткого тайм-аута, когда порт никогда не исчезает).

    Загрузка с помощью программатора по умолчанию

    Если свойство upload.protocol не определено для платы, процесс загрузки Arduino IDE будет использовать то же самое. поведение как «Загрузить с помощью программиста». Это удобно для досок, которые только поддержка загрузки через программист.

    Последовательный порт

    Полный путь (например, / dev / ttyACM0 ) порта, выбранного через IDE или arduino-cli upload Параметр --port доступен как свойство конфигурации {upload.port.address} .

    Файловый компонент пути порта (например, ttyACM0 ) доступен как свойство конфигурации {upload.port.label} .

    Для обратной совместимости с IDE 1.8.15 и старше старое свойство serial.port все еще доступно и идентичен {upload.port.address} . Вместо serial.port.file идентичен {upload.port.label} и доступно, только если используется протокол серийный .

    Загрузка с помощью внешнего программатора

    Программа Действие запускается через функцию Sketch> Загрузить с помощью Programmer в среде IDE или arduino-cli upload --programmer <идентификатор программиста> . Это действие используется для передачи скомпилировал скетч на плату с помощью внешнего программатора.

    Свойство program.tool определяет инструмент, который будет использоваться для этого действия. Это свойство обычно определяется для каждый программист в программистах.txt и использует тот же синтаксис, что и загрузить действие:

      [......]
    usbasp.program.tool.serial = avrdude
    [......]
    arduinoasisp.program.tool.serial = avrdude
    [......]
    arduinoisp.program.tool.default = avrdude
    [......]
      

    Для обратной совместимости с IDE 1.8.15 и старше предыдущий синтаксис все еще поддерживается:

      [......]
    usbasp.program.tool = avrdude
    [......]
    arduinoasisp.program.tool = avrdude
    [......]
      

    Это действие может использовать ту же систему предпочтений проверки загрузки, что и действие upload , через программа .проверить собственности.

    При использовании Arduino IDE, если выбранный программатор с другой платформы, чем плата, программа рецепт определенный на платформе программиста используется без переопределения свойств, определенных в platform.txt платы platform. При использовании программного обеспечения для разработки Arduino кроме IDE Arduino, обработка свойств такая же, как при выполнении стандартная загрузка.

    Записать загрузчик

    Стирание загрузчика и Действия запускаются с помощью функции Tools> Burn Bootloader в среде Arduino IDE или arduino-cli запись-загрузчик .Это действие используется для прошивки загрузчика на доска.

    «Записать загрузчик» уникален тем, что он использует два действия, которые выполняются последовательно:

    1. стирание обычно используется для стирания флэш-памяти микроконтроллера и установки предохранителей конфигурации в соответствии с свойства, определенные в определении платы
    2. загрузчик используется для прошивки загрузчика на плату

    Свойство bootloader.tool определяет инструмент, который будет использоваться для действий erase и bootloader .Этот свойство обычно определяется для каждой платы в файлеboards.txt и использует тот же синтаксис, что и загрузить действие:

      [......]
    uno.bootloader.tool.serial = avrdude
    [......]
    leonardo.bootloader.tool.serial = avrdude
    leonardo.bootloader.tool.network = arduino_ota
    [......]
    duemilanove.bootloader.tool.default = avrdude
    [......]
      

    Для обратной совместимости с IDE 1.8.15 и старше предыдущий синтаксис все еще поддерживается:

      [......]
    uno.bootloader.инструмент = avrdude
    [......]
    leonardo.bootloader.tool = avrdude
    [......]
      

    При использовании Arduino IDE, если на плате используется основная ссылка, platform.txt из базовая платформа вообще не используется при определении рецептов для стирания и загрузчика действия. При использовании программного обеспечения для разработки Arduino, отличного от Arduino IDE, обработка свойств из ядра Платформа platform.txt выполняется как обычно.

    Конфигурация отладки эскиза

    Начиная с Arduino CLI 0.9.0 / Arduino Pro IDE v0.0.5-alpha.preview, поддержка отладки эскизов доступна для платформы.

    Действие отладки запускается, когда пользователь нажимает кнопку «Отладка» в среде Arduino Pro IDE или запускает arduino-cli debug команда.

    Уровень оптимизации компилятора, который подходит для нормального использования, часто не дает хорошего опыта, пока отладка. По этой причине может быть полезно использовать разные флаги компилятора при компиляции скетча для использования с отладчик.Флаги для использования при компиляции для отладки могут быть определены через compiler.optimization_flags.debug свойство, а для обычного использования — через свойство compiler.optimization_flags.release . В compiler.optimization_flags Свойство будет определяться в зависимости от того или другого, в зависимости от Arduino Pro. IDE’s Sketch> Optimize for Debugging setting or arduino-cli compile ‘s --optimize-for-debug option.

    Индивидуальные варианты платы

    Иногда бывает полезно предоставить выбираемые пользователем параметры конфигурации для конкретной платы.Например, доска может быть предоставлен в двух или более вариантах с разными микроконтроллерами или может иметь различную скорость кристалла в зависимости от модель платы и так далее …

    При использовании Arduino CLI опцию можно выбрать через FQBN.

    В среде Arduino IDE параметры добавляют дополнительные пункты меню в меню «Инструменты».

    В веб-редакторе Arduino параметры отображаются в меню «Ароматизаторы».

    Давайте посмотрим на примере реализации настраиваемой опции.Плата, использованная в примере, — это Arduino Duemilanove. Эта плата выпускалась в двух моделях, одна с микроконтроллером ATmega168, а другая — с ATmega328P.
    Мы затем, чтобы определить настраиваемую опцию, используя «cpu» MENU_ID, который позволяет пользователю выбирать между двумя разными микроконтроллеры.

    Сначала мы должны определить набор из menu.MENU_ID = Text properties. Текст — это то, что отображается в графическом интерфейсе для каждого пользовательское меню, которое мы собираемся создать, должно быть объявлено в начале досок.txt файл:

      menu.cpu = Процессор
    [.....]
      

    в данном случае название меню — «Процессор».
    Теперь давайте добавим конфигурацию по умолчанию, всегда в файлboards.txt. (общий для всех процессоров) для платы duemilanove:

      menu.cpu = Процессор
    [.....]
    duemilanove.name = Arduino Duemilanove
    duemilanove.upload.tool = avrdude
    duemilanove.upload.protocol = arduino
    duemilanove.build.f_cpu = 16000000L
    duemilanove.build.board = AVR_DUEMILANOVE
    duemilanove.build.ядро = arduino
    duemilanove.build.variant = стандартный
    [.....]
      

    Теперь определим возможные значения параметра «cpu»:

      [.....]
    duemilanove.menu.cpu.atmega328 = ATmega328P
    [.....]
    duemilanove.menu.cpu.atmega168 = ATmega168
    [.....]
      

    Мы определили два значения: «atmega328» и «atmega168».
    Обратите внимание, что ключи свойств должны соответствовать формату BOARD_ID.menu.MENU_ID.OPTION_ID = Text , где Text — это то, что отображается в меню «Процессор» в среде IDE. GUI.
    Наконец, конкретная конфигурация для каждого значения параметра:

      [.....]
    ## Arduino Duemilanove с ATmega328P
    duemilanove.menu.cpu.atmega328 = ATmega328P
    duemilanove.menu.cpu.atmega328.upload.maximum_size = 30720
    duemilanove.menu.cpu.atmega328.upload.speed = 57600
    duemilanove.menu.cpu.atmega328.build.mcu = atmega328p
    
    ## Arduino Duemilanove с ATmega168
    duemilanove.menu.cpu.atmega168 = ATmega168
    duemilanove.menu.cpu.atmega168.upload.maximum_size = 14336
    duemilanove.menu.cpu.atmega168.upload.скорость = 19200
    duemilanove.menu.cpu.atmega168.build.mcu = atmega168
    [.....]
      

    Обратите внимание, что когда пользователь выбирает значение параметра, все «вспомогательные свойства» этого значения копируются в глобальный конфигурация. Например, когда пользователь выбирает «ATmega168» в меню «Процессор» или использует FQBN arduino: avr: duemilanove: cpu = atmega168 с Arduino CLI, конфигурация под atmega168 доступна глобально:

      duemilanove.menu.cpu.atmega168.upload.maximum_size => upload.maximum_size
    duemilanove.menu.cpu.atmega168.upload.speed => upload.speed
    duemilanove.menu.cpu.atmega168.build.mcu => build.mcu
      

    Количество настраиваемых меню не ограничено.

    Система ссылок на платформу Arduino позволяет использовать компоненты других платформ в тех случаях, когда в противном случае это было бы необходимо для дублирования этих компонентов. Эта функция позволяет нам сократить минимальный набор файлов, необходимых для определения новое «железо» только до плат.txt файл.

    Ссылка на ядро ​​

    Внутри файлаboards.txt мы можем определить плату, которая использует ядро, предоставленное другим поставщиком / сопровождающим, используя синтаксис VENDOR_ID: CORE_ID . Например, если мы хотим определить плату, которая использует ядро ​​»arduino» от поставщика «arduino» мы должны написать:

      [....]
    myboard.name = Моя замечательная плата, совместимая с Arduino
    myboard.build.core = ардуино: ардуино
    [....]
      

    Обратите внимание, что нам не нужно указывать какую-либо архитектуру, поскольку используется та же архитектура, что и «myboard», поэтому мы просто говорим «arduino: arduino» вместо «arduino: avr: arduino».

    Параметры platform.txt наследуются от базовой платформы, на которую указывает ссылка, поэтому нет необходимости предоставлять platform.txt, если нет каких-либо конкретных свойств, которые необходимо переопределить.

    Используются связанные библиотеки из указанной платформы, поэтому нет необходимости в ссылочная платформа для объединения этих библиотек. Если библиотеки предоставлены, список доступных библиотек — это сумма двух библиотек, где ссылочная платформа имеет приоритет над ссылочной платформой.

    Доступны программисты с указанной платформы, поэтому нет необходимости в справочная платформа для определения этих программистов. Если ссылочная платформа предоставляет собственного программиста Определения, список доступных программистов — это сумма программистов двух платформ. В Arduino IDE 1.8.12 и старше были доступны все программисты всех установленных платформ.

    Ссылка на вариант

    Таким же образом мы можем использовать вариант, определенный на другой платформе, используя синтаксис VENDOR_ID: VARIANT_ID :

      [....]
    myboard.build.variant = arduino: стандартный
    [....]
      

    Обратите внимание, что, в отличие от основных ссылок, другие ресурсы (platform.txt, связанные библиотеки, программисты) унаследованы, а не с указанной платформы.

    Справочник по инструментам

    Рецепты инструментов, определенные в platform.txt других платформ, также можно ссылаться с помощью синтаксиса VENDOR_ID: TOOL_ID :

      [....]
    myboard.upload.tool = arduino: avrdude
    myboard.bootloader.tool = arduino: avrdude
    [....]
      

    При использовании Arduino CLI или Arduino Pro IDE (но не Arduino IDE) свойства, используемые в указанном рецепте инструмента, могут быть переопределено в файле platform.txt ссылочной платформы.

    Обратите внимание, что, в отличие от основных ссылок, ссылка на рецепт инструмента , а не приводит к унаследованию любых других ресурсов. с указанной платформы.

    Терминология платформы

    Поскольку платы могут ссылаться на ядра, варианты и инструменты на разных платформах, это означает, что одна сборка или загрузка может использовать данные с четырех различных платформ.Для ясности используется следующая терминология:

    • «Платформа платы» — это платформа, которая определяет текущую выбранную плату (например, платформа, содержащая board.txt, плата определена в.
    • «Основная платформа» — это платформа, которая содержит используемое ядро.
    • «Вариантная платформа» — это платформа, которая содержит вариант, который будет использоваться.
    • «Инструментальная платформа» — это платформа, на которой находится инструмент, используемый для текущей операции.

    В наиболее распространенном случае: платформа платы без каких-либо ссылок, все они будут относиться к одной и той же платформе.

    Обратите внимание, что приведенная выше терминология не имеет широкого распространения, но была придумана для ясности в этом документе. в Фактический код командной строки Arduino, «платформа платы» называется targetPlatform , «основная платформа» называется актуальная платформа , остальные практически безымянные.

    boards.local.txt

    Введено в Arduino IDE 1.6.6. Этот файл можно использовать для переопределения свойств, определенных в файле boards.txt , или определения новых свойства без изменения boards.txt . Он должен быть помещен в ту же папку, что и файл boards.txt , который он дополняет.

    Библиотеки, связанные с платформой

    библиотек Arduino, помещенных в подпапку библиотек платформы , доступны, когда плата платформы или платформа, которая ссылается на ядро ​​платформы, выбрана. Когда любой другой Плата выбрана, библиотеки, связанные с платформой, недоступны.

    Это часто архитектурно-зависимые библиотеки (например, SPI, Wire), которые должны быть реализованы по-разному для каждого архитектура.

    Библиотеки, связанные с платформой

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

    Для получения дополнительной информации см. Спецификацию библиотеки Arduino.

    keywords.txt

    Начиная с Arduino IDE 1.6.6, ключевые слова для каждой платформы могут быть определены путем добавления ключевых слов.txt в платформу папка архитектуры. Эти ключевые слова выделяются в среде Arduino IDE только тогда, когда одна из плат этой платформы выбрано. Этот файл имеет тот же формат, что и файл keywords.txt, используемый в библиотеках.

    Сценарий после установки

    После завершения установки платформы Boards Manager проверяет наличие скрипта с именем:

    • post_install.bat — при работе в Windows
    • post_install.sh — при работе в любой операционной системе, отличной от Windows

    Если присутствует, сценарий выполняется.

    Этот сценарий может использоваться для настройки системы пользователя для платформы, например для установки драйверов.

    Обстоятельства, при которых будет запускаться сценарий после установки, различаются в зависимости от того, для какой разработки Arduino программное обеспечение используется:

    • Arduino IDE : (все версии) запускает сценарий, когда установленная платформа подписана закрытым ключом Arduino.
    • Arduino CLI : (начиная с 0.12.0) запускает сценарий для любой установленной платформы, когда Arduino CLI находится в «интерактивном» режиме.Это поведение возможность настройки
    • Arduino Pro IDE : (начиная с версии 0.1.0) запускает сценарий для любой установленной платформы.

    Arduino — домашний помощник


    Семейство устройств Arduino — это платы микроконтроллеров, которые часто основаны на микросхеме ATmega328. Они поставляются с цифровыми входами / выходами (некоторые из них могут использоваться как выходы ШИМ), аналоговыми входами и USB-соединением. Комплектация зависит от типа доски. Наиболее распространенными из них являются Arduino Uno и Arduino Leonardo с 14 контактами цифрового ввода / вывода и 6 контактами аналогового ввода.

    Доступно множество расширений (так называемых щитов). Эти экраны можно вставлять в существующие разъемы и накладывать друг на друга. Это дает возможность расширить возможности плат Arduino.

    Интеграция с arduino предназначена для того, чтобы вы могли использовать плату, напрямую подключенную к хосту Home Assistant через USB.

    В настоящее время Home Assistant поддерживает следующие типы устройств:

    Конфигурация

    На вашей плате должна быть прошивка Firmata.Загрузите эскиз StandardFirmata на свою доску; пожалуйста, обратитесь к документации Arduino для получения дополнительной информации.

    Чтобы интегрировать платы Arduino с Home Assistant, добавьте следующий раздел в файл конфигурации .yaml :

      # Пример записи configuration.yaml
    ардуино:
      порт: / dev / ttyACM0
      

    Переменные конфигурации

    Порт, через который ваша плата подключена к хосту Home Assistant. Если вы используете оригинальный Arduino, порт будет называться ttyACM * , иначе ttyUSB * .

    Точное число можно определить с помощью команды, показанной ниже.

      ls / dev / ttyACM *
      

    Если это не работает, проверьте вывод dmesg или journalctl -f . Имейте в виду, что клоны Arduino часто используют другое имя для порта (например, / dev / ttyUSB * ).

    Предупреждение: платы Arduino не хранят состояния. Это означает, что при каждой инициализации контакты устанавливаются в положение «выкл. / Низкий».

    Добавьте пользователя, который используется для запуска Home Assistant, в группы, чтобы разрешить доступ к последовательному порту.

      sudo usermod -a -G dialout, заблокировать $ USER
      

    Датчик

    Платформа датчиков arduino позволяет получать числовые значения с аналогового входного контакта платы Arduino. Обычно значение находится в диапазоне от 0 до 1024.

    Чтобы включить датчик Arduino с помощью Home Assistant, добавьте следующий раздел в файл конфигурации configuration.yaml :

      # Пример записи configuration.yaml
    датчик:
      платформа: arduino
      булавки:
        1:
          имя: дверной выключатель
        0:
          имя: Яркость
      

    Переменные конфигурации

    Номер вывода, соответствующий схеме нумерации выводов на вашей плате.

    Имя, которое будет использоваться во внешнем интерфейсе для вывода.

    6 аналоговых контактов Arduino UNO пронумерованы от A0 до A5.

    Коммутатор

    Платформа коммутатора arduino позволяет управлять цифровыми выводами платы Arduino. Поддержка переключения контактов ограничена высоким / включенным и низким / выключенным цифровыми контактами. ШИМ (контакты 3, 5, 6, 9, 10 и 11 на Arduino Uno) пока не поддерживаются.

    Чтобы включить контакты Arduino с помощью Home Assistant, добавьте следующий раздел в конфигурацию .yaml файл:

      # Пример записи configuration.yaml
    выключатель:
      платформа: arduino
      булавки:
        11:
          имя: Fan Office
        12:
          имя: Световой стол
          начальный: правда
          отрицать: правда
      

    Переменные конфигурации

    Номер вывода, соответствующий схеме нумерации выводов на вашей плате.

    Имя, которое будет использоваться во внешнем интерфейсе для вывода.

    начальное логическое значение (необязательно, по умолчанию: false)

    Начальное значение для этого порта.

    negate boolean (необязательно, по умолчанию: false)

    Если этот вывод должен быть перевернут.

    Цифровые контакты пронумерованы от 0 до 13 на Arduino UNO. Доступны выводы от 2 до 13. Для тестирования вы можете использовать вывод 13, потому что с помощью этого вывода вы можете управлять внутренним светодиодом.

    Помогите нам улучшить нашу документацию Предложите изменение этой страницы или оставьте / просмотрите отзыв об этой странице.

    Введение в специальные пункты меню Z-Uno в Arduino IDE

    Введение в специальные пункты меню Z-Uno в Arduino IDE

    • Файл
      • Примеры
        • Z-Uno — Конкретные примеры Z-Uno
    • Инструменты
      • Плата:… — Выберите Z-Wave> Me Z-Uno
      • Ведение журнала [с]
        • Отключить — без ведения журнала отладки
        • Radio — журнал отладки, отправленный через Z-Wave
        • UART0 — ведение журнала отладки на выводе TX0, использование последовательного монитора Arduino IDE для просмотра журнала
        • Radio + UART0 — используйте оба варианта регистрации выше
      • MultiCommand [s] [i]
        • Отключено — не реализовывать класс команд MultiCommand в Z-Uno.Для контроллеров, которые его не поддерживают
        • Включено — реализация класса команд MultiCommand в Z-Uno для оптимизации передачи данных и снижения расхода заряда батареи
      • Frequency [s] — установить частоту Z-Wave для вашего Z-Uno. Убедитесь, что у вашего Z-Uno
      • правильное оборудование Z-Uno.
      • Стереть NVM [s]
        • Отключено — не трогайте память EEPROM Z-Uno
        • Пространство пользователя — стереть пользовательский раздел EEPROM при загрузке нового скетча; использовать для очистки всех сохраненных пользовательских данных
        • Системное пространство — стереть системный раздел Z-Uno EEPROM во время загрузки нового скетча; использовать для очистки сетевых настроек с сохранением пользовательских данных
        • All — удалить все пользовательские и системные данные
      • Безопасность [s] [i] [b]
        • Отключено — Z-Uno будет небезопасно включен в вашу сеть Z-Wave.Для сельских контроллеров, не поддерживающих безопасность
        • S0 — Z-Uno будет использовать Security S0 для защиты вашей конфиденциальности. Для контроллеров более старых версий, поддерживающих только Security S0
        • S2 — Z-Uno будет использовать Security S2 для защиты вашей конфиденциальности. Для современных контроллеров
      • Порт
      • — выберите порт Z-Uno
      • Get Board Info — Получите информацию о вашей плате Z-Uno
      • Программист:… — Выберите Z-Uno Programmer
      • Burn Bootloader — используется для обновления загрузчика Z-Uno

    [s] — для вступления в силу требуется загрузка эскиза.
    [i] — исключить из сети и включить обратно, чтобы вступили в силу.
    [b] — Записать загрузчик требуется перед загрузкой скетча для изменения с S0 на S2 и наоборот.

    Написание плагинов для Micro-Manager

    Начало работы

    Микро-менеджер 2.0 использует механизм обнаружения подключаемых модулей SciJava. При этом используются аннотации Java, которые должны быть созданы вашей средой сборки. В настоящее время мы не знаем, как это сделать в среде IDE, но вы все равно можете использовать свою среду IDE (например, Eclipse, NetBeans или IntelliJ) для редактирования и компиляции кода. Следующие инструкции (основанные на работе SophieH) помогут вам создавать плагины, которые могут работать в Micro-Manager 2.0. Когда вы поймете, как это сделать полностью в среде IDE, пожалуйста, делитесь своими заметками!

    Получить исходный код Micro-Manager

    Клонируйте репозиторий GitHub Micro-Manager.При желании запустите команду git submodule update --init --recursive , которая клонирует все подмодули (в настоящее время ядро ​​и устройства, которые вам не понадобятся для создания подключаемого модуля Java).

    Установите Java JDK и Apache ant

    Скачал и установил Java JDK. В настоящее время Micro-Manager построен с использованием JDK8, который можно бесплатно загрузить с Adoptium.

    Скачал и установил Apache Ant.

    Вам нужно будет установить следующие переменные среды.В Windows их можно добавить в Панель управления> Система и безопасность> Система> «Расширенная система» настройки »>« Переменные среды… ».

    • JAVA_HOME : укажите путь к вашей установке JDK, например C: \ Program Files \ AdoptOpenJDK \ jdk8u181-b13 . Не добавляйте кавычки к значению, даже если он содержит пробелы.
    • ANT_HOME : укажите путь к вашей установке Ant (где бы вы ни разместил извлеченный двоичный пакет), например C: \ apache-ant-1.9,16 . Делать не добавляйте кавычки к значению, даже если оно содержит пробелы.
    • ПУТЬ : Ant удобно добавлять в путь поиска команд. Ты можно добавить ;% ANT_HOME% \ bin в конец System PATH varialbe или добавьте пользовательскую переменную с именем PATH и установите для нее значение % ПУТЬ%;% ANT_HOME% \ bin .

    Убедитесь, что переменные среды установлены правильно и Ant работает правильно, набрав ant -version .Вы должны получить ответ, похожий на: Apache Ant (TM) версии 1.9.16, скомпилированный 10 июля 2021 г.

    В приложении терминала (я использую Git bash) перейдите в корень исходного кода микроменеджера и выполните две следующие команды:

      ant -f buildscripts / fetchdeps.xml
    сборка-сборка муравьев
      

    Копирование файлов из бинарной установки Micro-Manager

    Если вы еще не сделали этого, загрузите и установите последнюю версию Micro-Manager.Скопируйте следующие файлы .jar из этой установки Micro-Manger в папку build \ Java :

      MMJ_.jar
    AcqEngJ-0.12.3.jar
    MMCoreJ.jar
      

    Создайте код вашего плагина

    Исходный код плагина находится в каталоге plugins . Код подключаемого модуля, который должен быть доступен из других подключаемых модулей, находится в каталоге библиотек .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *