У меня есть одноплатник, проводки, паяльник и светодиод. Как мне программно зажечь светодиод и управлять им?
В этих ваших интернетах есть огромное количество материала про одноплатные компьютеры, но весь этот материал настолько фрагментирован и порой перегружен несущественными деталями (или деталями, не относящимися к моей среде разработки/модели одноплатника/операционной системе), что мне не удалось найти ни одной статьи, которая объясняла бы процесс зажигания светодиода от простого к сложному, так, чтобы нужные знания прочно уложились в голове.
Нашёл я нужные сведения в отличной книге, которая называется "Практическая робототехника. C++ и Raspberry Pi". А потому спешу поделиться теоретическими выдержками оттуда, совмещёнными с практическим опытом.
Что такое GPIO
Это интерфейс ввода-ввода общего назначения (general-purpose input/output). Практически каждый одноплатник считает себя обязанным предоставить вам такой интерфейс, потому что этот интерфейс - тот самый центр, точка входа и выхода для управления устройствами умного дома или роботами и/или считывания данных с внешних датчиков и сенсоров. Вот он в натуре:
Если вы посмотрите на официальную документацию вашего одноплатника, то увидите там много лишнего для новичка. Вот пример официальной документации для моего одноплатника Orange Pi Lite:
Страшно, очень страшно, мы не знаем, что это такое. Если бы мы знали, что это такое... На мой взгляд, документация для новичка должна выглядеть вот так:
Вот теперь уже не так страшно, не правда ли? Оказывается, GPIO-гребёнка это набор из пары пинов с источником тока напряжением 3В, пары аналогичных пинов с напряжением 5В, восьми пинов с нулевым потенциалом (земля), а также двадцати восьми программируемых пинов, ради которых вся эта гребёнка и была придумана.
Давайте пока отложим в сторону программируемые пины и применим полученные знания на практике. Любой нормальный человек, который хоть немного помнит физику из седьмого класса начальной школы, увидев два пина: один с напряжением, а другой с "землёй" - немедленно захочет воткнуть между ними светодиод, чтобы проверить, как через него потечёт ток... и сожжёт плату.
Дело в том, что, работая с пинами GPIO, нужно всегда помнить закон Ома, который гласит, что сила тока на участке цепи прямо пропорциональна напряжению и обратно пропорциональна сопротивлению, а также тот факт, что пины эти не могут выдержать силу тока более 16 мА. Поскольку светодиод имеет очень незначительное сопротивление, то, подключив его напрямую, мы пропустим через него слишком сильный ток. И ладно, если спалим только сам светодиод. Но велика вероятность, что ещё быстрее мы спалим что-нибудь внутри нашего одноплатника. Поэтому простейшая корректная схема подключения светодиода выглядит так:
Расчёт необходимо сопротивления, чтобы подобрать резистор, выполняется в соответствии всё с тем же законом Ома для участка цепи. Необходимое нам сопротивление мы можем найти поделив напряжение нашего пина на максимально допустимое значение силы тока:
R = 3,3 В / 0,016 А = 206,25 Ом
Если резистора с нужным сопротивлением под рукой нет, можно взять тот, что побольше. Главное не поменьше. С какой стороны от светодиода припаять резистор значения не имеет, но помните, что ток по светодиоду может протекать только в одном направлении. Поэтому, если светодиод не загорелся с первого раза, просто поменяйте полярность подключения проводов к плате. Результат первого подключения можно увидеть на следующих фотографиях:
Всё это, конечно, весело, но люди покупают одноплатные микрокомпьютеры не для того, чтобы использовать их в качестве светильника. То есть, возможно, и для этого тоже, но в основном их интересуют...
Программируемые пины GPIO
Каждый из двадцати восьми программируемых пинов GPIO может работать в двух режимах: либо на вход (input) либо на выход (output). Если пин работает на выход, то он может находиться в двух состояниях: выдавать напряжение высокого (high) или низкого (low) уровня. Логическая единица или логический ноль. Включено или выключено.
Если пин работает на вход, то он может считывать от внешних устройств либо напряжение высокого, либо напряжение низкого уровня. Те же самые единицы и нули. Применительно к моей плате Orange Pi Lite напряжением высокого уровня будет 3,3В, а напряжением низкого уровня - его отсутствие.
Важно помнить, что использовать выходные сигналы GPIO в качестве источника питания для внешних устройств вообще-то запрещено. Использовать их разрешается только в качестве управляющего воздействия. Светодиод в этой статье мы подключаем в образовательных целях и, учитывая то, что его мощность очень мала.
Управлять режимом пина GPIO можно с помощью соответствующего программного обеспечения. Поскольку расположение контактов GPIO отличается у разных производителей одноплатников, точно так же отличается и их софт для управления этой гребёнкой.
В моём случае для одноплатников Orange Pi подходит это программное обеспечение: https://github.com/orangepi-xunlong/wiringOP/tree/master Обратите внимание, что в этом репозитории есть несколько веток, клонировать нужно именно master, потому что более свежие ветки не работают с моей уже устаревшей платой.
Итак, скачиваем необходимую библиотеку с гитхаба, переключившись предварительно в каталог, где хотим увидеть папку с библиотекой:
cd ~
git clone --branch master https://github.com/orangepi-xunlong/wiringOP
Переходим в каталог с библиотекой, выполняем очистку и собираем её:
cd wiringPi
./build clean
./build
После этого можно использовать команду "gpio readall" для того, чтобы вывести информацию о текущем состоянии всех пинов вашей GPIO-гребёнки:
Итак, теперь вы можете видеть все пины вашей GPIO-гребёнки, обозначенные их физическими номерами (прямоугольник посередине), а также режим работы каждого конкретного пина (два прямоугольника по бокам от центрального).
Последнее, что мы сегодня сделаем, это настроим программное управление подключенным к плате светодиодом. Для этого мы немного изменим схему подключения так, чтобы питание наш светодиод получал от программируемого пина. Например, от пина под физическим номером 40. Заметьте, что для того, чтобы программировать пин, нужно использовать не его физический номер, а номер из колонки "wPi", то есть, в нашем случае 27.
Ну и лучше всего процесс проиллюстрирует небольшое видео:
P.S.
На случай если вы забыли, как установить Linux на одноплатник, есть видео: