Среди разработчиков различной автоматики большой популярностью пользуются платы от проекта Arduino, а так же их различные клоны вроде китайской Tenstar Robot Uno R3. Среда разработки Arduino IDE формально доступна только для Windows и Linux, однако поскольку она написана на Java то возможен её запуск и в других ОС.
Операционную систему FreeBSD отличает нетребовательность к ресурсам. Как показывает практика, рабочая станция со стареньким одноядерным Pentium 4 540 и 1GB RAM под управлением FreeBSD с Lumina Desktop позволяет вполне комфортно писать скетчи для Arduino не испытывая какого-либо дискомфорта. Нижен приведено по возможности подробное описание запуска Arduino IDE на FreeBSD.
Всё ниже описанное справедливо для FreeBSD 11.2 с установленной средой Lumina Desktop, однако инструкция будет актуальная как минимум для FreeBSD начиная с ветки 10.x.
Arduino IDE есть в портах и пакетах FreeBSD и установить её можно установив пакет «arduino18». Кроме того ещё понадобится установить пакет «uarduno», содержащий модуль ядра для поддержки плат Arduino. Установим их:
pkg install arduino18 uarduno
Далее добавляем в «/etc/fstab» строки для автоматического монтирования procfs и fdescfs:
fdesc /dev/fd fdescfs rw 0 0 proc /proc procfs rw 0 0
И сразу монтируем их:
mount /proc && mount /dev/fd
Теперь добавим нашего пользователя (в данном примере его логин - «moose») в группу «operator»:
pw groupmod operator -m moose
Прежде чем перейти к настройке devfsd нужно сделать небольшое замечание: модуль ядра «uarduno» необходим только для официальных плат Arduino. Большинство китайских клонов Arduino используют в качестве программатора чипы CH340/CH341 и их различные модификации (например в Tenstar Robot Uno R3 стоит CH341). Многие руководства упускают этот нюанс и если следовать им то получится работать только с оригинальными платами.
Для настройки devfsd необходимо дописать следующие строки в файл «/etc/devfs.rules» (если файл не существует его необходимо создать):
[localrules=10] # Правила для основных USB-устройств add path 'ugen*' mode 0660 group operator add path 'usb/*' mode 0660 group operator add path 'usb' mode 0770 group operator # Правила для COM-портов, создаваемых модулем uchcom (драйвер чипов CH340/CH341) add path 'ttyU*' mode 0660 group operator
Добавляем в файл «/etc/rc.conf» строку:
devfs_system_ruleset="localrules"
После чего перезапускаем сервис devfsd:
service devfsd restart
Теоретически на этом всё. Можно подключать плату к компьютеру, запускать Arduino IDE и начинать писать скетчи.
Если пункт выбора порта в Arduino IDE не активен то нужный порт можно указать в файле «~/.arduino15/preferences.txt» примерно так:
serial.databits=8 serial.debug_rate=9600 serial.parity=N serial.port=/dev/ttyU0 serial.port.file=ttyU0 serial.stopbits=1
Если возникают сложности с определением используемого порта то сначала надо посмотреть что "падает" в dmesg при подключении платы. Например:
ugen3.3: <vendor 0x1a86 USB2.0-Serial> at usbus3 uchcom0 on uhub0 uchcom0: <vendor 0x1a86 USB2.0-Serial, rev 1.10/2.62, addr 3> on usbus3 uchcom0: CH341 detected
Здесь видно что устройство подхватывается драйвером «uchcom» и получает номер ноль (uchcom0). Соответственно имя tty-устройства можно получить из вывода команды:
sysctl dev.uchcom.0.ttyname
В результате будет получена строка вроде «U0» и устройство будет «/dev/ttyU0». В качестве альтернативного способа можно перебрать все устройства из вывода команды:
ls /dev/tty*|sort
Возможно понадобится добавить правила в «/etc/devfsd.rules» и перезапустить devfsd. На этом всё. Приятной работы!