Samsung ARTIK. Работа с GPIO в Go

Отладочные платы Samsung ARTIK имеют выведенные GPIO, которыми можно управлять напрямую из Linux; конкретно в моем случае — Samsung ARTIK 520 — имеется ряд коннекторов — J24, J25, J26, J27, J510, J512, J513, к которым могут быть подключены сенсоры и актуаторы.

У нас уже была одна статья, посвященная работе с GPIO на ARTIK с помощью Node.JS. В этот раз я решил рассмотреть работу с портами ввода-вывода с точки зрения Go, хотя, как и в предыдущем случае — это все также работа с портами посредством sysfs.

Установка Go

Установка Go в Fedora довольно проста. Первое, что нужно сделать — установить Go посредством dnf:

После этого необходимо создать переменную среды GOPATH, как то настоятельно рекомендуется создателями языка:

Для проверки GOPATH достаточно выполнить следующую команду:

Если все ОК, то в консоли будет отображено значение GOPATH.

Библиотека Go для работы с GPIO ARTIK

Для упрощения работы с GPIO я написал очень простую библиотеку, позволяющую работать с пинами — устанавливать значение выходов и получать значение входов.  Вы можете скачать библиотеку на нашем GitHub и поработать с примерами, или подключить библиотеку в вашем проекте:

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

Работа с GPIO ARTIK

Работа с портами ввода-вывода строится на базе sysfs и предполагает два обязательных шага:

  1. Экспорт пина
  2. Задание направления пина

Экспорт пина осуществляется с помощью записи в sys/class/gpio/export номера соответствующего пина. Важно заметить то, что номера пинов отличаются от платы к плате.

Например, я хочу работать с GPIO 125, который соответствует 8-му пину на разъеме J27 платы ARTIK 520. Для этого в консоли нужно выполнить следующую команду:

После этого необходимо задать направление с помощью записи в sys/class/gpio/gpio<номер>/direction строки «in» или «out». Например, для все того же пина GPIO 125, команда в консоли будет выглядеть следующим образом:

После экспорта пина и задания его направления с ним можно осуществлять работу.

Пин GPIO в качестве выхода

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

  • Установка логического нуля.
  • Установка логической единицы.
  • Чтение состояния пина.

Установка состояния логической едины или нуля осуществляется посредством записи 1 или 0 в  sys/class/gpio/gpio<номер>/value. Например, для установления GPIO 125 в состояние логической единицы в консоли необходимо выполнить:

Пин GPIO в качестве входа

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

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

Чтение состояния пина реализуется с помощью чтения sys/class/gpio/gpio<номер>/value. Например, чтение GPIO 125 в консоли может быть выполнено c помощью следующей команды:

результаты которой имплементируются следующим образом:

  • 1 — логическая единица
  • 0 — логический ноль

Работа с GPIO ARTIK в Go

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

Для работы с GPIO я написал простую библиотеку go-artik, с помощью которой можно сконфигурировать пин как вход или выход:

задать логическую единицу или ноль на выходе, или просто переключить пин:

считать значение входа:

Ссылки

Добавить комментарий