Прошивка arduino без ide
Прошивка является популярным способом распространения программ для ардуино и микроконтроллеров.
Здесь описана процедура загрузки прошивки микроконтроллера платы Arduino.
Данная инструкция позволит вам установить прошивку на наиболее популярные платы такие как Nano, UNO, Leonardo, Mini, Pro Micro и другие, собранные на микроконтроллере atmega328p, atmega168, atmega32u4 и других.
О прошивках Arduino
Не стоит путать прошивку со скетчем!
Скетч – это исходный код прошивки.
Прошивка ардуино – это скомпилированный (бинарный) файл, загружаемый в плату Arduino (в микроконтроллер). Прошивка не является исходным кодом программы (скетча). Файл прошивки обычно имеет расширение HEX.
Преимущество прошивки – это простота ее использования:
- Не нужны никакие библиотеки,
- Легко загрузить и выгрузить,
- Можно перенести с одного устройства на другое.
Пожалуй, единственным недостатком прошивки является невозможность получения из нее удобочитаемого исходного кода, чтобы понять как она работает и внести в нее изменение.
Вместе с прошивкой часто может поставляться и копия памяти ПЗУ (EEPROM), в которой хранятся данные, необходимые для работы устройства.
Способы прошивки Arduino
Существует несколько популярных программ загрузки прошивки на Arduino. Подавляющее большинство из них сделаны частными программистами, а многие из них давно уже заброшены и не поддерживаются, но по-прежнему существуют в сети и прекрасно работают.
Рассмотрим пару наиболее популярных программ прошивки.
XLoader
Самая простая и лаконичная программа, которая подойдет любому, кому просто надо загрузить hex на популярную Arduino.
Загрузка прошивки интуитивно понятна:
- Выбираем…
- файл прошивки
- плату ардуино
- COM-порт
- Скорость передачи данных
Последняя версия – 1.0.
Не может загружать EEPROM.
SinaProg
SinaProg – это уже более профессиональная и универсальная программа, разработанная неизвестными иранскими программистами. Однако сразу надо сказать, что данная программа – не более чем графическая оболочка для утилиты AVRDude, о которой пойдет речь дальше.
- Выбираем файл прошивки
- Настраиваем программатор: выбираем…
- Arduino,
- Порт
- Скорость передачи
Avrdude
Большинство всех загрузчиков используют одну и ту же утилиту – AVRDude (AVR Downloader-Uploader), которая давно вошла во многие среды разработки для ардуино, в т.м. числе и в Arduino IDE.
Это мощнейшая утилита для работы с чипами AVR, но все-таки это утилита командной строки, что многим неудобно.
Загрузка HEX прошивки в Arduino
Читайте в следующем параграфе как прошить ардуино и с его помощью.
Последняя версия – 6.3.
Arduino IDE, AVRDude
Рассмотрим как загрузить прошивку, имея только Arduino IDE на компьютере с Windows.
Напомню, что вместе с Arduino IDE ставится и AVRDude, с помощью которого мы и загрузим прошивку.
Установка программного обеспечения
- Установить программу Arduino IDE, если она не установлена
- В ряде случаев потребуется установить дополнительный драйвер вашей платы (если плата – китайский клон). Драйвер нужен только в случае если вы не видите вашу плату в Arduino IDE.
Подготовка
- Подключить плату к компьютеру
- Запустить Arduino IDE
- Определить к какому порту подключена Arduino, через меню, как показано ниже:
- Определите в какой папке установлена Arduino IDE
Загрузка прошивки ардуино
- Открываете командную строку и вводите следующую команду, предварительно скорректировав ее под свои условия:
Обратите внимание на:
- Путь к Arduino IDE ( желтым ),
- Номер порта ( голубым ),
- Скорость передачи данных ( зеленым )
- Название (путь) файла прошивки ( фиолетовым )
Если при выполнении команды вы увидите ошибку как ниже
Ошибка avrdude, avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xd2, значит ваша плата не может работать со скоростью 115200, и необходимо установить скорость 57600.
Нажмите CTRL+C, чтобы прервать процесс.
Получение помощи
Если у вас что-то не получилось, и вы являетесь нашим клиентом, обратитесь на страницу поддержки.
Часто задаваемые вопросы о прошивке
Какой COM-порт выбирать?
Такой вопрос возникает обычно, когда программа не может автоматически выбрать COM-порт, к которому подключена Arduino.
Прежде всего, чтобы ардуино определялась, необходимо, чтобы на компьютере были установлены ее драйвера. Они ставятся вместе с Arduino IDE. Для китайских удешевлённых колонов может понадобится поставить драйвер CH340.
Итак, драйвера установлены, теперь выберем правильный порт.
Порт можно посмотреть в Arduino IDE…
Выбор COM-порта в Arduino IDE
… или, если вы на Windows, в диспетчере устройств:
Определение COM-порта, к которому подключена Arduino через диспетчер устройств Windows.
Однозначно, это не COM1. Поэтому, в моем случае это будет COM3.
Какую скорость выбрать?
Скорость передачи зависит от версии платы. Если мы говорим о популярных Nano или UNO, то скорость будет 115200. Однако, если вы имеете дело с китайский клоном, то, возможно, придется выбрать 57600.
В общем, рецепт прост: если не получается с одной скоростью, тут же пробуете другую.
5 Replies to “Как загрузить HEX прошивку Ардуино”
Чем регулируется частота и амплитуда , Какой кабель нужен для прошивки Arduino nano ?
Она вводится через последовательный порт, аналогично тому как загружается прошивка.
Кабель нужен mini-USB dataВ жизни ардуинщика рано или поздно наступает момент, когда в штатной среде разработки становится тесно. Если скетчам перестает хватать памяти, требуется жесткий реалтайм и работа с прерываниями или просто хочется быть ближе к железу — значит пришло время переходить на C. Бывалые электронщики при упоминании Arduino презрительно поморщатся и отправят новичка в радиомагазин за паяльником. Возможно, это не самый плохой совет, но мы пока не будем ему следовать. Если отбросить Arduino IDE и язык wiring/processing, у нас в руках останется прекрасная отладочная плата, уже оснащенная всем необходимым для работы микроконтроллера. И, что немаловажно, в память контроллера уже зашит бутлоадер, позволяющий загружать прошивку без использования программатора.
Для программирования на языке C нам понадобится AVR GCC Toolchain.Windows:
Устанавливаем WinAVR, который содержит все необходимое.Debian и Ubuntu:
sudo apt-get install gcc-avr binutils-avr avr-libcТакже нам потребуется установленная Arduino IDE, т.к. она содержит утилиту avrdude, которая нужна для загрузки прошивки в контроллер. CrossPack тоже содержит avrdude, но версия, идущая с ним, не умеет работать с Arduino.
После того, как все установлено, создадим наш первый проект. Для начала напишем Makefile. Он позволит нам избежать ввода длинных команд вручную при каждой компиляции и загрузке прошивки.
В этом файле нам нужно вписать свою команду для запуска avrdude. На разных системах она будет выглядеть по разному. Чтобы узнать свой вариант, запускаем Arduino IDE и в настройках ставим галочку «Show verbose output during upload».
Небольшое замечание: все отступы в Makefile делаются символами табуляции (клавишей Tab). Если ваш текстовый редактор заменяет эти символы пробелами, команда make откажется собирать проект.Теперь создадим файл main.c — собственно текст нашей программы, в которой традиционно помигаем светодиодом.
Наш проект готов. Откроем консоль в директории нашего проекта и введем команду «make»:
Как видим, размер получившейся прошивки составляет всего 180 байт. Аналогичный ардуиновский скетч занимает 1116 байт в памяти контроллера.Теперь вернемся к консоли и введем «make flash» чтобы загрузить скомпилированный файл в контроллер:
Если загрузка прошла без ошибок, то светодиод, подключенный к 13 контакту платы, радостно замигает. Иногда avrdude не может найти плату или отваливается по таймауту — в этом случае может помочь передегивание USB кабеля. Также, во избежание конфликтов доступа к плате, не забудьте закрыть Arduino IDE перед командой «make flash».Возможно многие вещи, описанные в этой статье, покажутся очевидными матерым разработчикам. Я постарался описать процесс максимально понятным для начинающего ардуинщика языком и собрать в одном месте информацию, которую мне удалось добыть в различных источниках, и проверенную опытным путем. Может быть кому-то эта статья сэкономит пару часов времени.
За последний год я написал довольно много кода для Arduino и попутно сменил несколько инструментов разработки. В статье упоминаются варианты которые пробовал и более подробно о том, на чем остановился. Речь пойдет про набор инструментов для случая когда >10 проектов под разные платы и немного про разработку и установку библиотек.Среда разработки
В чем проблема?
- Только в последних версиях появилось какое-то управление библиотеками, пока без подобия Gemfile/requirements.txt/package.json, то есть нельзя для проекта указать какие либы каких версий используются
- нет интеграции с Git или другими VCS
- текстовый редактор не сравнить с моим любимым текстовым редактором
- нет возможности сохранить выбор платы в проекте
- неудобный вывод ошибок компиляции
Что пробовал
Ino — проект от российской компании Амперка, утилита командной строки для прошивки Arduino.
Довольно популярный был проект, >200 форков. Последний коммит в апреле 2014, поэтому не работает со свежими версиями IDE (кажется начиная с 1.5).
Есть живой форк Arturo, немного его использовал, но были проблемы в каких-то экзотических случаях.Arduino-Makefile
Arduino-Makefile — компиляция и загрузка с помощью make. Не поддерживаются Arduino Due, Zero и другие 32-битные платы. Отличием от стандартной IDE является то, что методы должны быть объявлены до использования, так что при переносе готовых проектов может понадобится редактирование исходников. Если правильно помню, мне не удалось подружить Arduino-Makefile и SparkFun Pro Micro.
Что использую
PlatformIO
- один проект под несколько плат, т.е. тот же самый код должен компилироваться под разные платы
- много проектов под разные платы, т.е. каждый проект под одну плату, но проектов много и платы разные
- есть необходимость работать через ssh, например если PlatformIO установлен на Raspberry Pi
- острое неприятие графического интерфейса
Использование с Arduino
Пересказывать документацию не буду, тут инструкция по установке, об использовании можно посмотреть в разделе Quick Start
Структура папок проекта для PlatformIO отличается от проекта Arduino IDE, каждый проект содержит файл platformio.ini в котором указано какие платы используются. Таким образом не приходится каждый раз выбирать нужную плату.
Расскажу на примере как использую PlatformIO при разработке библиотеки для Arduino. У библиотеки есть два примера, каждый из них является проектом в формате PlatformIO. В файле настроек проекта platformio.ini перечислены все платы на которых должна работать библиотека:Скомпилировать пример для всех плат можно командой:
Скомпилировать только для uno можно так:
Загрузить прошивку на uno:
Запустить монитор последовательного порта:
Добавил алиасы в .zshrc чтобы сделать команды короче:
С ними таже последовательность действий:
Так же есть интеграция с Travis CI и другими CI инструментами, подробнее тут.
Вобще-то у Arduino IDE есть интерфейс коммандной строки, но он далек от совершенства.Нюансы PlatformIO
- компиляция в PlatformIO не всегда равноценна компиляции в Arduino IDE, то что скопмилировалось в PlatformIO может не компилироваться в Arduino IDE и наоборот
- структура папок проекта не совпадает со структурой для Arduino IDE
- не все библиотеки доступны для установки через platformio lib
Serial.print("Может быть лучше");
В чем проблема?
Стандартный Serial.print() слегка неудобен в случае если нужно напечатать
название и значение переменной, например чтобы вывести "pin_2 = <состояние пин 2>, pin_3 = <состояние пин 3>" приходится делать так:Доступные модификаторы
wildcard comment Example %s replace with an string (char*) Log.Info("String %s", myString); %c replace with an character Log.Info("use %c as input", myChar) %d replace with an integer value Log.Info("current value %d",myValue); %l replace with an long value Log.Info("current long %l", myLong); %x replace and convert integer value into hex Log.Info ("as hex %x), myValue); %X like %x but combine with 0x123AB Log.Info ("as hex %X), myValue); %b replace and convert integer value into binary Log.Info ("as bin %b), myValue); %B like %x but combine with 0b10100011 Log.Info ("as bin %B), myValue); %t replace and convert boolean value into "t" or "f" Log.Info ("is it true? %t), myBool); %T like %t but convert into "true" or "false" Log.Info ("is it true? %T), myBool);
Что использую
advancedSerial
Экономия памяти
Если обернуть строку в макрос F(), то она не будет загружена в память (SRAM), так что для экономии памяти используйте F():
Безусловно использование advancedSerial добавляет некоторый оверхед по сравнению со стандартным Serial, я попробовал приблизительно оценить какой. Ниже привожу результаты компиляции для Arduino Uno, так как у нее 2KB памяти и это минимум среди плат которые обычно использую.
Обычный сериал, без каких-либо библиотек:
storage space: 5%
dynamic memory: 9%advancedSerial:
storage space: 5%
dynamic memory: 10%examples/Advanced.ino
storage space: 9%
dynamic memory: 26%examples/Advanced.ino с использованием F() макроса
storage space: 9%
dynamic memory: 10%
Получается что использование памяти увеличивается незначительно. Но advancedSerial не оптимальное решение в плане ресурсов, есть альтернативные реализации, например Debug.Установка библиотек
В чем проблема?
Arduino IDE
Редко пользуюсь Arduino IDE, возможно есть способ лучше. Способ такой: устанавливать библиотеки в подпапку вашего проекта и поместить симлинки(ярлыки?) для каждой библиотеки в папку libraries (в папку куда устанавливает библиотеки Arduino IDE).
Кстати, если правильно помню, Arduino IDE компилирует все библиотеки из папки libraries при компиляции любого скетча, так что время компиляции увеличивается если в libraries много библиотек. Еще один повод не использовать Arduino IDE.Давайте немного отвлечемся от создания нашего робота и поговорим о том, как мы будем записывать прошивку в Arduino.
Во всех вышеописанных платах используется микроконтроллер ATmega328 (в более старых версиях ATmega168).
Одной из главных причин выбора платы Arduino для проекта робота была возможность записывать прошивку устройства в МК не применяя программатора и каких либо дополнительных устройств. Все что нужно для прошивки микроконтроллера Arduino – это стандартный USB шнур (который входит в комплект Arduino).
Это значит, если Вы имеете Ардуину – Вы имеете любое устройство ZiChip!
Запись программы в МК через USB происходит через специальный загрузчик (Bootloader), который записан в МК при изготовлении платы. Вообще, загрузчик предназначен для работы со своим специальным программным обеспечением Arduino IDE, но в случае, когда необходимо прошить в Ардуину что-то постороннее (свой Hex-файл), есть программки позволяющее это реализовать.
Начнем, конечно, с моей программы загрузчика
GC-UploaderЭто все! Ничего сложного. Прошивка через несколько секунд будет записана в МК и автоматически запустится. Один минус – программа никак не сообщает о том, что прошивка уже записана, но это можно увидеть по прекращению мерцания светодиодов RXD и TXD на Ардуине.
XLoader использует для записи прошивки AVR Dude и в качестве протокола программирования используется STK500. Но, похоже, в настройках AVR Dude, произведена коррекция, так как использование стандартного AVR Dude с такими же настройками не дает результатов.
Автоматизация XLoader.
Программа при записи открывает дополнительные окна и визуально отображает свои действия, что позволяет следить за процессом записи.
Автоматизация ARP Uploader.
ARP Uploader как и XLoader работает через AVR Dude, но, в отличие от XLoader, показывает командную строку. Это дает возможность использовать AVR Dude напрямую в Make или Bat файле.Дополнительные материалы.
Драйвера Arduino.Считаю не лишним напомнить, что для связи Arduino с компьютером в последнем должны присутствовать драйвера. Оставляю здесь архив с драйверами для Arduino (включая и старые драйвера в Old_Arduino_Drivers.zip и драйвера для FTDI-чипа в папке «FTDI USB Drivers»
Загрузчики Arduino
Если Вы решите собрать свою плату Arduino (а сложного там ничего нет, фактически, это голый ATmega328 или ATmega168), Вам понадобится загрузчик Bootloader который должен содержать МК для работы со средой (или программками для заливки Hex-файлов). Конечно, Вам для записи Hex-файлов в чистый МК понадобится программатор и придется выставить фьюзы.
Схемы Arduino
Фьюзы установленные по умолчанию в Arduino (только с ATmega328)
Arduino Uno
Low Fuse 0xFF
High Fuse 0xDE
Extended Fuse 0x05Arduino Duemilanove or Nano w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05Arduino BT w/ ATmega328
Low Fuse 0xFF
High Fuse 0xD8
Extended Fuse 0x05LilyPad Arduino w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05Читайте также: