Программирование arduino на linux

Установка и настройка Arduino IDE на Linux Ubuntu

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

Установка

Для установки нам необходимо скачать собственно саму IDE, это можно сделать на этой странице.

Нам нужно скачать программу по ссылке Linux 64 bits если у Вас 64-битная система, и Linux 32 bits если у Вас 32битная система. Но скачивания не произойдет, поскольку мы просто попадем на другую страницу. Нам надо кликнуть по ссылке «JUST DOWNLOAD».

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

Настройка

К сожалению свежеустановленная IDE не начнет работать с платой Arduino. Для того, чтобы IDE смогла работать с нашим контроллером, нам необходимо произвести ряд не хитрых действий как с IDE, так и с системой. Первым делом настроим IDE, для этого кликаем «Инструменты» и выбираем модель нашей платы, модель контроллера и порт, на котором висит наш контроллер.

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

Для устранения проблемы нам надо внести коррективы в правила монтирования порта. В этом нет ничего сложного, для этого нам потребуется всего лишь создать файл с правилом в папке /etc/udev/rules.d. Но прежде нам необдхимо узнать некоторую информацию, это пара цифробуквенных значений. Их можно узнать выполнив команду lsusb. После выполнения мы увидим список устройств подключенных к компьютеру. В моем случае моя плата отобразилась как:

Bus 002 Device 009: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

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

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

sudo nano /etc/udev/rules.d/10-arduino.rules

Добавим в него следующий текст:

SUBSYSTEMS==»usb», ATTRS==» 1a86 «, ATTRS==» 7523 «, \
MODE:=»0666″, GROUP:=»users»

Я отметил красным места, куда необходимо воткнуть значения, не забудьте поменять эти значения на свои и поменять GROUP:=»users», где «users» нужно заменить на свое, как правило группа соответствует имени пользователя в системе. Если сомневаетесь, то можете выполнить команду groups и самой первой будет та, которая нам нужна. Сохраняем изменения и выполняем ещё одну команду:

sudo udevadm control —reload-rules

Этим самым мы перезагружаем правила. На этом собственно и все, теперь при подключении нашей платы, её COM-порт будет доступен нам для записи. До того как я перешел на Ubuntu 17.10, я просто запускал IDE под sudo, но в 17.10 у меня вылезла ошибка «Can’t connect to X11 window server using ‘:0’ as the value of the DISPLAY variable» и я решил таки заморочиться с правилами монтирования порта.

Источник

Программирование Arduino из консоли, gentoo-way, ничего лишнего

Условия задачи с одной стороны сложны, с другой стороны очень просто формулируются. Есть сервер очень-очень далеко, к нему через FTDI конвертер подключена Arduino. Доступ у серверу – SSH. А надо исправлять, компилировать и заливать прошивки в плату. Классический пример — оклейка обоями запертой комнаты через замочную скважину. Очевидно ни о какой Arduino IDE, Eclipse и прочих красивых средах программирования речи быть не может.

С другой стороны — что нам стоит дом построить, нарисуем, будем жить.

Итак цель в том, чтобы создать на удаленной системе окружение, достаточное для программирования Arduino. Речи о возможной серьезной отладке конечно не идет, да и сами скетчи я пишу и отлаживаю на настольной машине в среде Eclipse, пользуясь всем тем комфортом, который дает мне уютное кресло и большой красивый монитор. Соответственно одна плата смонтирована на монтажной плате для быстрого прототипирования, а другая на далеко на сервере, можно сказать продакшн во всей красе.

Установка в ядро поддержку USB конвертера

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

После подключения конвертера к USB должно появиться следующее устройство:

Установка окружения toolchain для компиляции

В целом все аналогично тому, что я писал ранее, но, как говорится, есть нюанс. Целевая система, использует hardened ядро и соответствующие ключи portage, поэтому простая сборка toolchain потерпит крах с ошибкой:

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

Попутное решение проблем с некорректными путями

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

Устанавливаем заодно программатор и minicom

Создаем пользователя

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

Исходники Arduino, ничего личного лишнего

Если ставить arduino из portage, то она подтянет за собой кучу пакетов и зависимостей, ту же Java VM, и прочее, и прочее. Не вижу никакого смысла все это устанавливать, особенно если вспомнить, что целевая система серверная, где по определению не должно быть ничего лишнего.

Итак скачиваем и распаковываем исходники, для этого идем сюда arduino.cc/en/Main/Software и смотрим, что есть свеженькое. На момент написания статьи вышел релиз 1.0.4. В вашем случае версия может быть другая, поэтому, чтобы дальнейшие шаги не зависели то версии, просто переименуем каталог.

Компиляция статической библиотеки

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

  • Установить где-нибудь полную Arduino IDE, создать в ней любой скетч, скомпилировать, найти нужный файл и стянуть. Возможно это работает, я не пробовал. Мне представляется, что степень идентичности систем должна быть высока. В общем это не наш путь.
  • Компилировать ее внутри каждого проекта. Тоже сомнительное мероприятие, поскольку, см. след. пункт.
  • Библиотеку можно сделать один раз, а потом линковать ее с каждым новым проектом. Как раз это полностью укладывается в наш gentoo-way.
Создаем папку для библиотеки и подключаем исходники

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

Кроме того нам понадобится заголовочный файл pins_arduino.h специфичный для вашего варианта платы. В моем случае имеются следующие файлы:

Мне подходит стандартный, а вы выбирайте свой:

Компилируем библиотеку

/ArduinoCore, должно получиться следующее:

Если у вас другая плата (другой чип) и/или другая частота, то достаточно исправить ключи компилятора в файле:

Последнее что нам осталось сделать, это скомпилировать статическую библиотеку:

в итоге получится что-то похожее на:

Ради чего мы все это делали – это статическая библиотека libArduinoCore.a, которую будем линковать с будущими проектами.

Первый проект

В каждом языке программирования есть свой Hello world, в Arduino – это Blink, моргающий светодиодом, который распаян непосредственно на плате и подключен к 13-му выводу чипа. Его веселое помаргивание в итоге расскажет о том, что все получилось.

Создаем файл main.cpp

Как видите, от скетча он отличается незначительно. В начале добавлено подключение заголовочного файла Arduino.h, а в конце тело функции main. Все это Arduino IDE добавляет незаметно от вас. Не модифицируйте функцию main(), если не знаете точно, зачем вам это нужно.

Компилируем первый проект

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

Далее собираем проект:

Если все прошло успешно, то у вас должно получиться что-то подобное:

Собственно файл BlinkA.hex – это готовая прошивка, которую мы и будем заливать в контроллер.

Прошивка

Команда прошивки простая:

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

Можно добавить процесс прошивки в makefile, в этом случае прошивка будет происходить по окончании каждого билда. Для этого вместо файла ArduinoBuild.tgz следует взять ArduinoBuildBuild.tgz.

Как проверить, что заработало

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

Чтобы заглянуть в последовательный порт понадобится minicom

Если все работает, то вы увидите «пульс» в виде точка-тире ‘.–’

Вместо заключения

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

Источник

Программирование Arduino из Linux, gentoo-way, быстрый старт

К сожалению, информация, необходимая для подключения Arduino к компьютеру, оказалась разрозненна по разным источникам на разных языках. Как известно, gentoo — это дистрибутив linux с непрерывной разработкой, фактически в нем и понятия такого быть не может, как «дистрибутив». Из-за этого решение проблемы, найденное в интернете, может оказаться неработоспособным просто потому, что на целевой системе другой набор пакетов и настроек.

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

Установить в ядро поддержку USB конвертера

После подключения конвертера к USB порту видим следующее:

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

Компилируем модуль и загружаем:

У нас появился интерфейс:

Обратите внимание на права. Необходимо добавить вашего пользователя в группу uucp

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

Установка или обновление пакета rxtx

Актуально только для 64-битных систем:
В момент написания статьи стабильная версия пакета , но прошивка Arduino с ней работать не будет, необходимо поставить . Вероятно когда появится новая стабильная версия проблема будет устранена.

Установка java виртуальной машины sun

Можно использовать SDK или JRE, если не знаете, нужен ли вам SDK, то он вам не нужен, и выбирайте sun-jre-bin:

Из-за лицензионных ограничений вам придется вручную скачать соответствующий исходный файл и скопировать его в /usr/portage/distfiles. Кроме того, VM распространяется под отдельной лицензией, поэтому ее небходимо добавить в файл make.conf:

Убедитесь, что нужная VM выбрана:

Установка окружения toolchain для компиляции

Добавьте в файл /etc/make.conf строку, если ее еще нет, и создайте каталог:

Компилируем toolchain, опции по умолчанию соответствуют stage4 и использованию стабильных пакетов:

Установка собственно самой IDE для программирования

Постольку нет ни одной стабилизированной версии, то скорее всего она появится не скоро. Поэтому просто устанавливаем последнюю версию. Необходимо разблокировать следующие пакеты, добавив в файл /etc/portage/package.keywords следующие строчки:

Можно добавить флаги для установки примеров и документации:

Запускаем arduino

Выбираем в меню Сервис -> Плата ваш вариант Arduino и Сервис -> Последовательный порт – порт, который появился после подключения конвертера, обычно это /dev/ttyUSB0. Самый простой скетч Blink уже был загружен в мою плату производителем, поэтому чтобы проверить, как все работает, я его модифицировал: теперь светодиод моргает попеременно короткой и длинной вспышкой:

Нажимаете галочку «Проверить» и стрелочку «Загрузить» и будет вам счастье. На самом деле может и не будет, потому что необходимо устранить еще некоторые проблемы и об этом ниже.

Проблемы:

Если пункт выбора последовательного порта деактивирован, то вам снова нужно вернуться к началу статьи и
  • проверить поддержку конвертера ядром:
  • наличие модуля в памяти:
  • можно попробовать его перезагрузить:
  • проверить версию rxtx:

Если все проверили, попробуйте перезагрузить систему, в одном из случаев мне это помогло.

При компиляции выводится ошибка:

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

затем создаем символическую ссылку:

При компиляции выводится ошибка:

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

Существует проблема с binutils версии выше 2.19

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

Решение описано здесь, баг зарегистрирован на Gentoo’s Bugzilla.

Чтобы решить проблему следует переустановить toolchain следующим образом:

crossdev -C avr
USE=«multilib -cxx» crossdev —b 2.19.1-r1 -S -s1 —target avr
USE=«multilib cxx» crossdev —b 2.19.1-r1 -S -s4 —target avr

Все написанное выше по поводу некорректных путей остается в силе.

Для систем с hardened ядром:

USE=«multilib -cxx nopie nossp -hardened -pic -openmp» crossdev —b 2.19.1-r1 -S -s1 —target avr
USE=«multilib cxx nopie nossp -hardened -pic -openmp» crossdev —b 2.19.1-r1 -S -s4 —target avr

Вместо заключения

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

Источник

Adblock
detector