26.09.2011

ArduinoIDE 1.0 rc1

Первый кандидат в релизы на звание ArduinoIDE 1.0 стал доступен для широкого скачивания еще 17.09.2011. Возможно, существенных изменений уже и не будет, поэтому я решил забежать немного вперед и полюбоваться на наше ближайшее будущее ;)

Итак, начиная с версии 1.0 файлы со скетчами получили новое расширение .ino. Не знаю, как у вас, а у меня сразу стойкая ассоциация с Брайаном Ино ;) Смысл перехода на новое расширение - еще раз подчеркнуть, что это не скетчи processing-а (а стало быть, и расширение у них своё собственное). Означает ли это, что надо бросаться и судорожно переименовывать все скетчи? Естественно, нет ;) Скетчи со старым расширением будут по-прежнему загружаться без проблем, и только при сохранении ArduinoIDE вежливо поинтересуется:



(этот робкий вопрос, кстати, можно отключить в настройках, если хотите).

Второе значимое изменение: теперь для Arduino-совместимой платы можно определять разные варианты расположения пинов. Определения пинов вынесены в отдельные файлы в общей структуре каталогов, а в синтаксис описания плат (boards.txt) добавили строку .build.variant, указывающую, какое определение пинов подключать при компиляции.

Появились интересные макросы, помогающие сделать скетч более универсальным. Например,  чтобы выяснить прямо по ходу программы, поддерживает ли пин PWM, можно использовать  digitalPinHasPWM(номер). Или, если надо понять максимальное число цифровых пинов - теперь оно описано константой NUM_DIGITAL_PINS. Спору нет, повышение универсальности скетчей налицо, но они-то, как правило, намертво привязаны к конкретной схеме - вот и получается, что эта фича для библиотек. В этом 1.0rc1 мне удалось найти определения вышеописанных макросов только для плат класса Uno и Mega.

Библиотеки

Кстати, писателям библиотек придется потрудиться - например, WProgram.h отныне переименован в Arduino.h. Я уже просто повсеместно наблюдаю, как люди бренчуют код своих библиотек в ветки "arduino-1.0-compatible". Так что если вы написали и поддерживаете библиотеку - самое время задуматься об обновлении.

Лайма Фрай (известная также в качестве ladyada) усовершенствовала библиотеку для карт SD - теперь можно открывать несколько файлов одновременно и ходить по подкаталогам.

В основную библиотеку Ethernet добавлена поддержка DNS и DHCP, переименованы классы для сервера и клиента TCP, а также для UDP. Уже одно это повлечет за собой неизбежные правки в скетчах, использующих Ethernet library, но это еще не всё! В "серверном" скетче теперь нельзя проверять подключился ли клиент конструкцией if (client != NULL) - надо писать if (!client).

Проведена также и "идеологическая" работа по правильному наследованию - код для работы UDP и библиотека Wire наследуют потоковому классу Stream. Это позволяет прозрачно использовать для обмена его функции read(), write(), print() и println(). Опять-таки - теоретически - меньше причин менять код, например, при переходе от обмена по Serial к обмену по UDP. Да и сам Stream расширен дополнительными функциями, помогающими в парсинге входного потока информации - find(), findUntil(), parseInt(), parseFloat(), readBytes(), readBytesUntil() и setTimeout(). 

Библиотека Serial теперь не блокируется вызовом write - это значит, что данные кладутся в передающий буфер и работа скетча продолжается, а непосредственная передача происходит по мере освобождения буфера, по прерыванию. Изменился смысл Serial.flush() - теперь он не уничтожает лежащие в приемном буфере данные, а будет ждать, пока не опустошится передающий! (прямо скажу, я бы интуитивно не догадался). Serial.print(byte) печатает символьное представление числа - теперь Serial.print(65) выведет на печать '65', а не 'A'. Чтобы было именно 'A' - надо использовать Serial.write(). Появилась возможность определить callback по приходу  данных в приемный буфер: serialEvent(). Ура, теперь скетчу теперь не надо "тупо" пуллить входной буфер через Serial.available() в ожидании данных, а можно заниматься чем-то более полезным.

Произошло переключение со старой реализации софтварного последовательного порта SoftwareSerial на давно существующую более продвинутую NewSoftwareSerial от Mikal Hart.

Обновлена Firmata до версии 2.3 - теперь аналоговые пины в цифровом применении нумеруются как в Arduino - с цифры 14.

ArduinoIDE

Нас ждут традиционные украшательства - типа новых иконок, цветовой схемы и окошка about. 



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



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


(по этому поводу как раз сегодня в форуме спрашивали, кстати). 

И, наконец, самое важное - если удерживать клавишу Shift при нажатии на иконку кнопки Upload, скетч будет заливаться не обычным образом - через bootload-ер - а через программатор (надо предварительно выбрать тип программатора в меню Tools -> Programmer).

Ну и напоследок - в список стандартных программаторов добавлен USBasp, а в состав пакета включена последняя версия "дудки" - 5.11 (та самая, где для него добавили поддержку TPI), а в качестве имени программатора ему теперь сообщается "-c arduino". Это, наверное, самое ожидаемое изменение - для меня лично ;)

23.09.2011

И снова о LoLShield

Спешу довести до владельцев LoLShield информацию о новой библиотеке - LoLShieldRus. Использовать библиотеку с сайта https://code.google.com/p/lolshield/ сильно не рекомендуется, сейчас объясню, почему.

Сам автор - Джимми Роджерс - давно уже переключился на другие проекты,  а доработкой больше всех занимался Matt Mets, который, впрочем, тоже переключался на другие проекты, и вероятно именно поэтому на Google Code можно скачать только версию 0.2 оригинальной библиотеки. Впрочем, Мэтт периодически возвращался и делал какие-то изменения, но - на GitHub:
  • в июле 2010 он пофиксил ошибку с PROGMEM;
  • тогда же - добавил экспериментальные функции изменения яркости (так называемый "grayscale support"), утилиты для конвертации фонтов;
  • в январе 2011 он удалил массу функций из основной ветки - и яркость, и двойной буфер;
  • в феврале 2011 он пофиксил ошибку, из-за которой библиотека не работала с ATmega1280/2560;
  • в июле 2011 немного упорядочил структуру файлов в проекте.
Для поддержки русского языка я решил перенести именно его код в свой проект, но не стал форкаться: есть у меня кое-какие идеи, связанные с будущим развитием и библиотеки, и шилда. Пока же никаких серьезных изменений: присутствует фонт с заглавными русскими символами (для экономии флеш-памяти, идентичные по написанию символы заимствуются из английского алфавита), а также пример для вывода русского текста в виде бегущей строки.


17.09.2011

Новости Arduinoстроения

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

Arduino 1.0

Наконец-то API и перестанет меняться и будет заморожен. Это же относится и к расположению коннекторов на плате, куда будут внесены небольшие изменения для большей универсальности. Сама ArduinoIDE 1.0 rc1 уже доступна для скачивания, по традиции подробно разберу в отдельном посте.

Arduino Leonardo

Это будет новая простенькая плата на ATmega32u4. По размеру и разъемам она будет как Uno, но с более простой схемой (может быть, там и будет всего один МК, а не два? пока неясно). С программной стороны она будет иметь драйвер мыши, клавиатуры и последовательного порта. 

Arduino Due


Это будет первая официальная ARM-плата на 32-битном процессоре с ядром Cortex M3. По традиции, выбран ATMEL-овский чип SAM3U, работающий на тактовой частоте 96 МГц, имеющий 256 Кб Flash, 50 Кб SRAM, 5 линий SPI, 2 интерфейса I2C, 5 UART, 16 аналоговых входов с 12-битным разрешением и многое другое.



Плата будет выпущена небольшим тиражом и выложена в store.arduino.cc для желающих принять участие в процессе отладки софта/харда. Для широкой публики она будет доступна ближе к концу 2011. 

Arduino WiFi shield

