Полезные программы для raspberry pi 3. Библиотека WiringPi для работы с GPIO. Внешний вид, основные элементы, корпус

Сегодня четвертый урок, на котором мы поработаем с портами GPIO, в частности помигаем светодиодом в разных режимах.

Урок ориентирован на начинающих пользователей и представлен в текстовом и видео-форматах.

Видео четвертого урока:

Для урока нам понадобится:

  • плата Raspberry Pi;
  • кабель питания;
  • USB-клавиатура;
  • USB-мышь;
  • монитор или телевизор с HDMI/RCA/DVI интерфейсом;
  • кабель, один конец которого RCA или HDMI, а другой соответствует вашему монитору;
  • SD-карта с уже установленной ОС Raspbian ();
  • светодиод;
  • кнопка;
  • резистор на 220 Ом
  • 3 провода «мама-папа»
  • 2 провода «папа-папа».

Программирование Raspberry Pi GPIO на языке Python

Для сегодняшнего урока мы выбрали язык программирования Python.

Python — современный объектно-ориентированный язык. Он наиболее часто используется для программирования GPIO на Raspberry Pi. Python входит в состав операционной системы Raspbian.

Сборка модели

Для работы нам потребуется собрать следующую схему:

Схема подключения светодиода и кнопки к Raspberry Pi

Обратите внимание, что порты GPIO на Raspberry Pi не подписаны, полезно иметь распечатанную распиновку.

Распиновка Raspberry Pi. Схема с ledgerlabs.us

Собранная модель со светодиодом и кнопкой

Управление светодиодом на Raspberry Pi из консоли

Заходим в LXTerminal и набираем:

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

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

Import RPi.GPIO as GPIO #импорт библиотеки
GPIO.setmode(GPIO.BOARD) #"включение" GPIO
GPIO.setup(7, GPIO.OUT) #объявление 7-го пина как выход

Затем для включения светодиода можно использовать команду
GPIO.output(7, 1)

А для выключения
GPIO(output(7, 0)

После работы с GPIO желательно выполнить команду
GPIO.cleanup()

Программа для мигания светодиодом на Raspberry Pi

Для автономной работы светодиода нам потребуется написать и запустить программу. Для этого откроем предустановленную программу IDLE 3 и в меню File нажмем New. В открывшемся окне мы можем писать программу.

Напишем:
import RPi.GPIO as GPIO #импорт библиотеки для работы с GPIO
import time #импорт библиотеки для ожидания
GPIO.setmode(GPIO.BOARD) #"запуск" GPIO


____GPIO.output(7, 1) #включение светодиода

____GPIO.output(7, 0) #выключение светодиода
____time.sleep(1) #ожидание 1 секунды

Сохраним программу в папке /home/pi.

Теперь мы можем запустить программу из LXTerminal с помощью команды
sudo python programname.py

Управление светодиодом с помощью кнопки

Поуправляем светодиодом с помощью внешней кнопки: когда кнопка зажата — светодиод горит, когда отжата — не горит.

Для этого подключим кнопку к порту 5.

Для управления нам потребуется следующая программа:

Import RPi.GPIO as GPIO #импорт библиотеки GPIO
GPIO.setmode(GPIO.BOARD) #"включение GPIO"
GPIO.setup(7, GPIO.OUT) #объявление порта 7 как выход
GPIO.setup(3, GPIO.IN) #объявление порта 3 как вход
while True: #бесконечный цикл
____if GPIO.input(3) == False: #если кнопка зажата
________GPIO.output(7, 1) #включаем светодиод
____else: #иначе
________GPIO.output(7, 0) #выключаем

Управление светодиодом с клавиатуры

Сделаем еще одну программу. Она будет менять состояние светодиода при получении пустой строки и заканчиваться при получении другой строки.

Import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
while True:
____str = input("Enter - включение, другое - выход ");
____if str != "":
________break
____else:
________GPIO.output(7, 1)
____str = input("Enter - выключение, другое - выход ");
____if str != "":
________break
____else:
________GPIO.output(7, 0)
GPIO.cleanup()

На этом четвертый урок по Raspberry Pi для начинающих закончен, продолжение следует!

В этой достаточно длинной даже для блога статье описаны первые шаги уже немолодого "айтишника" на пути освоения новейшего подхода к информационному образованию в школах и ВУЗах развитых стран - физического компьютинга на devboard Raspberry Pi, чтобы сделать его доступным своему любимому ребенку и родной школе.

По ходу дела, мне впервые в жизни пришлось познакомиться с альтернативной "Wintel" аппаратной платформой (Raspberry Pi 3 на базе ARM-процессора), освоить работу в незнакомой операционной системе (Rasbian OS на базе Debian Linux), подружиться с новым языком программирования (Python), вспомнить азы радиоэлектроники .

В итоге, всего за 3,5 т.р. и месяц ожидания у моего ребенка появился достаточно мощный, уникальный по своим образовательным возможностям инструмент, сочетающий в себе бесшумный 4-ядерный компьютер размером с кредитную карту, вебсервер, медиацентр, центр управления датчиками "умного дома", лабораторию для освоения основ программирования, робототехники и радиоэлектроники - почти идеальное решение для школьного кружка информатики.
При этом, все программы на нем изначально бесплатны и в широком разнообразии доступны из онлайн-репозиториев, а вирусов не бывает в принципе.

Экскурс в историю обучения информатике в школе и ВУЗе

С конца 90-х тем или иным образом принимаю участие в развитии процесса информатизации образования в школах и ВУЗах.
В конце 80-х будучи старшеклассником "зацепил" начало внедрения компьютеров в школьное образование. Тогда это были компьютерные классы на основе микроЭВМ БК 0010 и учительского компьютера ДВК-2. С увлеченим осваивал программирование Basic. Книг тогда по нему практически не было. Вместе с преподавателем приходилось все изучать по брошюркам и "методом научного тыка". Перед окончанием школы в Чувашию приехал проект IBM "Пилотные школы". К счастью, в одну из школ Новочебоксарска (№14) был поставлен компьютерный класса на основе IBM PS/2. Тогда это было подобно чуду - настоящий компьютер "IBM PS" с "мышкой", флоппи-дисководом и шикарным 256-цветным экраном! Учительский компьютер имел 286-й процессор, 1 мегабайт оперативной памяти и 40Мб жесткий диск (который казался настолько большым по сравнению с флоппи-диском, что мы не знали, можно ли его вообще чем-то заполнить "под завязку"). Ко всему прилагался матричный принтер - "чудо враждебной техники".
Затем были 5 "перестроечных" лет учебы в университете, где в ходе учебного процесса я познакомился с кубинскими СМ ЭВМ (те самые, с катушками для записи данных и с тяжелыми металлическими клавиатурами). Но как раз в те самые годы ВУЗы по западным гратнам стали получать современные компьютеры IBM PC-XT 286 и IBM PC/AT 386. Снова я испытал потрясение, изучая Pascal, работая в Norton Commander и осваивая среду гипертекстовой верстки документов LaTex.
Работая несколько лет в школе после окончания ВУЗа имел счастье наблюдать, как в кабинетах информатики БК 0010 постепенно сменяются новыми, на порядки более мощными комьютерами Pentium с графической ОС Windows и офисными программами "на борту". Но дети продолжают изучать на них Basic и Pascal...
По роду деятельности одним из первых в родном городе зашел в Internet и тут же понял, что за ним будущее. Стал заниматься созданием вебсайтов разработкой интернет-проектов, познакомился с Linux- основной ОС Интернета и Perl - тогда самым популярным языком программирования интернет-приложений.
На какой то период времени отошел от школьного образования. Примерно через 10 лет нашел время и желание организовать кружок по компьютерной астрономии в родной школе (ныне гимназии). Практически на моих глазах старые Pentium-ы и Celesron-ы в компьютерном классе благодаря президентскому гранту сменились на мощные двухядерные ноутбуки. В учебной программе уже присутствовали офисные пакеты и графичекские редакторы, основы работы в интернет и знакомство с HTML. Но старые Basic и Pascal также остались...
И вот на дворе уже второе десятилетие нового тысячилетия. Дочка доросла до уроков информатики. От нее я узнал, что в школах все-так же изучают основы работы в Windows и... программирование на Borland Pascal...
А тем временем, во всем мире дети младшего школьного возраста уже пишут программы под Андроид, создают интернет-сервисы на сверхпопулярном языке Python и управляют со смартфонов умными домами на базе Linux-devboard"s с SoC-процессорами...
Задавал вопросы представителям системы образования, в чем проблема застоя с внедрением обучения современным технологиям в школе? Односложного ответа на этот вопрос не услышал. Понял лишь одно, что из-за непопулярности среди продвинутой молодежи профессии учителя информатики, длительности процесса написания учебных программ и пособий, переобучения учительсого состава и переоборудования компьютерных классов, в ближайшем времени моему ребенку в школе ничего не светит, если... Если внедрением новых технологий хотя бы в качестве внеурочной, или олимпиадной работы не займутся энтузиасты. К моему счастью, я сам энтузиаст, и мой первый учитель информатики тоже из их числа. Только нужно помочь с чего-то начать...

Arduino vs Raspberry Pi


Погуглив немного, выяснил, что самым современным в последние пару лет направлением информационного образования во всем мире становитя физический компьютинг - основа технологии IoT (Интернет вещей). Эта тема стала бурно развиваться благодаря появлению недорогой, но достаточно мощной аппаратной платформы Raspberry Pi и связанной с ней инфраструктуры - огромного сообщества преподавателей и этнузиастов, бесчисленнного множества стартовых руководств и учебников, тысяч разработчиков различных библиотек, широкого ассортимента готовых расширений и датчиков. До Raspberry Pi в школьном образовании за рубежом активно продвигалась тема освоения основ кибернетики и физического компьютинга на базе микроконтроллеров Arduino. Благодаря этому для Arduino в настоящее время существует богатый выбор различных датчиков, позволяющим детям под присмотром взрослых, к примеру, конструировать роботизированные платформы, чтобы устраивать примитивные "гонки роботов". В принципе, тема Arduino актуальна и по сей день, но как начальная часть процесса обучения физическому компьютингу, программированию и кибернетике. Raspberry Pi - следующий, существенно более продвинутый, фактически, не ограниченный по возможностям уровень...

Понять, чем отличаются, по своему хороши Raspberry Pi и Arduino можно, сравнив их возможности.

Arduino - это не являющийся полноценным компьютером однозадачный одноядерный микроконтроллер с малым объемом оперативной памяти, невысокой вычислительной мощностью, отсудствием мультимедийных и сетевых возможностей, но низким энергопотреблением и высокой скоростью реакции в критичных к времени проектах. Для управления Arduino требуется компьютер, или ноутбук с USB-портом, что существенно увеличивает стартовый бюджет одного учебного места. Для программирования Arduino необходимо будет изучать C-подобный язык. Arduino достаточно для быстрой реакции на сигнал с датчика, например, чтобы повернуть в другую сторону колесо робота. Но управлять роботом через интернет и обрабатывать маршрут Arduino уже не сможет.

Raspberry Pi (v3 Model B) - полноценный 4-ядерный одноплатный компьютер с 1Гб оперативной памяти и возможностью подключения через USB внешних накопителей, работающий под управлением современной Linux-системы, обладающий продвинутыми мультимедийными (Open GL, HD-Video) и коммуникационными (WiFi, Bluetooth, Ethernet) возможностями. За некоторыми оговорками, Raspberry Pi может с успехом использоваться в качестве полноценного ученического/студенческого компьютера, на котором можно, помимо основной задачи- физического компьютинга, слушать музыку, смотреть HD-видео, заниматься вебсерфингом, работать с документами в офисных редакторах, читать электронные книги и т.п... И при этом, не считая монитора (в качестве которого может выступать обычный ЖК-телевизор с VGA/HDMI-разьемом), USB-клавиатуры и мыши, стоимость одного учебного места на базе Raspberry Pi начинается с 2,5 т.р. На Raspberry Pi можно изучать основы программирования на любых языках. По умолчанию на него предустановлены Python, Scratch и Node-RED, но ничего не мешает через удобный интерфейс Debian-репозитория программ установить LAMP c PHP, Ruby, Java и другие популярные среды разработки. Также на Raspberry Pi, как полноценный Linux-компьютер, можно установить массу полезных бесплатных и полезных для освоения программ, в том числе, вебсервер Apache-основу современного Интернета, среду 3D-проектирования Blender, графический редактор The Gimp, векторные редакторы Xara-X и Inkscape, издательскую систему Scribus. И в добавок, Raspberry Pi располагает интерфейсом GPIO для управления датчиками, изначально предназначенными для Arduino. Более того, если требуется мгновенная реакция на события и АЦП-преобразования сигнала, к Raspberry Pi можно подключить Arduino и управлять датчиками через него!
В итоге, Raspberry Pi представляет собой самый доступный по цене персональный компьютер для учащихся и одновременено развитую аппаратно-программную платформу для «Интернета Вещей».

1. Покупка стартового комплекта Raspberry Pi

Итак, разобравшись, что минуя этап Arduino стоит сразу начинать с Raspberry Pi, я пришел к решению о покупке стартового комплекта для первоначального знакомства, освоения основ работы и азов физического компьютинга на Python, чтобы затем продемонстрировать все это в школе и заинтересовать энтузастов-преподавателей, а также продвинутых учащихся. Таким образом и началась моя эпопея с Raspberry Pi.

К счастью для россиян, все модели Raspberry Pi, включая самую совершенную v3 Model B, а также необходимые компоненты к ней можно заказать с доставкой на aliexpress.com.

По минимуму можно заказать только саму плату Raspberry Pi 3 Модель B с доставкой по цене 2200р. Для начала работы вам понадобится блок питания (зарядник для сотового/планшета) с miniUSB-разъемом, дающим на выходе ток 1А-1,5А, ЖК-монитор или телевизор с HDMI-разъемом, USB-клавиатура и мышь.

Я решил добавить 1,2 т.р. и купить необходимый набор компонент, с которым Raspberry Pi станет более удобным, производительным, совместимым и эффективным. Прежде всего, стоит купить комплект радиаторов для отвода тепла от SoC-процессора и памяти, чтобы они не перегревались на сложных задачах и не снижали производительность системы последовательным отключением ядер процессора и снижением тактовой частоты.
Также очень рекомендуется купить какой либо недорогой корпус, чтобы избежать неудобств и защитить детей от неприятностей. Я взял оригинальный корпус Модель R1 бело-малинового цвета.
Для начала освоения основ физического компьютинга вместе с Raspberry Pi сразу стоит заказать стартовый комплект датчиков и монтажную плату с шлейфом для интерфейса GPIO, которые не купишь в местных магазинах. На aliexpress.com существую готовые комплекты, состоящие из датчиков, монтажной платы со шлейфом и переходником, соединительных проводов, светодиодов, кнопок и резисторов. Но они показались мне немного дороговатыми... Поэтому, я взял почти все по отдельности, а светодиоды, кнопки и резисторы решил купить в ближайшем радиоларьке.

Мой список покупок через интернет:
1. Raspberry Pi 3 Модель B с блоком питания на 2,5А и двумя радиаторами для процессора и памяти - 2412р.
2. bredaboard с 40-жильным кабелем и переходником - 282р.
3. HDMI2VGA переходник - 233р.
4. Корпус, модель R1 - 280р.
5. Стартовый комплект из 16 датчиков - 510р.
6. Комплект соединительных проводов - 186р.
Итого : 3900р. (по ценам на февраль 2017г. при курсе рубля 57,70)

После примерно месяца ожидания все заказанные компоненты прибыли в целости и сохранности.

2. Подготовка Raspberry Pi к работе


До первого включения Raspberry Pi необходимо сделать несколько обязательных процедур. Внимание! Перед тем, как достать плату из антистатического пакета, обязательно снимите статическое электричество с рук, прикоснувшись к водопроводному крану или оголенному участку батареи отопления, иначем можете сжечь чувствительную электронику.
Сперва нужно наклеить радиаторы на процессор и микросхему памяти. Это не сложно: сначала отклеиваем защитную пленку с радиатора, затем аккуратно располагаем его над микросхемой, соответствующей ему по размеру и без усилия опускаем на нее радиатор. Сильно прижимать радиатор к микросхеме не надо, он и так будет хорошо держаться.
Затем нужно собрать из частей корпус и поместить в него плату. При сборке корпуса верхнюю крышку и сторону с вырезами под USB-разъемы устанавливаем после вставки (с некоторым усилием) в пазы платы Raspberry Pi.

3. Установка ОС Rasbian

Поскольку Raspberry Pi по умолчанию поставляется без предустановленной операционной системы и собственного носителя информации, его нужно будет купить, а систему скачать и самостоятельно установить.
В качестве системного диска Raspberry Pi на используется microSD-карта минимум 6 класса (скорость записи 6Мб/сек) объемом не менее 8Мб. В интернете советовали сразу покупать карту 10 класса, чтобы избежать возможных проблем с установкой ОС и работой Raspberry Pi.
В ближайшем компьютерном ларьке я купил microSD-карту 10 класса марки Sundisk объемом 8Гб.
Затем я скачал операционную систему Raspbian (на основе Debian Jessie) по адресу https://www.raspberrypi.org/downloads/raspbian/ . Выбирайте Raspbian Jessie with PIXEL - это дистрибутив с графическим интерфейсом и комплектом программ для начала продуктивной работы.
Как выяснилось, скачанный образ при распаковке из архива разворачивается до 4Гб и на диске с файловой системой FAT32 из-за ограничений на максимальный размер одиночных файлов записан быть не может.
Пришлось подключить внешний USB-диск с ФС NTFS и распаковать образ Raspbian ОС на него.
Для записи образа на SD-карту, потребовалось скачать программу Win32DiskImager по адресу и подключить microSD-карту к компьютеру через USB-кардридер.
Интерфейс программы до безобразия прост: в строке "Image File" надо указать на диске образ Raspbian ОС, в выпадающем списке "Device" выбрать microSD-карту и нажать кнопку "Write". Кстати, этой же программой время от времени стоит делать резервное копирование microSD-карты, вставив ее в кардридер, выбрав путь сохранения образа в поле "Image File", задав в выпадающем списке Device имя диска, под которым определиась microSD-картаи выбрав команду "Read".

4. Первый запуск


После успешного завершения процесса записи, вставляем microSD-карту в соответствующий разъем кардридера на Raspberry Pi, подключаем через HDMI-кабель, или HDMI2VGA переходник монитор, подключаем к нижним USB-разъемам клавиатуру и мышь, и только после этого подсоединяем блок питания. Поскольку Raspberry Pi не имее кнопки включения питания, подсоединение/отсоединение блока питания включает и выключает устройство. На всякий случай заранее напишу, что перед обесточиванием на Raspberry Pi желательно корректно завершить работу ОС, чтобы не возникали ошибки при последующем запуске.
К моему глубокому сожалению и ужасу, после подключения питания к Raspberry Pi на мониторе не загорелась заставка графической оболочки Pixel, а выскочила тирада из текстовых "ругательств", завершившаяся строкой "kernel panic" с номером ошибки.
Погуглив на смартфоне, я тут же выяснил, что, повидимому, Raspberry Pi не нравится моя microSD-карта (как позже выяснилось, скорости чтения/записи не достаточно для нормальной работы ОС Raspbian). Во время повторной записи образа ОС Raspbian на SD-карту я заметил, что скорость записи не привышает 4Мб/сек (соответствует 4-му классу SD-карты).
При повторном включении Raspberry Pi со злополучной картой я снова увидел "kernel panic". Пришлось сходить в ларек и поменять ее после некоторых объяснений на менее "брендовую" Prestigio microSDHC 8Гб 10 класса (U1). На "свежекупленную" microSD-карту образ ОС записался в два раза быстрее со скоростью примерно 9,5Мб/сек. При включении с ней Raspberry Pi тут же отобразила приветственное окно и через несколько секунд загрузки я с радостью увидел на дисплее интерфейс X-Windows с красивой заставкой в виде пустынной дороги, уходящей в сторону восходящего солнца.
По-видимому, карта Sundisk оказалась поддельной...

5. Знакомство с Debian Linux, первичная настройка Raspbian ОС, установка полезных программ


Вооружившись парочкой руководств на русском и английском языке, скачанных с различных гик-ресурсов, решил посвятить вечер выходного дня на первичную настройку удобной рабочей среды на Raspbian ОС.

Прежде всего, стоит сказать несколько слов о консоли Debian Linux. Она доступна по кнопке LXTerminal на верхней панели интерфейса Raspbian ОС.
В Linux-консоли вводятся команды для управления ОС, установки, запуска и удаления программ, внесения ручных правок в настройки самой ОС и ее отдельных компонентов. Для успешного запуска большинства команд требуется уровень доступа администратора (root-доступ). Для этого нужно перед командой вводить "sudo ".
Некоторые операции в Raspbian ОС доступны только из консоли.
Прежде всего, это доступ к программе настройки системы raspi_config. Именно в ней производится первичная настройка Raspbian ОС.
Для запуска программы настройки системы надо открыть LXTerminal и ввести в консоли команду:
sudo raspi-config

Первым делом, надо выбрать команду "Expand Filesystem", чтобы расширить файловую систему ОС на все доступное пространство microSD-карты.
Затем обязательно стоит поменять пароль root по умолчанию на доступ к системе через консоль и по SSH командой "Change User Password". Из косоли это далается командой "sudo passwd root".
Затем стоит запустить SSH-сервер для того, чтобы иметь возможность заходить на Raspberry Pi по терминальному протоколу SSH с другого ПК командой "SSH" в окне "Advanced Options".

Очень важно сразу поменять локаль (язык интерфейса) на русский и добавить русскую раскладку клавиатуры.
Это осуществляется в окне "Internationalisation Options". Смена локали осуществляется по команде "Change locale".
Надо выбрать локаль ru_RU.UTF-8 UTF-8. Смена раскладки клавиатуры производится по команде "Change keyboard layout". Далее придется в новом окне выбрать нужную раскладку (ru_RU.UTF-8), в следующем окне задать горячие клавиши смены раскладки, каждый раз подтверждая выбранные действия переходом кнопкой "Tab" клавиатуры на кнопку "Enter" окна программ и нажатием "Enter" на клавиатуре.
Стоит также в окне "Advanced options" перейти на пункт меню "Audio" и выбрать в новом окне варинат вывода звука по умолчанию на внутренний разъем 3.5mm jack, чтобы слушать звук в наушниках, подключенных к стандартному звуковому разъему Raspberry Pi.
После завершения настроек выбираем кнопку "Finish" и соглашаемся на перезагрузку системы.

Следующим этапом настройки Raspbian ОС рекомендуется выполнить обновление ее базы программ и установленных компонент.
Для этого последовательно введем в консоли следующие команды, дожидаясь окончания выполнения каждой из них до появления зеленого приглашения ввода консоли.
Обновление базы программ:
apt-get update
Обновление установленных программ
sudo apt-get upgrade
Удаления оставшихся после удаления программ библиотек, сопутствующих программ и др.
sudo apt-get autoremove
Выполнение второй команды обычно занимает 10-15 минут.
Вспоминая прежний опыт работы в Linux, поспешил установить файловый менеджер Midnight Commander.
sudo apt-get install mc
Без него перемещаться по структуре папок системы командой "cd" получается медленно и не удобно.

На всякий случай, у новичка всегда должна быть под рукой шаргалка по базовым командам Unix...

Ctrl+C - выход из открытой консольной программы (если не предусмотрено других клавиш)
Shift+Ins - вставить текст в консоль
Ctrl+Ins - копировать выделенный текст из консоли
sudo - ставится перед командой и выполняет ее с правами пользователя root
- выключение
sudo shutdown -h now - немедленная остановка системы и запуск процесса выключения
sudo shutdown -h 21:55 - остановка системы и выключение в 21:55
sudo shutdown -h now — выключение Raspberry Pi
sudo su - открыть командную строку с правами root
sudo -i - открыть командную строку с правами root
sudo cp - копирование файла (с ключом -r рекурсивное копирование)
sudo mv - перемещение файла
cat - вывод содержимого файла/файлов
cd — Переход в нужную папку. Например cd /home/pi
chmod - изменения прав на использование файла; u (означает пользователя, который владеет этим файлом), g (группа файлов) и o (другие пользователи), а также r (считывание), w (запись) и x (выполнение)
chmod u+x - устанавливает разрешение владельцу файла на его исполнение
sudo chown pi:root - смена пользователя и/или группы пользователей, которые владеют этим файлом, например пользователя на pi, а группу на root.
dir - покажет содержимое текущей папки
pwd - покажет ваше текущее расположении
date - покажет время и дату
cal - покажет календарь на текущий месяц
cal -y - покажет календарь на текущий год
wget - скачать файл в текущую директорию. Например wget http://mysite.com/myfile.deb
sudo apt-get update - обновит список пакетов с репозитария
sudo apt-get upgrade - обновит установленные пакеты
sudo apt-get install <название> - установка программы <название> из Debian-репозитория
sudo apt-get remove <название> - удаление программы <название>
info <название> -вывод информации о программе
apt-cache search <запрос> - поиск по базе Debian-репозитория программы или утилиты с описанием <запрос>
apt-cache search screen capture - поиск программ для создания скриншотов
sudo apt-get install mc - установка файлменеджера Midnight Commander (Mc)
sudo apt-get install links - установка текстового браузера Links
udo apt-get install scrot - установка утилиты для скриншотов
scrot -d5 - создание скриншота черех 5 секунд
sudo apt-get install synaptic - установка менежера пакетов Synaptic
sudo apt-get install x11vnc - установка VNC-сервера
x11vnc -desktop:0 - запуск VNC-сервера для удаленного управления через VNC-клиент, например realVNC (http://www.realvnc.com/download/viewer/)
top - запуск диспетчера задач
sudo nano - редактирование файла
sudo nano /boot/config.txt - редактирование файла настроек запуска Raspberry Pi
ifconfig — утилита конфигурирования сетевых интерфейсов
iwconfig - просмотр информации о беспроводных устройствах
sudo iwlist wlan0 scan — сканирование Wi-Fi
cat /proc/cpuinfo — смотрим инфо о процессоре
cat /proc/meminfo — отображает подробную информацию о памяти Raspberry Pi
cat /proc/partitions — показывает размер и количество разделов на Вашей карте SD или HDD
cat /sys/devices/system/cpu/cpu0/cpufreq/sca ling_cur_freq — информация о частоте процессора
<имя_программы> --help — отбражение помощи по программе
vcgencmd measure_temp - покажет температуру процессора
free -o -h - покажет, сколько свободной системной памяти доступно
vcgencmd get_mem arm && vcgencmd get_mem gpu — покажет распределение памяти между процессором и GPU
lsusb - список подключенных устройствах
mkdir newDir - создание директории newDir
rmdir oldDir - удаление пустой директории oldDir
rm <имя_файла> - удаление файла/папки (с ключем -r рекурсивное удаление содержимого папки)
& - запускает команду в фоновом режиме
curl - загружает файл либо с сервера, либо на него
grep "паттерн" *.txt - поиск в файлах по маске и заданному паттерну
ping <имя_сервера> - провера доступности сервера
df -h - свободное и занятое дисковое пространство на подключенных устройствах
scp myfile.txt [email protected]: - копирование файла myfile.txt на устройство [email protected] по SSH в папку /home/pi/
scp [email protected]:myfile.txt . - копирование файла myfile.txt с устройства [email protected] в текущую папку по SSH
scp *.txt [email protected]: - копирование всех текстовых файлов с устройства [email protected] в текущую папку по SSH
dd if=/dev/sdd of=backup.img - создание бэкап-образа SD-карты или USB-носителя (/dev/sdd)
dd if=/dev/sda of=/dev/sdb bs=4096 - побайтное копирование данных с устройства на устройство (dd if=/dev/zero of=/dev/sda bs=4k - очистка диска sda)
dd if=myfile of=myfile conv=ucase - прообразование файла в верхний регистр
dd if=myfile of=myfile conv=lcase - прообразование файла в нижний регистр
ls -l | dd conv=ucase - преобразует вывод команды в верхний регистр
apt-mark showauto > autopackagelist.txt - создание списка предустановленных приложений
apt-mark showmanual > manualpackagelist.txt - создание списка установленных вручную приложений

6. Тестирование Raspberry Pi в качестве десктопа

Итак, через полчаса настроек и обновлений Raspberry Pi готов к работе. Что мы имеем "на борту" по умолчанию?
Помимо средств разработки программ, на Raspberry ОС установлен базовый комплект необходимых приложений.
Для работы с документами предустановлены пакет Libre Office и средство просмотра PDF. Для продуктивной работы в интернет с Raspberry ОС поставляется броузер Chromium и почтовый клиент Claws Mail. Для удаленного управления с десктопа и мобильных устройств на Raspberry Pi установлен VNC Connect.
К сожалению, по умолчанию система не содержит медиаплеера с графическим интерфейсом для воспроизведения видео и аудио, но с консоли воспроизведение мультимедийных файлов можно запустить через программу omxplayer, поддерживающую аппаратное ускорение видео в полноэкранном режиме.
В системе имеется графический файловый менеджер Xfce, позволяющий перемещаться по папкам при помощи мышки, осуществлять файловые операции, открывать документы двойным кликом мышки. Как показала практика, по удобству и принципам работы он практически ничем не отличается от привычного нам Проводника.
Открытие меню и переход по папкам в интерфейсе Raspbian ОС осуществляется на удивление быстро, поживее, чем на моем стареньком двухядерном Celeron-е.
После инвентаризации установленного ПО любопытство подтолкнуло проверить скорость работы на Raspberry Pi в Интернет. Открыл в Chromium и первым делом зашел на родной портал cheboksary.ru: страницы открываются быстро и без тормозов. Во второй вкладке открыл соцсеть ВК. Стал прокручивать свою ленту при помощи колесика мышки - неприятных задержек подгрузки не заметил. Лента соцсети скроллится в броузере плавно, без рывков. В третьей вкладке открыл Youtube, а в нем - популярный видеоклип. Видео воспроизводится без задержек и рывков с достаточно хорошим разрешением и достаточно качественным звуком. Развернул видео на полный экран - воспроизведение продолжилось без рывков. Заметил единственный момент - немного заторможенную реакцию на клики мышкой по интерфейсу воспроизведения видео. Можно сказать, что тест на производительность работы в интернет Raspberry Pi прошел.
Проверил скорость рендеринга страниц электронной книги во встроенном в систему PDF-просмотрщике Xpdf. Для этого решил воткнуть в USB-разъем "флешку" и... система сразу ее распознала, открыв через пару секунд окно файлменеджера на папке /media/pi/usb/ с содержимым моего сменного носителя! Приятный сюрприз - в Raspbian ОС реализовано автомонтирование USB-drive! Как выяснилось позже, для демонтирования "флешки" перед отсоединением надо нажать на стрелочку в правом верхнем углу экрана и выбрать ее из списка.
Быстро выбрав нужный PDF-файл, просто кликнул по нему и увидел содержимое в окне просмотрщика. При скроллинге страницы электронной книги рендерились с задержкой примерно в одну секунду, что можно считать вполне приемлемым результатом. Единственный неприятный момент - просмотрщик не смог отобразить русские буквы в оглавлении книги.
Чтобы проверить воспроизведение музыки и видео с "флешки", решил не пользоваться консолью и установил для этого графическую оболочку на Python для системного проигрывателя omxplayer. Конечно, tk-интерфейс оболочки не блещет красотой и дизайном, но все-таки позволяет при помощи мышки выбрать нужные файлы и создавать плей-листы. Хотя в сети писали, что в окне на Raspberry Pi видео с аппаратным ускорением не воспроизводится, как оказалось, через omxplayerGUI это вполне возможно! Видео выводилось на экране с исходным разрешением в окне без рамки, но позволяло перетаскивать окно, причем, без остановки воспроизведения.
Одним словом, интернет на Raspberry Pi работает без ограничений, музыка и видео воспроизводятся, флешки автомонтируются, офисные документы редактируются, фотографии показываются. Что еще нужно для продуктивной работы?

Самая мощная на сегодня модель Raspberry Pi 3 Model B имеет разъём HDMI для подключения монитора, 4 USB-порта для подключения USB устройств, Ethernet-порт для подключения к сети, встроенный Wi-Fi и Bluetooth, 4 ядерный 64-битный процессор ARM 1.2 ГГц, 1 ГБ оперативной памяти. В отличие от обычных компьютеров на маленькой плате Raspberry есть 40 контактов (пинов) GPIO, который могут использоваться как на вход, так и на выход с применением различных протоколов взаимодействия с внешними устройствами, что и позволяет подсоединять к плате различные датчики и исполнительные приборы.

1. Внешний вид, основные элементы, корпус.

Итак, в наших руках Raspberry Pi 3 Model B.

Верхняя сторона выглядит так:

Нижняя сторона:

На нижней стороне установлены слот для SD-карты и оперативная память. SD-карта служит постоянным запоминающим устройством и содержит файлы операционной системы, программ и файлы пользователя.

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

Но сначала на процессор и графический чип стоит установить радиаторы, поскольку эти микросхемы прилично греются при активной работе платы:

Вот теперь можно собрать корпус и пометить туда плату микрокомпьютера:




Корпус имеет открывающуюся крышку для удобного подключения камеры, дисплея и контактов GPIO.

2. Подготовка к включению и первый запуск.

Для первого запуска Raspberry необходимо следующее:

  • микро SD-карта с установленной операционной системой (OC) Raspbian, рекомендуемой для этого устройства (оптимальная емкость карты - 8 Гб, класс скорости - 10);
  • монитор с HDMI входом;
  • сетевой блок питания с выходным напряжением 5 В и током не менее 2 А, с выходным разъемом micro-USB;
  • USB-мышь и USB-клавитура.

Образ операционной системы Raspbian, созданной на основе Linux Debian 8 Jessi, можно скачать в разделе Downloads сайта raspberrypi.org. Для начала можно воспользоваться образом RASPBIAN JESSIE LITE, как наиболее простым в изучении. Записать образ на SD-карту удобно из-под Windows с помощью программы Win32DiskImager. Способ установки и сама программа описаны на сайте Raspberry по адресу.

Вы также можете воспользоваться файлами, размещенными на нашем сайте в карточке Raspberry Pi 3 или напрямую скачать с Яндекс диска:

  • образ операционной системы;
  • программа Win32DiskImager.

Дальнейшее описание базируется именно на этом образе.

Мышь и клавиатура, подключенные к Raspberry без проблем распознаются системой. Можно также использовать беспроводную мышь и клавиатуру, например Bluetooth, но их надо настроить после запуска Raspberry, а для этого нужна хотя бы USB-мышь. У нас в хозяйстве не нашлось USB-клавиатуры, поэтому для первого запуска мы подключили USB-мышь, а также монитор и питание:

Кстати, на плате нет выключателя питания, она запускается сразу при подключении разъема, и начинается загрузка операционной системы. После загрузки на экране появляется рабочий стол с вполне привычными (но оригинальными) обоями и иконками:

На начальном экране имеются легко распознаваемые иконки Меню, интернет-браузера, менеджера Bluetooth, регулятора громкости, настройки сети и некоторые другие. Из них, пожалуй, самая нужная при настройке и работе - это черный экранчик в правой верхнем углу: терминал. С помощью терминала вводятся команды операционной системы. Поскольку далеко не все программы для Linux имеют графический интерфейс, их можно запустить и работать в них только посредством командной строки. Именно эту возможность и предоставляет терминал. Также все системные операции Linux, например установка и удаление программ осуществляются преимущественно через терминал. В OC используется программа LXTerminal, которая и запускается при щелчке правой кнопкой мыши по иконке. Следует заметить, что многие команды требуют ввода в начале строки приставку sudo (gksudo при запуске программ с графическим интерфейсом), что позволяет выполнить команду от лица администратора компьютера, то есть с наивысшими правами (sudo - Super User Do). Только администратор может устанавливать и удалять программы, а также менять параметры OC и ее конфигурацию.

После первой загрузки системы имеет смысл сразу подключиться к интернету, чтобы обновить файлы ОС до актуальной версии. В правом верхнем углу рабочего стола есть иконка с узнаваемым изображением двух терминалов. При подключении кабеля к разъему Ethernet на плате Raspberry происходит автоматическое подключение к локальной сети. Если щелкнуть мышью по этой иконке, появляется список беспроводных сетей, из которых можно выбрать свою и подключиться к ней, введя соответствующий ключ. При этом вместо терминалов на иконке появится стандартное изображение подключение к беспроводной сети. Именно такая ситуация показана на рисунке выше.

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

Теперь можно подключить, например, беспроводные мышь и клавиатуру по Bluetooth:

Это делается щелчком на иконке с логотипом Голубого Зуба рядом с индикатором подключение к сети в правом верхнем углу экрана. Далее надо нажать Add Device и выбрать ваши устройства из списка найденных беспроводных устройств.

Следует отметить, что при всем удобстве использовании Bluetooth устройств ввода с Raspberry - они не занимают разъемов USB - эти устройства в нашем случае периодически теряли связь с платой. Поэтому для стабильной работы, все же следует использовать USB-мышь и клавиатуру, а так же, в качестве альтернативного варианта, занимающего только один USB-разъем, комплект мыши и клавиатуры с одним приемопередатчиком по радиоканалу.

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

3. Знакомство с GPIO, программированием на Python и запуск светофора

Контакты GPIO, безусловно, являются очень интересной частью Raspberry, значительно расширяющей возможности микрокомпьютера для применения в электронных автоматизированных системах. С помощью этих контактов можно как считывать данные с огромного множества предлагаемых сегодня датчиков: температуры, давления, движения, наклона, ориентации, открытия и т.п., так и посылать команды на исполнительные устройства: реле, двигатели, актуаторы, серво-машины и многие другие.

Вот схема 40-контактного разъема GPIO:

Как видно, кроме обычных цифровых пинов вход/выход, принимающих или выдающих значения логических 0 и 1, имеются контакты, работающие по распространенным интерфейсам I 2 C, SPI и UART. Также есть возможность генерации ШИМ и прерываний от изменения уровней на входах.

Используем GPIO для моделирования работы светофора по нажатию кнопки, как это делается на редко используемых пешеходных переходах, где обычно горит зеленый свет для транспорта, а пешеход может кнопкой запустить программу включения красного света для транспорта. Алгоритм этой программы такой: при нажатии кнопки начинает мигать зеленый свет, затем на короткое время зажигается желтый, затем красный; красный свет горит некоторое время, затем короткое время горят красный и желтый, и, наконец, снова зеленый; далее система ждет очередного нажатия кнопки.

Для программирования этого алгоритма воспользуемся встроенной в образ ОС Raspbian интегрированной среды разработки (IDE) на языке Python (Пайтон). Язык Python имеет большое число достоинств, о которых можно почитать в сети, что делает его весьма хорошим инструментом как для начинающих программистов, так и для профессионалов. Это интепретирущий язык, его команды выполняются последовательно, одна за другой. В IDE Python команды можно выполнять, просто вводя их с клавиатуры и нажимая клавишу Enter в конце строки.

Среда разработки программ на языке Python запускается с рабочего стола последовательным выбором Menu - Programming - Python 3 . Далее, в открывшемся окне Python Shell следует нажать File - New File . В открывшемся окне редактора нужно набрать или скопировать следущий текст программы, обращая особое внимания на отступы в тексте, так как для программ на Python они имеют принципиальное значение:

#!/usr/bin/python

import RPi.GPIO as GPIO
from time import sleep

RED_PIN = 36

YELLOW_PIN = 32
GREEN_PIN = 29
BUTTON_PIN = 40

print ("RPi.GPIO init start")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
print ("RPi.GPIO init end")

print ("GPIO setup")

GPIO.setup(RED_PIN, GPIO.OUT)

GPIO.setup(YELLOW_PIN, GPIO.OUT)
GPIO.setup(GREEN_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.output(RED_PIN, 0)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(GREEN_PIN, 1)

while True:

if inp==0:
for x in range(0, 5):
GPIO.output(GREEN_PIN, 1)
sleep(0.5)
GPIO.output(GREEN_PIN, 0)
sleep(0.5)
GPIO.output(YELLOW_PIN, 1)
sleep(2)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(RED_PIN, 1)
sleep(5)
GPIO.output(YELLOW_PIN, 1)
sleep(1)
GPIO.output(RED_PIN, 0)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(GREEN_PIN, 1)

Первая строка указывает, где в ОС находится интерпретатор Python.

Функция, начинающаяся с print , просто выводит свой аргумент на экран.

Строки, начинающиеся с GPIO.setup , задают режим выхода (OUT ) или входа (IN ) соответствующих пинов, а аргумент pull_up_down=GPIO.PUD_UP включает подтягивающий резистор на входе 40, к которому подключена кнопка. Поскольку программа на Python не имеет стандартного «вечного цикла», как, например в Ардуино, где загруженная в микроконтроллер программа выполняется бесконечно, пока подано питание, оператор while True: осуществляет этот цикл. Нам ведь надо возвращать наш светофор в исходное состояние всякий раз по завершению цикла его работы.

Оператор присвоения inp = GPIO.input(BUTTON_PIN) записывает в переменную inp значение на входе 40. Если кнопка не нажата - это 0, если нажата - 1. Если inp равно 0, то начинается цикл работы светофора:

  • с помощью цикла for 5 раз мигает зеленый светодиод;
  • на 2 секунды зажигается желтый (пауза задается оператором sleep);
  • желтый гаснет, зажигается красный на 5 секунд и т д.

После окончания цикла работы светофора все начинается снова.

Теперь необходимо собрать электрическую схему с помощью проводов с разъемами без пайки:



Короткие ножки светодиодов (это минус) подключаем к земле - контакты 6, 14, 20; длинные (плюс) через резисторы 240 Ом - к контактам 29 (зеленый), 32 (желтый), 36 (красный).

Кнопку подключаем к контактам 39 и 40.

Теперь в редакторе с нашей программой выбираем Run - Run Modul или нажимаем F5, и программа начинает выполняться, ожидая нажатия кнопки.

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

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

Тут нам понадобится терминал, без него обойтись.

Сначала сохраним нашу программу в виде файла svetofor-rpi.py3 в корневом каталоге пользователя /home/pi .

Теперь запустим терминал и после приглашения pi@raspberrypi:~ $ наберем следующую строку: gksudo leafpad /etc/xdg/autostart/Svetofor.desktop .

Тем самым мы вызовем текстовый редактор leafpad и создадим файл Svetofor.desktop в папке автозапуска.

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


Version=1.0
Encoding=UTF-8
Name=Svetofor
Comment=
Exec=sudo python /home/pi/svetofor-rpi.py3
Terminal=false
Type=Application

и сохраняем файл.

Основное в этом файле - строка, начинающаяся с Exec , которая запускает интерпретатор Python на выполнение программы svetofor-rpi.py3 .

Можно проверить, зайдя в папку /etc/xdg/autostart с помощью файлового менеджера, чья иконка в виде двух ящичков расположена в левом углу экрана, появился ли в этой папке файл Svetofor.

Теперь, если выключить питание, отключить монитор, мышь и клавиатуру, и снова включить питание, наш светофор начнет работать в автономном режиме!

Видео работы светофора:

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

В чем подвох?

На первый взгляд задача кажется тривиальной: скачиваем keil, создаем проект… Но все не так просто. Все среды программирования(keil, IAR, Atolic) поддерживают максимум ARM9.У нас же ARM11. Это связано с негласным правилом, что на голом железе пишут до ARM9, а после на Линуксе. Но все-таки есть одна лазейка: arm-none-eabi-gcc поддерживает любой ARM.
Вторая проблема заключается в том, что под данный процессор(BCM2835) нет никаких конфигурационных файлов, header"ов и т.д. Здесь нам на помощь придет загрузчик Raspberry Pi. И ничего, что он пропритетарный. Он выполняет две функции: инициализирует процессор и его периферию, а также передает управление ядру kernel.img. Мы просто замаскируем свою программу под ядро и загрузчик её запустит.

Что нам понадобится?

1) Сама Raspberry Pi, карта памяти к ней и питание.
2) Даташит на процессор
3) Компьютер с установленным Linux (но может быть можно и на Винде. Не знаю, не пробовал).
4) Кросскомпилятор, установленный на компьютере из пункта 3. Я использую arm-none-eabi-gcc
5) Содержимое этой папочки.

Приготовления.

Нам нужно отформатировать карту памяти в FAT16 и закинуть на нее содержимое этой папки . Это загрузчик плюс ядро. Затем удаляем оттуда файлы kernel.img и kernel_emergency.img. Это ядро Linux, а оно нам не нужно.

Первая программа.

Теперь мы можем приступить к написанию первой программы. Создаем файл main.c и пишем следующий код
int main (void) { while(1) { } } void exit (void) { while(1) { } }
Как видите, эта программа ничего не делает. Функция exit зачем-то нужна компилятору.
Теперь соберем её.
arm-none-eabi-gcc -O2 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles main.c -o kernel.elf
arm-none-eabi-objcopy kernel.elf -O binary kernel.img

Полученный файл kernel.img кидаем на карту памяти. Готово!

GPIO

Вряд ли Вас устроит программа, которая не будет делать абсолютно ничего. Сейчас попробуем зажечь лампочку.
Для начала объявим адрес, по которому лежит GPIO(это можно прочитать в даташите).
#define GPIO_BASE 0x20200000UL

И объявим переменную, которая определяют, что порт настроен на выход (GPIO_GPFSEL1) и переменную, подающую низкий уровень(то есть лампочка горит) на порт (GPIO_GPCLR0).
#define GPIO_GPFSEL1 1
#define GPIO_GPCLR0 10

Ну и наконец модифицируем главную функцию для зажигания лампочки:
volatile unsigned int* gpio; int main(void) { gpio = (unsigned int*)GPIO_BASE; gpio |= (1 << 16); gpio = (1 << 16); while(1) { } }

Собираем, прошиваем и радуемся.

В следующей части попробуем поиграться с таймерами и прерываниями.

Что делать, когда нечего делать?
Попробовать что-нибудь новое!

Если вы приобрели Raspberry Pi просто ради любопытства, не отдавая себе отчёта в том, для чего он конкретно вам нужен, то наверняка с каждым днём вам становится всё труднее найти для него
применение. Вы уже с ним вдоволь наигрались. Попробовали установку разных операционных систем, послушали музыку, посмотрели видео, попробовали поиграть и порисовать… И наверняка с огорчением для себя сделали вывод - «Всё ж таки Raspberry Pi мало годится для использования в качестве настольного компьютера». Слишком он уж медленный и задумчивый, по сравнению с обычным компьютером. И вроде бы ничего серьезного с ним сделать нельзя. Остаётся лишь найти ему применение в качестве либо медиацентра, либо простенького интернет-сервера, который не страшно
оставлять включённым круглые сутки…
Но всё ж таки Raspberry Pi может делать одну вещь гораздо более эффективнее, чем любой домашний компьютер- он может управлять внешними устройствами. Устройства могут быть абсолютно любыми, от обычной лампочки, до беспилотного летательного аппарата. В данном случае, область применения Raspberry ограничена лишь вашей фантазией и знаниями. И если вы никогда и ничего подобного не делали, но это вас заинтересовало, то эта статья для вас. И так, начнём.
Чтобы общаться с любыми внешними устройствами и управлять ими, Raspberry Pi имеет на борту интерфейс, называемый GPIO . Это аббревиатура от General Purpose Input Output . А по-русски, это низкоуровневый интерфейс ввода-вывода прямого управления. На плате Raspberry он находится в углу, в виде гребёнки из 26 штырьков, рядом с видеовыходом. Т.е.
через этот интерфейс Raspberry может слушать и отдавать команды любому внешнему устройству, например беспилотнику. Но сегодня мы беспилотник строить не будем, начнём с обычной лампочки, а точнее светодиода, который и исполнит роль подопытной лампочки. Наша задача- заставить светодиод, подключённый к Raspberry включаться и выключаться по его команде. Кроме того, дабы убедиться, что эти включения происходят вполне осознано и так, как мы этого хотим, а не благодаря каким-то глюкам в недрах процессора, мы привнесём в нашу программу элемент
общения с нами. Т.е. отстроим чёткую иерархию- Raspberry управляет светодиодом,
а самим Raspberry управляем мы. Теперь надо подготовиться и раздобыть где-то
несколько вещей. Во-первых, нужно найти светодиод :

Его можно достать из старой сломанной игрушки, из зажигалки с фонариком, попросить у знакомого радиоэлектронщика, в конце концов, просто купить.
Во-вторых, понадобятся проводочки любые и парочка коннекторов BLS :


Такие коннекторы можно вытащить из старого системного блока вместе с проводами, или попросить у знакомого компьютерщика, или тоже купить. Они прекрасно подходят для подключения к разъёму на Raspberry. Начнём с планирования используемых портов. Порт- это грубо говоря штырёк на разъёме. Так, как штырьков там много (26), то и портов тоже много. А чтобы в них не
запутаться, то каждому порту присвоен свой номер и обозначение. Следует заметить, что не все штырьки в этом разъёме являются портами. Некоторые штырьки
подключены к источникам напряжения, а некоторые вообще никуда не подключены (По секрету, на самом деле они всё-же подключены, но ими пользоваться нельзя, можно
убить свою Малинку. Поэтому лучше вобще их не трогайте).
Вот собственно как
эти порты расположены на плате:

Чтобы светодиод зажёгся, нам нужно его подключить к источнику питания. Выбираем для питания светодиода Р1-01 , верхний по рисунку штырёк, на котором присутствует
напряжение 3,3в. Для управления светодиодом нам понадобится один порт GPIO. Можно выбрать любой. Но если у вас есть разъём BLS, то удобнее в данном случае использовать порт, который выведен на штырёк P1-03 и называется GPIO 0 . В таком случае мы, воспользовавшись одним разъёмом, сможем подключить наш светодиод. И так, мы будем подключать светодиод между ножками разъёма P1-01 и Р1-03 . С вывода Р1-01 мы берём +3,3в для питания светодиода, а вывод Р1-03 будет тем самым управляющим выводом порта GPIO. Все эти порты физически находятся внутри центрального процессора Raspberry Pi, который называется BCM2835. Этот процессор может подключать любой порт к источнику напряжения 3,3в, а может подключить порт к 0 питания (а может вообще никуда не подключать, но об этом позже). Эти переключения он делает в соответствии с поданной командой. Значит, когда порт будет подключён к напряжению +3,3в, наш светодиод гореть не будет, т.к. току некуда идти. А когда процессор подключит порт к 0, то наш светодиод загорится, т.к. ток побежит от +3,3в к 0 через светодиод. Значит наша программа должна будет отдавать соответствующие команды процессору в соответствии с нашим желанием.
Маленькое, но важное
отступление.
На самом деле, мы не должны подключать светодиод напрямую между источником питания +3,3в и выводом порта. Это нельзя делать по двум причинам. Причина первая: любой светодиод нормально работает при определённом токе. Если через светодиод потечёт большой ток (а выход +3,3в способен отдать до 50мА), то светодиод сгорит. Если маленький ток, то светодиод будет гореть слишком слабо, либо вообще не будет светиться. Для большинства обычных светодиодов рабочий ток находится в пределах 10-20мА. Отсюда вытекает и вторая причина (хотя в данном случае она несущественна). Если мы пропустим большой ток через порт GPIO, то этим самым мы уничтожим процессор и Raspberry- умрёт. Поэтому, мы должны следить, чтобы через порт не протекал ток больше допустимого. Примем для себя ограничение в 16мА, так мы точно не сожжем процессор. Как этого добиться? Очень просто! Нам нужно последовательно со светодиодом
включить токоограничивающий резистор. И сейчас мы его рассчитаем.
Примем для светодиода рабочий ток в 10мА. Убеждаемся в том, что выбранный нами ток не превышает предельно допустимый ток для порта в 16мА. Теперь зная напряжение питания 3,3в и рабочий ток 10мА, мы можем по закону Ома рассчитать необходимое нам сопротивление. R=U/I=3,3/0,01=330Ом . Значит нам нужно найти резистор с сопротивлением 330Ом. А точнее- сопротивлением не менее 330Ом. Больше- можно. Светодиод будет заметно светиться и при сопротивлении 1000 Ом, или 1кОм. В общем наша задача- найти резистор с
сопротивлением от 330 Ом до 1кОм. Если вы его нашли, то можно собрать вот такую схему:


Схему лучше собрать на макетной плате. Лично мне, для экспериментов, мой сын дал на прокат свой конструктор «Знаток».
Так выглядит схема в сборе:

Так мы подключаемся к Raspberry:

А вот общий план всей конструкции:

В крайнем случае, можно просто скрутить выводы элементов. Но в этом случае нужно следить за тем, чтобы оголённые ножки элементов случайно не попали на контактные площадки Raspberry. Это может убить его. Так же стоит обратить внимание на то, что светодиод должен подключаться Анодом к + источника питания, т.е. в нашем случае это Р1-01 . Как найти на светодиоде Анод? Очень просто! Достаньте из любого ДУ батарейку на 1,5В и подключите к ней ваш светодиод. Если он не зажёгся, поменяйте выводы местами. Если зажёгся- то на + батарейки и будет Анод светодиода.

Если вы собрали схему, то отложите пока её в сторонку. Теперь мы займёмся второй частью задачи - написанием программы управления светодиодом. Писать эту программу мы будем на языке Си.
Почему на именно на Си? Просто по тому, что я других языков не знаю, а раз вы читаете эту статью, то скорее всего вы тоже немного знаете о программировании и радиоэлектронике, а значит, вам всё равно с какого языка начинать.
Обычно изучение языков программирования начинают с написания программы «Hello World!», но мы же круче «тех» чайников, поэтому мы начнём сразу с низкоуровневой работы с периферией. Тем более, что это не намного сложнее ХеллоуВорлда. ;) Что для этого нужно? Нужен любой текстовый редактор, в котором мы будем набирать программу. В Raspbian есть отлично подходящий для этого редактор “nano ”. Ещё нужен компилятор, это программа, которая осуществляет перевод написанной нами программы с человечески понятного языка на язык, понятный компьютеру. Т.е. делает из нашей программы исполняемый файл, который мы впоследствии и запустим на Raspberry. Эта штука тоже у нас есть, называется gcc . Этот компилятор поставляется в комплекте со всеми Линуксами и уже готов к работе.
Как видите,всё необходимое у нас уже есть. Хотя нет. Одной вещи все-таки у нас не хватает. Её мы возьмем из интернета. Речь идёт о библиотеке функций управления портами GPIO на Raspberry, специально написанно добрым человеком для того, чтобы наша программа по своей простоте могла бы соперничать с «Хеллоуворлдом» и нам самим бы не пришлось ломать голову, изучая техническую документацию на процессор и протоколы работы с его внутренностями. Сама библиотека состоит из заголовочного файла, в котором обозначены все имена функций со структурами переменных и файла библиотеки самих функций. Эту библиотеку нужно скачать и установить, чтобы компилятор мог с ней работать. Библиотека называется bcm2835-1.17 . Последние цифры в названии библиотеки, обозначают её версию. А так, как библиотека постоянно обновляется автором, то версии будут меняться. на сегодняшний день доступна версия 1.17. Узнать о номере последней версии можно по адресу: http://www.open.com.au/mikem/bcm2835/index.html По этой же ссылке вы можете ознакомиться со всеми функциями, которые присутствуют в этой библиотеке.
Мы же пока установим версию 1.17. Запускаем окно терминала и вводим
туда команду:
wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.17.tar.gz Библиотека быстренько скачивается. Чтобы её установить, нужно сначала её разархивировать. Это делается следующей командой:
tar zxvf bcm2835-1.17.tar.gz
Теперь перейдём в директорию, куда эта библиотека развернулась:
cd bcm2835-1.17
Ну и инсталлируем её:
./configure make
sudo make check
sudo make install
Всё, теперь эта библиотека у нас есть в наличии, она установлена, и мы, и компилятор можем ей пользоваться в своих интересах. Начинаем писать программу. Возвращаемся в домашнюю директорию:cd ..
Тут можно создать папочку для наших экспериментов с любым именем, например myprog:
mkdir myprog
Перейдём в эту папку:
cd myprog И начинаем писать нашу программу:nanoGPIO-test.c
Эта команда запускает текстовый редактор nano , который создаёт текстовый файл GPIO-test.c .Теперь можете набрать в нём следующую программу
(можно просто скопировать и вставить):

//GPIO-test.c
// Программа включает на 1 секунду светодиод,
// подключённый к порту Р1_03
// Компиляция командой gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835

#include

#define PIN RPI_GPIO_P1_03 // Для RPi ревизии v1
//#define PIN RPI_V2_GPIO_P1_03 // Для RPi ревизии v2

Int main()
{
if (!bcm2835_init()) // Инициализация GPIO
return 1; //Завершение программы, если инициализация не удалась

Bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //Устанавливаем порт Р1_03 на вывод
bcm2835_gpio_write(PIN, LOW); // Устанавливаем порт в 0, светодиод горит
bcm2835_delay(1000); // Ждём 1000 милисекунд
bcm2835_gpio_write(PIN, HIGH); // Устанавливаем порт в 1, светодиод не горит
return 0; // Выход из программы
}

Обратите внимание на строки #define. Их в программе 2 и одна из них закомментирована. Одна строка для ревизии RPi v1, вторая для RPi v2.
Если у вас v1, то всё оставьте как есть. Если у вас RPi v2, то первую строку с #define удалите, а со второй уберите символ комментария //. В будущем, во всех остальных программах, просто добавляйте _V2_ между RPI и GPIO в определении портов, если ваша плата RPi v2.
Сохраняем нашу программу ctrl-o и выходим из текстового редактора ctrl-x . Теперь, если вы введёте команду ls , то увидите только что созданный файл GPIO-test.c. Чтобы этот файл превратился в работающую программу, его нужно скомпилировать. Пишем: gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835 в этой строке: gcc- это имя компилятора; -o GPIO-test GPIO-test.c эта команда компилятору говорит о том, что требуется создать исполняемый файл с именем GPIO-test из текстового файла GPIO-test.c; -l (латинская л маленькая) bcm2835 говорит компилятору о том, что все неизвестные ему функции в нашей программе, он может найти в установленной библиотеке bcm2835. Если компилятор не выдал никаких сообщений, то значит, всё у нас получилось. Если сейчас дать команду ls , то мы увидим, что в директории появился ещё один файл GPIO-test, причём он отмечен зелёным цветом. Это говорит о том, что файл является
исполняемой программой. Осталось нам его запустить, но перед этим ещё раз проверяем нашу схему со светодиодом, чтобы всё было собрано правильно и подключено к контактам Р1_01 и Р1_03 разъёма GPIO. Если ошибок не обнаружено, запускаем программу: sudo ./GPIO-test После этого светодиод должен загореться
ровно на 1 секунду и погаснуть. Если всё так и произошло, то я вас поздравляю! Вы только что при помощи Raspberry Pi передали через порт GPIO команды светодиоду: включиться, гореть 1 секунду и выключиться.
Теперь о том, что делает каждая строка в нашей программе.
Все надписи после двойного слеша // являются коментариями и никак не влияют на выполнение программы.

#include -эта строка говорит компилятору, что в программе используется заголовочный файл bcm2835.h. В этом файле находятся все описания функций и идентификаторы портов GPIO.

>#define PIN RPI_GPIO_P1_03 - здесь мы говорим компилятору, что везде в программе, где он увидит идентификатор PIN, ему нужно выполнить замену его на идентификатор RPI_GPIO_P1_03 . Это сделано для того, чтобы мы могли при желании быстро изменить номер подключаемого порта. Для этого достаточно изменить только эту строку, а не выискивать по всей программе, где мы этот идентификатор использовали.

int main() это начало нашей программы, обозначение главной функции в Си.

if (!bcm2835_init()) - эта часть пытается инициализировать GPIO и если это не получилось,
return 1; то аварийно завершает программу и передаёт на выходе код 1.

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); - Эта функция устанавливает для нашего порта Р1_03 режим на вывод. Т.е. говорит процессору, что этот порт будет использован для управления внешним устройством.
bcm2835_gpio_write(PIN, LOW); - устанавливаем порт Р1_03 в низкое состояние, т.е. процессор его подключает к 0. После этого светодиод загорается.

bcm2835_delay(1000); - Эта функция просто ждёт 1000 милисекунд, или ровно 1 секунду. Всё это время у нас горит светодиод.

bcm2835_gpio_write(PIN, HIGH); - устанавливаем порт Р1_03 в высокое состояние, т.е. процессор его подключает к +3,3в. При этом светодиод гаснет.

B>return 0; - Выход из программы с кодом 0.

Т.е. алгоритм работы с портом GPIO в режиме записи, т.е. вывода, выглядит следующим образом:
1. Инициализируем GPIO;2. Устанавливаем режим для выбранного порта на Вывод;
3. Теперь можем управлять этим портом, устанавливая его в высокое, или низкое состояние. Соответственно на этом порте будет пристутствовать либо +3,3В, либо 0В. Что соответствует логической 1 и логическому 0 соответственно.

На этом на сегодня закончим. В следующей части научим наш светодиод загораться более полезным образом, а так же научимся портами GPIO не только отдавать команды другим устройством, но и слушать их.А пока можете начинать изучать язык Си. А так же попробуйте изменить эту программу так, чтобы светдиод управлялся бы другим портом и испытайте её.