Всем привет!
Недавно публиковались на GT пара статей против и за применения Arduino для чего-то более прибыльного, чем мигание лампочками и создание домашних метеостанций. Обычный такой дискурс из мира технологий, когда технологии становятся все более и более доступны широким слоям населения, плавали, знаем.
Имея техническое образование и ВУЗовскую специальность непосредственно связанную с программированием микроконтроллеров, я понимаю тех кто против. А имея много лет опыта коммерциализации не только своих, но и в большей степени чужих знаний и навыков, я отлично понимаю тех кто за.
Вы правы, и вы тоже правы, а истина, как всегда где-торядом посередине.
Прежде всего нужно понять о чем спор. Arduino это не только красиво упакованные итальянцами в печатные платы и коробочки микроконтроллеры, и не только среда разработки Arduino IDE. Прежде всего это библиотеки для быстрой разработки, и на мой взгляд именно они представляют наибольшую ценность. Если посмотреть на принципиальные схемы плат Arduino, то ничего особо впечатляющего мы не увидим. Среда разработки… Скажем так, немного не дотягивает до Borland C++ образца 1994 года.
Как мы знаем, эти библиотеки распространяются по лицензии GNU, их можно брать и использовать не отчисляя лицензионных платежей их создателям. Такая модель бизнеса требует зарабатывать на чем-то еще, кроме лицензионных отчислений. Вот они и зарабатывают, производя и продавая в красивой упаковке за 20 баксов то, что инженер электронщик купит за 20 центов.
И важно тут не то, что они такие алчные буржуи, обирающие трудовой народ и достойные порицания от всего прогрессивного человечества, а то, почему они могут так делать. Потому, что:
Теперь о том, зачем и как скрещивать наработки потребительского сегмента занимательной электроники с циклом разработки коммерческого проекта. В этом цикле экосистема Arduino имеет одно весьма ценное свойство — скорость разработки.
Скорость — это отношение пройденного расстояния ко времени. Чем больше скорость, тем быстрее мы сделаем работу или тем большую работу мы сделаем за отведенное нам время и гипотетически заработаем больше денег в единицу времени.
Представьте, к Вам обратился заказчик, у него есть какие-то хотелки-требования, а у Вас нет в закромах Родины почти готового на 86% проекта со схожими функциональными характеристиками. У любого заказчика есть два Основных Вопроса:
(очень часто на второй вопрос ему нужен ответ «вчера»)
По опыту коммерческой деятельности осмелюсь утверждать, что заказчик выберет путькурильщика ардуинщика.
Далее о том как использовать Arduino для своих корыстных целей, сблэкджеком и групповой разработкой, контролем версионности, документированием проекта и прочими чучелами-лебедями из мира коммерческой разработки.
На самом деле все очень просто. Для этого, не считая разработчиков, нужна среда разработки и стенд на котором они смогут разрабатывать. C++, он и в Африке C++, AVR и в Arduino остается AVR.
В качестве среды рассмотрим Eclipse. Вот тут очень хорошая статья о том, как настроить Eclipse сначала на работу с AVR Toolchain, а потом подключить библиотеки Arduino и замигать светодиодом на Uno. А вот тут еще лучше, но на английском.
Я немного дополню их кое-какими граблями, на которые наступил, возможно кому-то это сэкономит пару часов времени.
Все нижеследующее описано для Линукса и Leonardo. Для Винды нужно предварительно установить MinGW/msys.
Для сборки всех исходников, входящих в ядро Arduino нужно правильно выставить константы препроцессора. Если посмотреть исходный код библиотек, то можно увидеть множество структур условной компиляции #ifdef #else #endif. В статье по ссылке автор на все это забил, взяв готовый .a файл скомпилированный Arduino IDE. Но в ядро попадают не все библиотеки, например, SPI и Ethernet не попадают, а в них нас ждут такие же приколы с условной компиляцией.
Выяснить какие константы и как установить можно очень просто.
Что бы компилятор нашел все .h файлы, которые мы захотим использовать в проекте нужно указать к ним путь в настройках. Тут есть два способа. Можно указать абсолютные пути к папкам Arduino IDE или прилинковать библиотеку к проекту и указывать относительный путь от {workspase}/{ProjName}. Второй способ позволит компилировать ядро в Eclipse, хотя принципиальной разницы нет, и в Arduino IDE и в Eclipse за компиляцию отвечает avr-g++.
Дополнительно указываем путь к pins_arduino.h для той платы, которую используем в проекте.
Дабы не нарушать стройной структуры файлов библиотеки main.cpp из нее править не будем. Просто включим его как есть из ядра в проект, а свой файл назовем каким-нибудь другим именем. Объявлять в нем функцию main() не нужно, она уже есть в main.cpp, инициализирует все что нужно и в бесконечном цикле вызывает функцию loop(), линковщик соберет все как надо.
Среда готова к работе. Пишем примерно так же как в Arduino IDE, но тут немного строже следят за соблюдением канонов C++. И в любой момент можем спустится от высокоуровневого программирования на этаж ниже. Если не хватает скорости работы с портами через digitalWrite — пишем напрямую в порты.
Увы, привычку завешивать процессор вызовом
Для заливки и Arduino IDE и Eclipse используют утилиту-программатор AVRDude. Платы типа Uno она действительно знает под именем «arduino», а вот более дешевые типа Leonardo она категорически под этим именем узнавать отказывается.
Идем в boards.txt и узнаем, что для программатора
Программатор в настройках AVRDude называется «Atmel AppNote AVR109 Boot Loader», вот он:
Небольшое неудобство только в том, что Eclipse не будет делать вот этого
Придется ручками нажимать reset перед загрузкой.
Ну и в заключении один и тот же проект, собранный в Arduino IDE
и в Eclipse
Пустячок, а для для доделки как раз эти полкило и не хватает.
Недавно публиковались на GT пара статей против и за применения Arduino для чего-то более прибыльного, чем мигание лампочками и создание домашних метеостанций. Обычный такой дискурс из мира технологий, когда технологии становятся все более и более доступны широким слоям населения, плавали, знаем.
Имея техническое образование и ВУЗовскую специальность непосредственно связанную с программированием микроконтроллеров, я понимаю тех кто против. А имея много лет опыта коммерциализации не только своих, но и в большей степени чужих знаний и навыков, я отлично понимаю тех кто за.
Вы правы, и вы тоже правы, а истина, как всегда где-то
Прежде всего нужно понять о чем спор. Arduino это не только красиво упакованные итальянцами в печатные платы и коробочки микроконтроллеры, и не только среда разработки Arduino IDE. Прежде всего это библиотеки для быстрой разработки, и на мой взгляд именно они представляют наибольшую ценность. Если посмотреть на принципиальные схемы плат Arduino, то ничего особо впечатляющего мы не увидим. Среда разработки… Скажем так, немного не дотягивает до Borland C++ образца 1994 года.
Как мы знаем, эти библиотеки распространяются по лицензии GNU, их можно брать и использовать не отчисляя лицензионных платежей их создателям. Такая модель бизнеса требует зарабатывать на чем-то еще, кроме лицензионных отчислений. Вот они и зарабатывают, производя и продавая в красивой упаковке за 20 баксов то, что инженер электронщик купит за 20 центов.
И важно тут не то, что они такие алчные буржуи, обирающие трудовой народ и достойные порицания от всего прогрессивного человечества, а то, почему они могут так делать. Потому, что:
- Оказались в нужное время в нужном месте и разглядели первыми те возможности, которые не увидели другие;
- Сделали доступным для потребителя то, что раньше было доступно узкому кругу ограниченных лиц;
- Красиво все упаковали и преподнесли потребителю в готовом к употреблению виде.
Теперь о том, зачем и как скрещивать наработки потребительского сегмента занимательной электроники с циклом разработки коммерческого проекта. В этом цикле экосистема Arduino имеет одно весьма ценное свойство — скорость разработки.
Скорость — это отношение пройденного расстояния ко времени. Чем больше скорость, тем быстрее мы сделаем работу или тем большую работу мы сделаем за отведенное нам время и гипотетически заработаем больше денег в единицу времени.
Представьте, к Вам обратился заказчик, у него есть какие-то хотелки-требования, а у Вас нет в закромах Родины почти готового на 86% проекта со схожими функциональными характеристиками. У любого заказчика есть два Основных Вопроса:
- Сколько будет стоить?
- Когда будет готово?
(очень часто на второй вопрос ему нужен ответ «вчера»)
Ответ здорового программиста | Ответ ардуинщика |
Нам нужно провести предпроектное исследование, составить техническое задание, провести ряд итераций по его уточнению и после его утверждения мы скажем через сколько месяцев мы будем готовы представить Вам первый прототип для дальнейшего уточнения функциональных требований и характеристик изделия. | Завтра я представлю Вам прототип, как я его вижу, и мы обсудим детали. Стоимость готового изделия при тираже M штук будет от X до Y и потребуется примерно Z недель. |
По опыту коммерческой деятельности осмелюсь утверждать, что заказчик выберет путь
Далее о том как использовать Arduino для своих корыстных целей, с
На самом деле все очень просто. Для этого, не считая разработчиков, нужна среда разработки и стенд на котором они смогут разрабатывать. C++, он и в Африке C++, AVR и в Arduino остается AVR.
В качестве среды рассмотрим Eclipse. Вот тут очень хорошая статья о том, как настроить Eclipse сначала на работу с AVR Toolchain, а потом подключить библиотеки Arduino и замигать светодиодом на Uno. А вот тут еще лучше, но на английском.
Я немного дополню их кое-какими граблями, на которые наступил, возможно кому-то это сэкономит пару часов времени.
Все нижеследующее описано для Линукса и Leonardo. Для Винды нужно предварительно установить MinGW/msys.
Для сборки всех исходников, входящих в ядро Arduino нужно правильно выставить константы препроцессора. Если посмотреть исходный код библиотек, то можно увидеть множество структур условной компиляции #ifdef #else #endif. В статье по ссылке автор на все это забил, взяв готовый .a файл скомпилированный Arduino IDE. Но в ядро попадают не все библиотеки, например, SPI и Ethernet не попадают, а в них нас ждут такие же приколы с условной компиляцией.
Выяснить какие константы и как установить можно очень просто.
- Запускаем Arduino IDE
- Выбираем плату, которую используем в качестве стенда
- Файл — Настройки — Показывать подробный вывод — Компилятор
- Запускаем компиляцию и внимательно читаем консоль, ищем строки вида
*** avr-g++ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_LEONARDO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x8036 '-DUSB_MANUFACTURER="Unknown"' '-DUSB_PRODUCT="Arduino Leonardo"' ***
Все, что указано с ключом -D (кроме F_CPU, его Eclipse добавит сама) надо добавить в настройках компилятора в Eclipse.
Что бы компилятор нашел все .h файлы, которые мы захотим использовать в проекте нужно указать к ним путь в настройках. Тут есть два способа. Можно указать абсолютные пути к папкам Arduino IDE или прилинковать библиотеку к проекту и указывать относительный путь от {workspase}/{ProjName}. Второй способ позволит компилировать ядро в Eclipse, хотя принципиальной разницы нет, и в Arduino IDE и в Eclipse за компиляцию отвечает avr-g++.
Дополнительно указываем путь к pins_arduino.h для той платы, которую используем в проекте.
Дабы не нарушать стройной структуры файлов библиотеки main.cpp из нее править не будем. Просто включим его как есть из ядра в проект, а свой файл назовем каким-нибудь другим именем. Объявлять в нем функцию main() не нужно, она уже есть в main.cpp, инициализирует все что нужно и в бесконечном цикле вызывает функцию loop(), линковщик соберет все как надо.
Среда готова к работе. Пишем примерно так же как в Arduino IDE, но тут немного строже следят за соблюдением канонов C++. И в любой момент можем спустится от высокоуровневого программирования на этаж ниже. Если не хватает скорости работы с портами через digitalWrite — пишем напрямую в порты.
Увы, привычку завешивать процессор вызовом
delay(5000);
Eclipse не лечит. Этому учат где-то то ли в старших классах школы, то ли младших курсах ВУЗа, это настолько глубоко проникает в личность, что никакие нравоучения не могут наставить человека на путь истинный.Для заливки и Arduino IDE и Eclipse используют утилиту-программатор AVRDude. Платы типа Uno она действительно знает под именем «arduino», а вот более дешевые типа Leonardo она категорически под этим именем узнавать отказывается.
Идем в boards.txt и узнаем, что для программатора
leonardo.upload.protocol=avr109
Программатор в настройках AVRDude называется «Atmel AppNote AVR109 Boot Loader», вот он:
Небольшое неудобство только в том, что Eclipse не будет делать вот этого
leonardo.upload.use_1200bps_touch=true
Придется ручками нажимать reset перед загрузкой.
Ну и в заключении один и тот же проект, собранный в Arduino IDE
Скетч использует 28 432 байт (99%) памяти устройства. Всего доступно 28 672 байт.
Глобальные переменные используют 1 254 байт (48%) динамической памяти, оставляя 1 306 байт для локальных переменных. Максимум: 2 560 байт.
и в Eclipse
Invoking: Print Size
avr-size --format=avr --mcu=atmega32u4 EthernetController.elf
AVR Memory Usage
----------------
Device: atmega32u4
Program: 27834 bytes (84.9% Full)
(.text + .data + .bootloader)
Data: 1257 bytes (49.1% Full)
(.data + .bss + .noinit)
Finished building: sizedummy
Пустячок, а для для доделки как раз эти полкило и не хватает.