Ну, тут все ясно из названия - плата добавляет возможность коммуникации по WiFi. Однако, в отличии от всех остальных существующих в настоящий момент на рынке шилдов на этом не будет использован готовый модуль. Авторы твердо решили, что это будет комбинация микромодуля WiFi и процессора AVR32, реализующего весь стек TCP/IP со свободной памятью для добавления новых протоколов и возможностью каких-то модификаций. Кроме того, авторы обещают попытаться сделать так, чтобы миграция кода, использующего EthernetShield была максимально простой.

Ну, готовы к изменениям? Редакция будет внимательно следить за развитием событий ;) 

01.09.2011

BlinkMuino

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

Название: BlinkMuino
Процессор: ATtiny45/85
Тактовая частота: 8 МГц
Совместимость с ArduinoIDE: ограниченная
Совместимость с Shield-платами: нет
Авторы: Tobot
Страница проекта: http://todbot.com/blog/2011/03/22/blinkm-smart-led-as-the-smallest-arduino/
Дата первого упоминания: 22.03.2011




Эта крохотная плата называется BlinkM - или "умный" светодиод. Внутри находится ATtiny45 или ATtiny85 c прошивкой, способной изображать разнообразные световые эффекты на встроенном сверхъярком RGB-светодиоде. Но более того - разработчики предоставляют специальный Sequencer - софт, предназначенный для создания произвольных эффектов. В наличии библиотеки для языков программирования Java, C, Processing - так что поддержка весьма серьезная. Однако сразу замечу - лицензия на эту прошивку для персонального (читаем - некоммерческого) использования, и в исходниках они ее не раздают.

Соответственно, поэтому и родилась идея скрестить ее с Arduino. BlinkM+Arduino = BlinkMuino. Что мы имеем?
  • размер платы - всего 15х15 мм 
  • тактовая частота 8 МГц
  • 8К Flash (4К для ATtiny45)
  • 512 байт RAM (256 байт на ATtiny45)
  • 512 байт EEPROM (256 байт на ATtiny45)
  • 5 универсальных пинов ввода-вывода
Пины распределяются так:
  • 3 пина для сверхъярких светодиодов в едином RGB-корпусе
  • 2 цифровых пина  
  • 1 аналоговый пин (совмещен с цифровым)
Теоретически, если не нужно иллюминации, можно высвободить еще три универсальных пина за счет RGB-светодиода - они могут быть и аналоговыми, и цифровыми. Плохая новость состоит в том, что аппаратного последовательного порта у нас нет, скетчам придется довольствоваться эмулированным - SoftwareSerial. А для заливки скетчей, увы, придется использовать ISP-программатор:

В роли программатора может выступить и Arduino со скетчем ArduinoISP:


Дальше надо добавить поддержку BlinkMuino в ArduinoIDE - как это сделать для ATtiny подробно расписано здесь, единым файлом (дополнительное core, добавки в boards.txt) можно скачать тут. После этих манипуляций в скетчах можно будет использовать следующие конструкции Wiring:
  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogWrite()
  • shiftOut()
  • pulseIn()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()
Назначение пинов определяется следующим образом:


На видео ниже автор подробно объясняет принципы работы и в самом конце демонстрирует работу скетча, который отслеживает потенциометр и поварачивает на соответствующий угол серво.


Я согласен с идеей по поводу компактности - часто получается, что с успешной стадии Arduino-прототипизации проект переходит в следующую стадию - практической реализации. Для этого автор обычно берет в руки паяльник и воспроизводит схему Arduino minimum на макетной плате, избавляясь таким образом от всего лишнего. Остается по большому счету только сам MCU и резонатор на 16 МГц. И вот именно в этом случае применение одного ATtiny в DIP-корпусе со встроенным резонатором может выиграть пару-тройку квадратных сантиметров. Зато придется повозиться со стандартными библиотеками - большинство из них потребует небольшой правки. Стоит ли оно того? Тут каждый решает сам ;) В конце концов - чем больше вариантов, тем лучше. Стоит BlinkM менее 15 USD.

Использованы материалы со страницы http://code.google.com/p/blinkm-projects/wiki/BlinkMuino, картинки распространяются под лицензией CC-BY-NC 2.0