Program arduino on 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 и самой первой будет та, которая нам нужна. Сохраняем изменения и выполняем ещё одну команду:

Читайте также:  Автозапуск приложений при загрузке windows

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 IDE в Ubuntu Linux

Arduino IDE — это приложение с открытым исходным кодом предназначена для написания и загрузки кода на платы Arduino. Так же это кросс-платформенное приложение, которое работает на Windows, macOS и Linux. Arduino — это аппаратный язык программирования, в основном написанный на C и C++.

Эта статья покажет вам, как установить Arduino IDE на Ubuntu 20.04. Существует три различных способа установки Arduino на Ubuntu – с помощью официального сценария установки, с помощью пакета snap и apt.

Установка Arduino IDE с помощью скрипта

Это самый простой и рекомендуемый способ установки Arduino IDE в Ubuntu Linux.

Шаг 1: Убедитесь, что ваши системные пакеты Ubuntu обновлены:

$ sudo apt-get update
$ sudo apt-get upgrade

Шаг 2: Загрузка Arduino IDE и его извлечение

Загрузите последнюю версию Arduino IDE для Linux 64bit со страницы загрузки. Очень важно, чтобы вы выбрали правильную версию для своего дистрибутива Linux, которым в нашем случае является Ubuntu Linux 64bit.

Следующие команды загружают файл Arduino IDE версии 1.8.15 tar.xz во временный каталог с именем ‘arduino’:

$ mkdir arduino
$ cd arduino/
$ wget https://downloads.arduino.cc/arduino-1.8.15-linux64.tar.xz

Шаг 3: Извлеките файл tar.xz.:

Делается это командой

Шаг 4: Установка Arduino с помощью скрипта установщика

Измените каталог, а затем запустите установленный скрипт:

По умолчанию Arduino устанавливается в /usr/local/bin/arduino.

Вы должны найти новый значок на рабочем столе и в списке приложений:

Arduino IDE – Иконка на рабочем столе

Добавление пользователя в группу использования порта Arduino

Чтобы избежать возможных проблем при использовании Arduino IDE, добавьте системного пользователя в группу dialout.

Это процедура доступа к последовательному порту из программного обеспечения Arduino (IDE), если вы получаете ошибку.

Может случиться так, что при загрузке эскиза вы получите следующую ошибку:

Error opening serial port …” (Ошибка открытия последовательного порта …)

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

Введите в терминале следующую команду:

вы получите что-то вроде:

crw-rw— – 1 root dialout 188, 0 5 apr 23.01 ttyACM0

Данные, которые нам нужны, — это “dialout” (это владелец группы файла).

Теперь нам просто нужно добавить нашего системного пользователя в группу:

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

В моем случае это так:

$ sudo usermod -a -G dialout smilojkovic

После этой команды вы сможете нормально запустить IDE и загрузить код на свою плату или использовать последовательный монитор.

Запуск Arduino IDE в первый раз

Перед запуском IDE подключите плату Arduino к компьютеру с помощью USB-кабеля.

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

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

Окно редактора Arduino в Linux

Установка Arduino IDE с помощью Snap

Arduino IDE также доступна из пакетов Snap. Мы можем установить его с помощью следующей команды:

Ответ в терминале:

arduino 1.8.15 from Merlijn Sebrechts installed

Из этого мы видим, что пакет Snap — имеет самую последнюю версию Arduino IDE.

Читайте также:  Windows starts but no display

Установка Arduino IDE в Linux с помощью Apt

Arduino IDE доступен в репозиториях Ubuntu, вы можете установить его с помощью apt.

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

arduino/focal,focal 2:1.0.5+dfsg2-4.1 all
AVR development board IDE and built-in libraries

Заключение

Из этой статьи вы узнали, как установить Arduino IDE на Ubuntu 20.04 LTS.

Для получения дополнительной помощи или полезной информации, мы рекомендуем вам проверить официальный сайт Arduino.

Источник

Arduino в Linux: копаемся в кишках проекта

В предыдущей статье был описан процесс превращения Qt Creator в полноценную IDE для проектов на платформе Arduino. Шаги были описаны подробно, но без описания смысла происходящего, поэтому эффект от такой статьи небольшой. В каждом конкретном случае могут возникать и возникают разнообразные нюансы и разобраться в них без понимания того как устроен проект сложно.

Поэтому в данной заметке мы разберемся в структуре и настройках проекта.

1. Arduino Core и функция main()

Как известно, исполнение любой программы на C/C++ начинается с функции main(), в том числе это касается и прошивок микроконтроллеров. В той или иной форме эта функция присутствует в любом проекте. Про создании проекта в Arduino IDE нам предлагается сразу файл скетча (на ещё и с дурацки расширением *.ino), скрывая от разработчика расположение точки входа.

В арче исходники Arduino Core расположены по пути /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino и содержат следующий

Функция main() расположена в файле main.cpp и выглядит так

Видно, что в скетче нет ничего сверхъестественного: функции setup() и loop() вызываются непосредственно из main(). Файл led-blink.cpp, который мы создали ранее содержит определения этих функций. Если мы уберем данный файл из проекта

получим закономерную ошибку компоновщика

Таким образом, все модули, которые мы добавим проекту будут скомпонованы с ядром Arduino, реализующим базовый функционал. Вот краткое описание заголовков Arduino Core:

  • Arduino.h — базовый заголовок, включающий заголовки стандартной библиотеки C, определения программного интерфейса к регистрам контроллеров AVR, основные макроопределения, используемые при программировании
  • binary.h — макроопределения для записи чисел от 0 до 255 в двоичной форме
  • Client.h — класс клиента сети Ethernet
  • HardwareSerial.h, HardwareSerial_private.h — библиотека для работы с аппаратным UART
  • IPAddress.h — работа с IP-адресами сетевых протоколов Ethernet
  • new.h — реализация операторов new и delete языка C++
  • PluggableUSB.h, USBAPI.h, USBCore.h, USBDesc.h — библиотека для реализации USB-устройств
  • Print.h, Printable.h, Stream.h — библиотеки для работы с символьными потоками данных, в том числе передаваемыми по UART
  • Server.h — класс, реализующий сервер Eternet
  • Udp.h — реализация протокола UDP
  • WCharacters.h, WString.h — классы для работы с символами и строками
  • wiring_private.h — библиотека платформы Wiring, на базе которой строится Arduino Core. Эта библиотека реализует относительно высокоуровневый интерфейс к системным ресурсам микроконтроллеров.

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

2. Обрезаем жирок с прошивки

В Arduino IDE Core собирается в отдельную статическую библиотеку core.a, которая затем компонуется с объектными файлами скетча в готовый бинарник. Проделаем тоже самое в Qt Creator.

Создадим проект core со следующей структурой

Скрипт qmake этого проекта представлен ниже:

Проект содержит исключительно код Arduino Core. Его сборка дает на выходе библиотеку libcore.a

Теперь рядышком создаем проект прошивки, содержащий код скетча

Читайте также:  Linux заархивировать содержимое папки

Оба проекта будем собирать совместно, используя тип проекта «сабдиректории» доступный в qmake

Собираем проект, запускаем его на плате и смотрим лог прошивки

Здесь обращаем внимание на объем занятой памяти

Ага, прошивка занимает уже 1040 байт против 2838 в проекте из прошлой статьи. Но всё же, аналогичный скетч в Arduino IDE занимает 882 байта. Внимательно изучив лог сборки среды ардуино, добавляем в проекты blink и core ключи компилятора C

и ключи компилятора C++

Пересобираем, шьем, запускаем и…

Ок, вожделенные 882 байта достигнуты. За счет чего так выходит?

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

Теперь сравним со вторым проектом

Разница очевидна. Видно, что при компоновке core в отдельную библиотеку, компилятор включает в прошивку только реально используемые в ней части core. В частности, ни в том ни в другом случае мы не используем UART, однако в первой прошивке присутствуют классы для работы с ним. Уменьшение объема прошивки ключами компилятора следует обсудить отдельно, как и сами ключи

3. Ключи компилятора и линковщика

  • -flto — включает оптимизацию при компоновке. Функции в связанных объектных файлах линкуются так, как если бы они находились в пределах одной единицы трансляции
  • -fno-fat-lto-objects — не создавать «жирных» объектных файлов, содержащих промежуточный язык, кроме объектного кода. Действует совместно с предыдущим ключом.
  • -fpermissive — снижает уровень некоторых ошибок компилятора до уровня предупреждений. Может привести к генерации некорректного кода
  • -fuse-cxa-aexit — использовать в деструкторах объектов функцию __cxa-atexit() вместо atexit()
  • -ffunction-sections, -fdata-sections — помещать каждую функцию и данные в отдельные секции, для оптимизации при последующей компоновке. Позволяет компоновщику включать в итоговый файл только реально используемые функции
  • -fno-threadsafe-statics — не использовать потокобезопасные приемы работы со статическими членами классов. Имеет смысл, так как в контроллерах AVR единственный поток выполнения
  • -fno-exceptions — не использовать обработку исключений
  • -fno-devirtualize — не использовать «девиртуализацию». Если компилятор знает тип объекта, он может вызывать его виртуальные методы напрямую, не используя таблицу виртуальных функций. Данная опция выключает этот механизм
  • -MMD — генерация отдельных правил сборки для каждой единицы трансляции, с созданием списка зависимостей для неё в файле *.d (каждому файлу *.c/*.cpp соответствует файл с тем же именем и расширением *.d, содержащий пути к зависимостям)
  • -DARDUINO_AVR_UNO, -DARDUINO_ARCH_AVR — создают при предпроцессинге макроопределения ARDUINO_AVR_UNO и ARDUINO_ARCH_AVR, активирующие нужные направления условной компиляции исходников.

Опции линковщика:

  • -w — отключение всех предупреждений
  • -Os — оптимизация по размеру конечного файла
  • -Wl,—gc-sections — активирует выборочную компоновку функций. В конечный файл включаются только используемые функции
  • -mmcu — используемая модель контроллера

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

Выводы

Надеюсь, что данный текст расставляет все точки над «i». В платформе Arduino нет ничего сверхъестественного. Её архитектура направлена на сокрытие от начинающего разработчика всех механизмов, использование которых совершенно обычно для тех, кто использует для разработки ПО для AVR чистый C или ассемблер.

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

Надеюсь, что это информация оказалось полезной. В следующей статье, возможно, поговорим о возможностях отладки проектов AVR в Qt Creator

Источник

Оцените статью