Всего за 6 лет под Raspberry были адаптированы почти все популярные языки программирования. Какие-то имеют существенные ограничения, какие-то работают на полную катушку. Рассмотрим 9 представителей второй категории.
Scratch
Официальный сайт предлагает пользователям Raspberry первый делом обратиться к Scratch. Исходники языка уже включены в стандартную операционную систему Raspbian. Начать создание IoT с помощью Scratch может как взрослый специалист, так и совсем ещё ребёнок. Недаром он всего за 10 лет выбился в топ-20 языков по числу запросов в поисковиках.
Python
Возможно для вас это будет сюрпризом, но Pi в названии – это не математическая константа, а отсылка к Python. IDLE, стандартная среда разработки программ на Raspberry, работает как раз на змеином языке. На официальном сайте в разделе документация вы найдёте базовое руководство. Кроме того, благодаря Python Games и их исходникам, вы познакомитесь с возможностями языка.
HTML5 и CSS3
Компьютеры Raspberry Pi подходят для создания систем IoT, а встроенный браузер Epiphany — подходящий клиентский интерфейс. Это значит, что без языков веба не обойтись. HTML5 и CSS3 позволят вам решить вопрос создания виртуальной оболочки умного дома с минимальными затратами времени и незначительными ограничениями.
JavaScript
JavaScript — динамическая сила Raspberry Pi. Вы сможете поработать с ним благодаря платформе Node.js, позволяющей вам создавать десктопные и веб-приложения. Не стоит забывать про библиотеку jQuery, которая работает в любом браузере, и наполняет его привычными динамическими функциями.
Возможность запустить Java-код на любой платформе – главная концепция языка. И эта концепция особенно полезна для таких платформ, как Raspberry Pi. Вы сначала отладите код на «большой» ОС, а потом перенесёте на Raspbian. При этом разработка приложений на Java внутри «малиновой» системы затруднительна — здесь нет полноценной среды для этого языка.
Так как Raspbian – ОС на базе Unix, в качестве базового языка здесь выступает С. С его помощью вы получите максимальную производительность без использования машинных команд. Это особенно важно для серверных систем в составе IoT. Надмножество языка, Objective-C, используется для написания приложений для iPhone и iPad, что также может пригодиться вам с «малиной».
С++ пригодится там, где нужны и скорость, и безопасность, и чёткость работы. Спектр задач при этом невероятно широк – от работы непосредственно с железом до организации взаимодействия устройств и клиентов. С++ переменит на «малиновую» сторону опытных разработчиков из прошлого века и тех, кто до этого писал код лишь для микроконтроллеров.
Perl постепенно сдаёт позиции в мире больших машин, но в Raspberry Pi это пока один из основных инструментов. Он поставляется «из коробки», имеет множество расширений и дополнений, с его помощью можно организовать сбор информации или переписать Си-программу. Это ударит по быстродействию, зато работать с таким кодом на порядок проще.
Erlang
Erlang — язык программирования для создания сложных систем. Допустим вы разрабатываете на своем одноплатном друге атомную электростанцию или нейронно-вычислительную сеть. C++ или другой прикладной язык не подойдёт. А вот Erlang позволит вам минимизировать ошибки и извлечь максимум возможностей из Raspberry Pi. Конечно, если вы дорастете до этого уровня.
Как вы поняли, язык разработки для Rasberry Pi имеет третьестепенное значение. Выбор зависит от вкусовых предпочтений, от типа решаемой задачи и вашего опыта. А значит, Rasberry Pi станет вашим верным спутником в программировании, какой бы путь вы ни выбрали.
В 2011 году одноплатный компьютер Raspberry Pi был выпущен для тех, кто устал искать готовые решения и решил творить технологическое окружение самостоятельно. В то время как Arduino – это игрушка в большей степени для любителей работать руками, «малиновый» продукт – разминка мозга для программистов.
Всего за 6 лет под Raspberry были адаптированы почти все популярные языки программирования. Какие-то имеют существенные ограничения, какие-то работают на полную катушку. Рассмотрим 9 представителей второй категории.
Scratch
Официальный сайт предлагает пользователям Raspberry первый делом обратиться к Scratch. Исходники языка уже включены в стандартную операционную систему Raspbian. Начать создание IoT с помощью Scratch может как взрослый специалист, так и совсем ещё ребёнок. Недаром он всего за 10 лет выбился в топ-20 языков по числу запросов в поисковиках.
Python
Возможно для вас это будет сюрпризом, но Pi в названии – это не математическая константа, а отсылка к Python. IDLE, стандартная среда разработки программ на Raspberry, работает как раз на змеином языке. На официальном сайте в разделе документация вы найдёте базовое руководство. Кроме того, благодаря Python Games и их исходникам, вы познакомитесь с возможностями языка.
HTML5 и CSS3
Компьютеры Raspberry Pi подходят для создания систем IoT, а встроенный браузер Epiphany — подходящий клиентский интерфейс. Это значит, что без языков веба не обойтись. HTML5 и CSS3 позволят вам решить вопрос создания виртуальной оболочки умного дома с минимальными затратами времени и незначительными ограничениями.
JavaScript
JavaScript — динамическая сила Raspberry Pi. Вы сможете поработать с ним благодаря платформе Node.js, позволяющей вам создавать десктопные и веб-приложения. Не стоит забывать про библиотеку jQuery, которая работает в любом браузере, и наполняет его привычными динамическими функциями.
Возможность запустить Java-код на любой платформе – главная концепция языка. И эта концепция особенно полезна для таких платформ, как Raspberry Pi. Вы сначала отладите код на «большой» ОС, а потом перенесёте на Raspbian. При этом разработка приложений на Java внутри «малиновой» системы затруднительна — здесь нет полноценной среды для этого языка.
Так как Raspbian – ОС на базе Unix, в качестве базового языка здесь выступает С. С его помощью вы получите максимальную производительность без использования машинных команд. Это особенно важно для серверных систем в составе IoT. Надмножество языка, Objective-C, используется для написания приложений для iPhone и iPad, что также может пригодиться вам с «малиной».
С++ пригодится там, где нужны и скорость, и безопасность, и чёткость работы. Спектр задач при этом невероятно широк – от работы непосредственно с железом до организации взаимодействия устройств и клиентов. С++ переменит на «малиновую» сторону опытных разработчиков из прошлого века и тех, кто до этого писал код лишь для микроконтроллеров.
Perl постепенно сдаёт позиции в мире больших машин, но в Raspberry Pi это пока один из основных инструментов. Он поставляется «из коробки», имеет множество расширений и дополнений, с его помощью можно организовать сбор информации или переписать Си-программу. Это ударит по быстродействию, зато работать с таким кодом на порядок проще.
Erlang
Erlang — язык программирования для создания сложных систем. Допустим вы разрабатываете на своем одноплатном друге атомную электростанцию или нейронно-вычислительную сеть. C++ или другой прикладной язык не подойдёт. А вот Erlang позволит вам минимизировать ошибки и извлечь максимум возможностей из Raspberry Pi. Конечно, если вы дорастете до этого уровня.
Как вы поняли, язык разработки для Rasberry Pi имеет третьестепенное значение. Выбор зависит от вкусовых предпочтений, от типа решаемой задачи и вашего опыта. А значит, Rasberry Pi станет вашим верным спутником в программировании, какой бы путь вы ни выбрали.
К 2017 г. продано 12,5 млн. единиц Raspberry Pi , а количество оригинальных проектов, созданных на его основе, исчисляется десятками тысяч. По состоянию на 2019 г. популярность устройства не снижается, разработчик выпускает обновленные версии с актуальным железом, а база проектов регулярно пополняется интересными новинками.
Какой язык выбрать для Raspberry Pi
Это устройство напоминает Ардуино, но с уклоном в программирование. Если Arduino больше подходит для любителей поработать руками, то Raspberry Pi в большей степени – головоломка для мозга. На Хабре, да и на сайте разработчиков полно интересных проектов, основу которых составляет именно «малина». Это и датчики разного типа, и роботы, и аналоги планшетов (iPad, конечно, не заменит, но эксперимент отличный). Из ограничений здесь – только ваша фантазия и скилл в программировании.
Популярность сделала свое дело – под Raspberry Pi адаптированы практически все популярные языки программирования. КПД у всех разный и сегодня мы предлагаем не концентрироваться на каком-то одном проекте, а коротко пройтись по языкам, пригодным для работы с «малиной».
Scratch
Один из основных языков Raspberry Pi. Создавался как язык для детей, а его разработчики использовали принцип конструктора Лего. Создание программы на Scratch напоминает составление блок-схемы. Программы состоят из отдельных графических блоков, каждый подписан, в числе поддерживаемых есть и русский язык.
Подходит для первых шагов в освоении IoT. Язык набирает популярность, а его исходники включены в Raspbian.
Один из базовых языков для работы с «малиной». Если ваш проект предполагает работу с серверными системами, например, в составе IoT, то C – идеальный выбор. Он позволяет отказаться от машинных команд и вывести производительность на максимум. Сама Raspbian – Unix система и C в ней базовый язык.
Если проект предусматривает работу с «яблочными устройствами», придется использовать Objective-C. Но и это проблемой не станет, компилятор без проблем понимает обычный C код.
Создавая проекты на Raspberry Pi работать придется в 2 направлениях:
- непосредственно с железом;
- настроить схему взаимодействия разных устройств.
С++ подходит под обе задачи. Язык обеспечивает безопасность, надежность и скорость работы – то, что нужно для Raspberry Pi.
Если выберете этот язык, то работать придется по такой схеме:
- сперва пишется и отлаживается код на «настольной» ОС;
- затем она переносится в Raspbian.
Создавать код сразу на Raspbian будет сложно, пока что полноценную среду для этого не создали. Критическим недостатком это назвать нельзя, концепция Java (возможность запуска на любой платформе) позволяет создавать приложения для «малины» без ограничения функционала.
JavaScript
Изначально создавался как «язык для непрограммистов». Нечто, обладающее функционалом Java, но с более низким входным порогом. Задача решена, и мы получили легкий и функциональный язык для создания веб- и десктопных приложений. В работе пригодится платформа Node JS и сторонние библиотеки, в частности jQuery.
Python
Отсылка к этому языку скрыта в названии самого устройства, Pi указывает именно на Python. Для новичков этот язык – идеальный старт. Его синтаксис несложный, код получается простой и удобочитаемый, используются стандартные английские слова, запомнить их несложно.
Даже среда разработки на Raspberry Pi (IDLE) работает на этом языке. На сайте разработчиков есть развернутое руководство по Python, также в сети полно исходников по Python Games.
Языку уже больше 30 лет, и он до сих пор востребован. Из особенностей отметим громадное количество модулей CPAN и возможности по работе с текстом. Лучше всего Perl характеризует его символ – верблюд. Код получается может и не слишком красивым, зато он надежен и подходит для решения сложных задач.
В последние годы его популярность постепенно снижается, но на Raspberry Pi этой тенденции пока нет. Идеально подходит для сбора информации, задачу облегчает масса разных дополнений, расширений. Работать с кодом просто, наблюдается снижение быстродействия по сравнению, например, с C, но для «малины» это некритично.
CSS3 и HTML5
Эту связку рекомендуем тем, кто решил на основе «малины» создать виртуальную оболочку для смарт дома (Raspberry Pi подходит не только для развлекательных проектов). В Raspberry Pi встроен браузер Epiphany, значит нам необходим веб язык. Решение таких задач с помощью CSS3 и HTML5 максимально экономичное и быстрое.
Erlang
Компания Ericsson создавала его для создания сложных распределенных вычислительных систем. Применяется главным образом для решения нетривиальных задач в духе создания параллельных высоконагруженных распределенных систем (телекоммуникационная сфера), масштабирующихся распределенных баз данных.
Прикладной язык с такими задачами не справится, но Erlang может. В случае с «малиной» подойдет только людям со стажем в программировании.
Заключение
Выбор языка для работы с Raspberry Pi должен проводиться с учетом того, какую задачу собираетесь решить. Для детской игрушки нелогично будет использовать Erlang, для умного дома лучше выбрать CSS3+HTML, чем Scratch. В остальном перед вами полная свобода действий, никто не загоняет вас в жесткие рамки. Занимайтесь творчеством, прокачивайте скилл в программировании и обязательно делитесь результатами своих экспериментов с Raspberry Pi.
Хочешь создать свой проект в «железе», который перевернет мир с ног на голову? Или автоматизировать управление светом в коридоре. При этом ты не специалист в программировании микроконтроллеров, но разобрался с arduino и тем как моргать её светодиодами и только узнал о полевых транзисторах, симисторах, 1-Wire. Теперь хочешь управлять всем этим хозяйством и предоставить доступ через интернет и хранить данные в облаке.
Или ты дружишь с паяльником, гуру программирования ПЛК, снифишь PDU в modbus. Но компьютер с Windows и SCADA слишком дорог для проекта или не подходит почему-то еще… И хочется запускать программу на одноплатном компьютере Raspberry PI с доступом к ее переферии GPIO, I2C.
Используя готовые компоненты и библиотеки, можно разрабатывать программу используя языки визуального программирования. К счастью программистов и к несчастью пользователей всех таких систем, настает такой момент, когда нужна функциональность, которая не поддерживается «из коробки». Программы не генерируют другие программы для нашего сложного мира лучше чем программисты и у нас пока есть работа. Перечислим как же можно визуально программировать типовые задачи:
Блок-схемы/Дружелюбный русский алгоритмический язык, который обеспечивает наглядность(ДРАКОН)/Р-схемы и т.п. Что я отлично запомнил по программированию в школе и первых курсах института, так это блок-схемы. Рисование блок-схем подходят для занятий студентов, чтобы как и у солдат, все свободное время было занято работой. Еще одно их применение — обучение программированию на листе бумаге. Ну и наконец, кто-то работает и рисует такие диаграммы, чтобы сдать госпроект по ЕСПД/ГОСТ. Посочувствуем им!
CASE инструментарий — сотни их за заоблачные деньги и часто с сомнительной пользой. Особенно много таких систем используется архитекторами ПО и баз данных.
Диаграмма состояний UML из которой с помощью кодогенерации можно получить заготовку или готовую управляющую программу. Эта диаграмма является примером автоматного программирования. И отлично подходит для проектирования компиляторов, многих электронных устройств и любых задач и модулей систем в которых есть сущности со сложным поведением.
Язык релейно-контактной логики. Этот язык должен быть близок инженерам и тем кто программирует ПЛК. Программирование лифта — один из типичных примеров использования.
Среда визуального программирования LabVIEW позволяет делать достаточно сложные системы визуально и тесно связана с аппаратным обеспечением National Instruments. Понравился пример того как AndreyDmitriev в комментариях на хабре реализовали задачу в визуальном редакторе для сравнения сложности с Delphi решением и обзор LabVIEW. В эту же категорию попадает и Simulink для Matlab, как подсказали в комментариях.
В этой же статье про Reactive Blocks используется модифицированная UML диаграмма деятельности, которая приспособлена под компоненты проекта и из которой генерируется код. Разработчики сделали plugin для Eclipse со своей моделью, анализатором схем и событиями компонент.
Проект доступен бесплатно для open source проектов, с вполне логичным ограничением. Все созданные вами в IDE Building Blocks станут доступными всем под open source лицензией.
Это визуальное конструирование приложения из готовых существующих кирпичиков — building block, которые скрывают всю сложность взаимодействия с «железом» и облачными сервисами.
Конечно, сложные алгоритмы лучше писать как java код, поэтому графическая диаграмма и код поддерживаются в синхронизированном состоянии автоматически. Это извечная мечта компонентного проектирования, когда компоненты пишут программисты, а используют их пользователи-эксперты в своей области.
Так же как и не стоит делать из диаграммы — спагетти диаграмму из сотни и тысяч элементов. В этом случае можно поддиаграмму оформить в виде точно такого компонента-строительного блока. В случае open source решения, вы публикуете свой блок, чтобы сообщество также могло использовать его в своих проектах.
Есть возможность автоматически упаковать свое приложение в пакет (OSGI bundle) для платформы Eclipse Kura. Тогда возможен перезапуск приложения без перезапуска контейнера, доступна консоль для администрирования, а также множество сервисов этой IoT платформы и вся мощь существующих компонентов и запускать это на Raspberry PI или Beagleboard Black.
Есть вариант скачать специальную сборку eclipse+Reactive Blocks сразу готовую к запуску со страницы для Windows, Mac OS X или Linux. Другой вариант, если у вас есть установленный Eclipse Neon(4.6)/Mars(4.5)/Luna(4.4)/Kepler(4.3) — нужно указать Update-Site и установить плагин.
В любом случае для сборок Linux, основанных на debian, нужно установить пакет libwebkitgtk-1.0 перед запуском среды разработки:
Для использования в готовой сборке JDK, отличной от доступной в системе по-умолчанию, нужно добавить строчки в файл reactiveblocks.ini:
Для доступа к серверу компонент пришлось пройти авторизацию и аутентификацию с помощью Google аккаунта.
Написал вопросы по почте и к чести их инженеров и менеджмента, мне устроили мастер-класс один на один по google hangout с видео конференцией, скринкастом IDE и разбором простого примера. Их ведущий разработчик оказался инженером из аэрокосмической отрасли и любит в свободное время заниматься авиамоделирование и проектирует автопилот.
Мне показался очень интересным пример сигнализации на RaspberryPI с использованием акселерометра.
Поигравшись с разными примерами, посмотрев на содержимое Building Blocks под капотом. Особенно интересно было обнаружить там уже знакомую мне библиотеку OpenIMAJ.
Лично для себя я не нашел преимуществ Reactive Blocks по сравнению с разработкой под Apache Camel с его компонентами rhiot и возможностями визуализации. Про что скоро опубликую пост и даже рабочий пример уже готов! В своей публикации на хабре Управляем автоматом на Groovy/Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» я использовал Apache Camel для управлением ЧПУ станком.
Так как библиотека для работы с GPIO SilverThings/bulldog не смогла работать в режиме обработки прерывания. Можно конечно опрашивать порт ввода в цикле — но это как-то не правильно. Завел багрепорт #96 для этой библиотеки.
Встроенные в процессор BeagleBoard Black RPU подходят для real time задач где не место java с ее GC STW паузами.
Для java программистов, в отличии от инженеров по электронике, возникают мысли по практическому использованию Bitreactive IDE в сложных проектах и надо разбираться:
- как происходит одновременная работа над одной диаграммой нескольких человек;
- как происходит рефакторинг проекта с множеством диаграмм;
- зачем было делать свой сервер для хранения компонент, когда уже есть maven совместимые репозитарии;
- как увидеть diff для разных версий диаграммы?
- как разрабатывать тесты и делать mock для компонент. Вроде как есть генерация для jUnit, но надо углубляться в практику тестирование реальных приложений.
Выводы
Вместо изучения языков программирования вам придется выучить его нотацию схем, компоненты и средство разработки. Нужно ли это программисту?
Это решение больше подойдет для инженеров не специалистов в ПО, которые не хотят вникать в тонкости программирования на java, но хотят использовать всю мощь существующих компонент для связи с «облачными» сервисами IoT, мультимедиа и работы с java библиотеками, обернутыми в building block.