Raspberry PI 3 Model B+

В этом мануале мы разберем основы использования Swift на Raspberry Pi. Raspberry Pi — небольшой и недорогой одноплатный компьютер, потенциал которого ограничен лишь его вычислительными ресурсами. Он хорошо известен техногикам и любителям DIY. Это отличное устройство для тех, кому нужно поэкспериментировать с идеей или проверить на практике определенную концепцию. Он применяется для самых разных проектов, легко помещается практически в любом месте — например, его можно смонтировать на крышке монитора и использовать в качестве десктопа, или подключить к макетной доске для управления электронной схемой.

Официальный язык программирования «малинки» — Python. Хотя Python достаточно прост в использовании, ему не хватает типобезопасности, плюс он потребляет много памяти. Swift, напротив, имеет ARC-управление памятью и почти в 8 раз быстрее Python. Ну а поскольку объем ОЗУ и вычислительные возможности процессора Raspberry Pi ограничены, использование языка вроде Swift позволяет максимально использовать потенциал железа этого мини-ПК.

Установка ОС


Прежде чем устанавливать Swift, нужно выбрать ОС. Для этого можно воспользоваться одним из вариантов, предлагаемых сторонними разработчиками. Наиболее обычный выбор — Raspbian, официальная ОС от Raspberry Pi. Есть несколько возможностей установить Raspbian на SD-карту; в нашем случае мы воспользуемся balenaEtcher. Вот что нужно делать:



Шаг второй: форматируем SD-карту в MS-DOS (FAT)


Шаг третий: используем balenaEtcher для заливки Raspbian на карту

Рекомендуем бесплатный интенсив по машинному обучению для начинающих:
Пишем первую модель машинного обучения за три дня — 2-4 сентября. Бесплатный интенсив, который позволяет разобраться в том, что такое Machine Learning и научиться работать с открытыми данными из интернета. Также учимся предсказывать курс доллара при помощи самостоятельно разработанной модели.

Настройка Raspberry Pi


Полпути уже пройдено! Теперь у нас есть SD-карта с ОС, которую мы будем использовать, но операционную систему еще предстоит установить. Для этого есть две возможности:

  • Использовать подключенные к устройству монитор, клавиатуру и мышь.
  • Сделать все с другого ПК по SSH или с использованием кабеля USB Console.

Если это ваш первый опыт работы с Pi, рекомендую опцию №1. После того как SD-карта с Raspbian OS вставлена в Pi, подключите HDMI-кабель, мышь, клавиатуру и кабель питания.

Pi должна загрузиться при включении. Поздравляю! Теперь вы можете потратить немного времени на изучение своего десктопа и его возможностей.



Установка Swift


Для того чтобы установить Swift на «малинку», нужно подключить ее к интернету (при помощи Ethernet или WiFi, в зависимости от модели платы). Как только интернет подключен, можно начинать установку Swift.

Ее можно выполнить двумя способами. Первый — самостоятельное создание билда Swift, второй — использовать уже скомпилированные бинарники. Я настойчиво рекомендую второй способ, поскольку первый потребует нескольких дней подготовки. Второй способ появился благодаря группе Swift-ARM. Ей принадлежит репо, с которого можно установить Swift, используя apt (Advanced Package Tool).

Это инструмент командной строки, нечто вроде App Store для приложений и пакетов для устройств с Linux. Работу с apt начинаем, введя в терминале apt-get. Далее нужно указать ряд команд, которые уточнят выполняемую задачу. В нашем случае требуется установить Swift 5.0.2. Соответствующие пакеты можно найти здесь.

Что ж, начнем. Теперь, когда мы знаем, что будем устанавливать Swift при помощи apt, нужно добавить репо в список репозиториев.

Команда добавления/установки репо swift-arm выглядит так:

curl -s <https://packagecloud.io/install/repositories/swift-arm/release/script.deb.sh> | sudo bash



Далее устанавливаем Swift из добавленного репо:

sudo apt-get install swift5=5.0.2-v0.4



Вот и все! Теперь Swift установлен на нашей «малинке».

Создание тестового проекта


На данный момент Swift REPL не работает, но все остальное — да. Для теста давайте создадим Swift-пакет при помощи Swift Package Manager.

Сначала создаем директорию с именем MyFirstProject.

mkdir MyFirstProject



Далее изменяем текущую рабочую директорию на свежесозданную MyFirstProject.

cd MyFirstProject



Создаем новый исполняемый пакет Swift.

swift package init --type=executable



Эти три строки создают пустой пакет Swift, который называется MyFirstProject. Для его запуска вбиваем команду swift run.



Как только компилирование завершено, мы увидим фразу «Hello, world!» в командной строке.

После того как мы создали первую программу на Pi, давайте кое что изменим. В директории MyFirstProject внесем изменения в файл main.swift. В нем содержится код, исполняющийся, когда мы запускаем пакет командой swift run.

Меняем директорию на Sources/MyFirstProject.

cd Sources/MyFirstProject 



Редактируем файл main.swift, используя встроенный nano-редактор.

nano main.swift



Как только редактор открыт, вы сможете изменять код своей программы. Давайте заменим содержимое файла main.swift вот этим:



print("Hello, Marc!")

Разумеется, вы можете вставить свое имя. Для сохранения изменений нужно выполнить такие действия:

  • CTRL+X для сохранения файла.
  • Подтверждаем изменения нажатием «Y».
  • Подтверждаем внесение изменения в файл main.swift нажатием Enter.





Все изменения внесены, теперь самое время перезапустить программу.

swift run



Поздравляю! Как только код скомпилирован, терминал должен показать измененную строку.

Теперь, когда Swift установлен, вам есть чем заняться. Так, для управления железом, например, светодиодами, сервоприводами, реле, вы можете воспользоваться библиотекой «железных» проектов для плат Linux/ARM, которая называется SwiftyGPIO.

Удачи в экспериментах со Swift на Raspberry Pi!

Комментарии (9)


  1. nochkin
    29.08.2019 19:28

    Форматировать в FAT перед использованием balenaEtcher вроде как лишнее, ведь этот etcher пишет сразу файловую систему как на образе.


  1. MSC6502
    29.08.2019 23:11

    Э-э-э, а какая-нибудь IDE для него есть или все через командную строку?


    1. Foreglance
      30.08.2019 13:08

      Ещё пару лет назад JetBrains выпустили плагин для CLion. Я уже тогда довольно успешно его использовал.
      www.jetbrains.com/help/clion/swift.html
      CLion коммерческий (вроде есть 30 дневный триал). И ещё про лицензии:
      intellij-support.jetbrains.com/hc/en-us/articles/206558629-Is-there-a-community-edition-for-CLion-Is-CLion-available-as-a-plugin-for-IntelliJ-IDEA-


    1. Foreglance
      30.08.2019 13:13

      Вспомнил ещё, что делал туториал как CLion установить на RPi
      foreglance.com/20160414/setup-and-use-c-ide-clion-on-raspberry-pi-with-ubuntu-mate
      И как программировать в нем удаленно — через VNC и SSH
      foreglance.com/20160328/program-remotely-on-raspberry-pi


  1. VioletGiraffe
    29.08.2019 23:22
    +2

    На что только люди ни идут, лишь бы не учить С++ :)


    1. QtRoS
      30.08.2019 09:11
      +1

      Вам и mmMike — так есть же отличная альтернатива в виде Go. И кросскомпиляция есть, и на устройстве можно собирать, и быстро достаточно, и по памяти прекрасно. Не знаю как с доступом с ресурсами железки, но если уж из питона можно, то и из го наверняка.
      P.S. Делал на Go бэкенд для домашнего проекта, крутится на машине, остался доволен.


  1. mmMike
    30.08.2019 07:33
    +1

    А по моему, на малине, гораздо удобнее сочетание "C/C++" библиотек и python.
    Опять же, gcc есть и кросс. Писать С++ код внутри малины и там же компилировать… Можно. Но для чего то мелкого. Иначе мазохизм.


  1. iig
    30.08.2019 13:02
    +1

    Тема преимуществ swift vs python на малинке не раскрыта совсем.

    Хотя Python достаточно прост в использовании, ему не хватает типобезопасности, плюс он потребляет много памяти. Swift, напротив, имеет ARC-управление памятью и почти в 8 раз быстрее Python.


    Наверное, можно было бы написать 2 хелловорлда, которые продемонстрируют справедливость этого утверждения.


  1. Chugumoto
    30.08.2019 13:06

    потенциал которого ограничен лишь его вычислительными ресурсами
    4ка с А72 ядрами уже вполне ничего
    это А53 у 3ки медленные…