sonyps4.ru

Система управления умным домом на основе Raspberry Pi.

Напоминаем, что попытки повторить действия автора могут привести к потере гарантии на оборудование и даже к выходу его из строя. Материал приведен исключительно в ознакомительных целях. Если же вы собираетесь воспроизводить действия, описанные ниже, настоятельно советуем внимательно прочитать статью до конца хотя бы один раз. Редакция 3DNews не несет никакой ответственности за любые возможные последствия.

Стыдно признаться, но Raspberry Pi мы заполучили больше года назад и да, не написали тогда про него ни строчки, хотя и трёхмесячное ожидание было томительным, и радость от получения посылки из Туманного Альбиона была искренней. Оно, наверное, и к лучшему. За год вокруг Raspberry Pi образовалось приличных размеров сообщество пользователей, разработчиков и компаний, которые явили миру немалое количество аксессуаров, проектов и программного обеспечения. Да и сам одноплатный компьютер успел претерпеть некоторые изменения в аппаратной части — в новых версиях убрали ряд недочётов и в два раза увеличили объём RAM у модели B.

История Raspberry Pi

Вообще история развития и появления Raspberry Pi не так проста. Первый прототип этого устройства появился в году. Уже тогда он должен был стоить $25 и предназначался для обучения школьников азам компьютерных премудростей — тому, что в англоязычной литературе принято называть Computer Science (CS), а у нас не совсем корректно зовётся информатикой (о терминологии спорят до сих пор). Основателям проекта — сотрудникам и преподавателям Компьютерной лаборатории Кембриджского университета — не нравился тот факт, что с каждым годом уровень подготовки абитуриентов неуклонно снижался. Если в 90-е годы к ним, как правило, приходили учиться молодые люди, не понаслышке знакомые с программированием, то в 2000-х типичный абитуриент был разве что немного знаком с веб-дизайном.

Сожаление разработчиков Raspberry Pi понятно, ведь их молодость пришлась как раз на время появления и расцвета первых по-настоящему домашних «персоналок» Amiga, BBC Micro, Spectrum ZX и Commodore 64. Пользователи этих ПК порой попросту вынуждены были заниматься программированием, если не находили подходящего софта для своих задач. Причём нередко надо было не просто уметь писать код, но и хорошо понимать принципы работы железной составляющей, умело обходить имеющиеся ограничения и различными ухищрениями добиваться максимальной производительности своего творения. Самые продвинутые брали в руки паяльник, ведь периферии поначалу тоже было немного. А для некоторых это и вовсе стало поводом открыть свой «свечной заводик».

Впрочем, все мы знаем, что в 90-х произошло с платформой Wintel, которая стала фактически монополистом на рынке ПК и в итоге избавила пользователей от необходимости осваивать программирование. В школах тоже решили переключиться на изучение основ работы с одним известным офисным пакетом и создание простеньких HTML-страничек. Потом лопнул пузырь доткомов, стали массово распространяться игровые приставки и персональные компьютеры. В общем, жизнь простых пользователей заметно упростилась, а ряды энтузиастов заметно поредели. Такая ситуация не устраивала преподавателей — и они загорелись идеей создания платформы, которая возродила бы интерес к самостоятельному изучению этой темы. Так ли уж всё печально, однозначно сказать трудно, но вдохновлялись создатели историей некогда легендарного учебного компьютера BBC Micro , не рассчитывая, впрочем, коренным образом изменить ситуацию с интересом к Computer Science.

Параллелей между Raspberry Pi и BBC Micro не так уж мало. Оба имеют две аппаратные, незначительно различающиеся версии — Model A и Model B. Оба основаны на RISC-подобной архитектуре, причём железо в обоих случаях используется оптимальное, хотя и не самое продвинутое. RISC OS тоже не забыли портировать. Задача у них одна и та же — заинтересовать подрастающее поколение компьютерными технологиями на достаточно продвинутом уровне. BBC Micro планировалось продать не более 12 тысяч штук, а за 10 с лишним лет в итоге было продано около полутора миллионов. Пробная партия Raspberry Pi объёмом 10 000 экземпляров разошлась за несколько минут, причём поначалу действовало правило «одна штука в одни руки». Представитель одного из двух официальных дистрибьюторов «сердечно» попросил пользователей перестать обновлять страничку онлайн-магазина, так как сервера попросту не справлялись с нагрузкой. Год спустя, во время старта продаж в США история повторилась . На текущий момент, то есть почти через полтора года после запуска, продано более полутора миллионов устройств, и это, похоже, не предел.

Скоро сказка сказывается, да не скоро дело делается. Ещё пара лет после появления первого прототипа ушла на создание различных вариантов ПК, пока в 2008 году не стало ясно, что процессоры для мобильных устройств стали доступными и достаточно мощными для работы с медиаконтентом и именно их, а не микроконтроллеры, следует использовать для претворения идеи в жизнь. В 2009 году была создана благотворительная организация Raspberry Pi Foundation, в задачи которой входит разработка и продвижение одноимённого компьютера. Два года потребовалось на создание аппаратной и программной части будущего устройства, заключение договоров и соблюдение прочих формальностей. В какой-то момент даже была идея сделать мини-ПК в виде большой флешки - с одной стороны USB-порт, а c другой HDMI-выход. Подобные устройства с Android на борту сейчас в огромных количествах клепают китайские компании. Наконец, в 2011 году появились первые альфа- и бета-версии плат. И только в начале прошлого года первая партия Raspberry Pi отправилась на сборочный конвейер, а до заказчиков она добралась ближе к лету, потому что китайский подрядчик умудрился ошибиться при сборке, что вызвало дополнительные затраты времени на исправление ошибки.

Заметьте, Raspberry Pi — по сути некоммерческий проект. Так что нет ничего удивительного в том, что на его разработку ушло столько лет. Одновременно это ответ на недовольные возгласы в духе «А почему процессор такой, а не такой-то? Где мой гигабайт памяти? Нельзя что ли было добавить поддержку SATA? Почему нет модуля Wi-Fi/3G/Bluetooth?». Помилуйте, вам за $25 (или $35) предоставили добротную машинку для домашних экспериментов и «наколенных» проектов. В конце концов, новичку проще разобраться с Raspberry Pi, чем с микроконтроллерами; он намного удобнее и функциональнее плат мини-роутеров, которые нередко используются в исследовательских задачах ; его цена заметно ниже, чем у всех остальных одноплатных решений , пусть и более функциональных. Получается, что конкурентов у Raspberry Pi пока что нет. Ну что же, мы подробно рассказали об истории создания этого проекта, но до сих пор ни разу не обмолвились о том, что он собой представляет, что с ним можно сделать и какие у него недостатки.

⇡ Технические характеристики и возможности

Raspberry Pi называют одноплатным компьютером размером с кредитную карту. На самом деле сама плата чуть крупнее — 85,6x56x21 мм — и не имеет скруглённых краёв, к тому же некоторые порты попросту торчат снаружи, не говоря уж про карту SD, которая более чем на половину выпирает за пределы платы. Решить эту проблему могут «короткие» адаптеры для micro-SD. Весит устройство всего 54 грамма. Raspberry Pi выпускается в двух версиях — Model A и Model B. У Model A нет порта Ethernet, один порт USB 2.0 и 256 Мбайт RAM, а стоит она $25. Model B оснащена портом Ethernet 10/100 Мбит/с, двумя портами USB 2.0, объём оперативной памяти у неё в два раза больше. Всё это удовольствие продаётся уже за $35. Только учтите, что это «чистая» цена, без учёта возможных налогов и расходов на доставку. Нам, к примеру, приобретение Model B обошлось чуть ли не два раза дороже. Также при покупке стоит обратить внимание на маркировку SoC. Номер партии для «старых» версий Model B с 256 Мбайт RAM начинается с K4P2G, а у ревизии с 512 Мбайт памяти — с K4P4G.

Схема Raspberry Pi Model с www.raspberrypi.org

По идее, начиная с этого года все Raspberry Pi Model B должны иметь полгигабайта RAM, но на складах перекупщиков вполне могли заваляться более ранние модели. Лицензией на производство плат обладают компании Premier Farnell, RS Components и Egoman. Причём последняя выпускает платы красного цвета, которые могут предлагаться только на китайских территориях. К первой годовщине проекта RS Components выпустили юбилейную партию плат синего цвета объёмом 1000 штук. Эти же компании имеют право продавать Raspberry Pi, а в США распространением занимается Allied Electronics. Так что все остальные магазины попросту закупают большие партии устройств у этой четвёрки и перепродают конечным потребителям. Обе модели плат от разных производителей (сборкой занимаются заводы Sony, Qisda и Egoman), имеют некоторые несущественные различия , но по большому счёту они идентичны.

Основой Raspberry Pi является система-на-кристалле, Broadcom BCM2835 (линейка BCM2708), которая включает процессорное ядро ARM11 с базовой частотой 700 МГц (возможен разгон до 1 ГГц) и графическое ядро Broadcom VideoCore IV. Из-за того, что использована ныне слегка устаревшая архитектура ARMv6, ряд дистрибутивов не поддерживают данный процессор. К ним относится, например, Ubuntu. Про Android тоже нельзя сказать, что он хорошо работает. С другой стороны, разработчики приложили максимум усилий для того, чтобы как следует подготовить ОС к работе на данном железе, чего, кстати говоря, не скажешь о многих других одноплатных ARM-компьютерах. GPU поддерживает стандарты OpenGL ES 1.1/2.0, OpenVG 1.1, Open EGL, OpenMAX и способен кодировать, декодировать и выводить Full HD-видео (1080p, 30 FPS, H.264 High-Profile). Для аппаратного ускорения MPEG-2 и VC-1 лицензии придётся докупать отдельно, и это ещё один повод напомнить, что стоимость лицензий и патентных отчислений вносит далеко не самую маленькую лепту в конечную цену почти любого высокотехнологичного устройства.

Чип памяти производства Samsung или Hynix напаян прямо поверх основного чипсета, так что увеличить RAM самостоятельно не получится. Память здесь общая, поэтому пользователь сам выбирает, сколько мегабайт отдать GPU. Видеовыходов два — композитный RCA (576i или 480i, PAL-BGHID/PAL-M/PAL-N/NTSC/NTSC-J) и HDMI 1.3a с поддержкой HDCP и протокола CEC (управление с одного ПДУ всеми мультимедийными устройствами). Так что для создания простенького медиацентра Raspberry Pi вполне подойдёт, а наличие готового решения Raspbmc значительно упрощает задачу. Выбор именно таких видеовыходов объясняется очень просто — компьютер, как в давние времена, рассчитан на подключение к телевизору, а не к мониторам. Поэтому нет, например, разъёма DVI. Ну и ладно, переходник с HDMI можно купить самому. (Сами видите, столько всего ещё можно или даже нужно докупить к этой плате ) Звук либо передаётся через HDMI, либо выводится через обычное 3,5-мм гнездо.

Встроенное устройство для чтения карт памяти гарантированно работает с большинством SD-карт объёмом до 32 Гбайт. Загружаться Raspberry Pi умеет только с карточек SD. Если точнее, то сама ОС может располагаться на USB-накопителе, но вот загрузчик всегда должен быть на SD. Кнопок включения и сброса нет — устройство само включается при подаче питания. Питается Raspberry Pi от порта micro-USB или с пары выделенных выводов GPIO. Для Model A рекомендуется источник на 5 В и 500-700 мА, а для Model B на 5 В и 700-1200 мА. То есть порта USB 3.0 или зарядного устройства для телефона должно хватить, хотя лучше подобрать более стабильный источник питания. Сами платы потребляют чуть меньше, но часть энергии требуется для работы подключенных к USB-портам устройствам. Альтернативный вариант — питание от подключенного к плате USB-хаба с отдельным БП или аккумуляторов, но это не самое лучшее решение. Кстати, контроллер Ethernet в Model B тоже «висит» на шине USB. Индикация минимальная — на плате распаяно пять светодиодов. Три из них указывают на активность и режим работы Ethernet, а ещё два сигнализируют о наличии питания и работе с SD-картой.

А теперь — самое интересное: набор низкоуровневых интерфейсов, которые позволяют подключать к Raspberry Pi платы расширения, внешние контроллеры, датчики и прочие аксессуары. Во-первых, на плате есть 15-пиновые слоты CSI -2 для подключения камеры и DSI для установки дисплея. Во-вторых, имеется колодка на 26 линий ввода-вывода общего назначения (GPIO, General Purpose Input/Output), из которых по факту для управления доступно только 17 — не густо, но и не пусто. На них же реализованы интерфейсы UART, консольный порт, SPI и I²C. На новых ревизиях плат разведены, но не распаяны ещё четыре GPIO, дополнительно дающие I²C и I²S. Если вам не знакомы все эти аббревиатуры, то не пугайтесь — это названия широко распространённых в микроэлектронике стандартов подключения одних устройств к другим. Использование GPIO — это как раз самое интересное и творческое применение Raspberry Pi.

Впрочем, недостатков у него тоже хватает. В нём, к примеру, нет собственных часов реального времени (Real Time Clock, RTC). Тех самых, которые «помнят» текущее время и идут сами по себе. Поэтому единственный способ получения времени - это синхронизация с NTP-серверами. SoC содержит в себе цифровой сигнальный процессор (DSP), но полного доступа к его API, по-видимому, до сих пор нет. Выводы GPIO никак не защищены от короткого замыкания, поэтому ошибка в монтаже может сгубить весь мини-ПК. Также они способны обрабатывать только цифровые сигналы. Видеовыходы не могут одновременно выводить картинку. Аудиовхода вообще нет. В общем, недостатков у Raspberry Pi хватает. А ещё его пример хорошо иллюстрирует процесс разработки современных устройств. Взять те же часы. Они оказались на удивление дорогим компонентом, от которого решено было отказаться. При этом разработка устройства происходила на добровольных началах, то есть никто за неё не платил. Стоимость компонентов снижается при увеличении заказа, а первую партию в 10000 штук совсем уж серьёзной не назовёшь. Сборка, доставка, налоги, пошлины, лицензии и так далее — всё это требует денег. Да и дистрибьюторы тоже хотят получить свою копеечку. И всё равно в итоге удалось уложиться в $25.

Одноплатный мини-ПК Raspberry Pi
Model A Model B
Цена $25 $35
System-on-a-chip (SoC) Broadcom BCM2835 (CPU + GPU)
CPU 700 МГц ARM11 (ядро ARM1176JZF-S), возможен разгон до 1 ГГц
GPU Broadcom VideoCore IV
Стандарты OpenGL ES 1.1/2.0, OpenVG 1.1, Open EGL, OpenMAX
Аппаратные кодеки H.264 (1080p30, high-profile);
MPEG-2 и VC-1 (лицензия продаётся отдельно)
Память (SDRAM, общая) 256 Мбайт 512 Мбайт;
256 Мбайт (до 15.10.2012)
Порты USB 2.0 1 2
Видеовыход 1 x HDMI 1.3a (CEC),
1 x RCA (576i/480i, PAL-BGHID/M/N,NTSC, NTSC-J)
Аудиовыход Гнездо 3,5 мм, HDMI
Карт-ридер SD/MMC/SDIO
Сеть - Ethernet-порт RJ45 10/100 Мбит/с
Интерфейсы 20 x GPIO (SPI, I 2 C, UART, TTL);
MIPI CSI-2, MIPI DSI
Энергопотребление 500 мА (2,5 Вт) 700 мА (3,5 Вт)
Питание 5 В через порт micro-USB или GPIO
Размеры 85,6x56x21 мм
Масса 54 г

Неудивительно, что некоторые пользователи скупают Raspberry Pi пачками и «прикручивают» к чему попало. Эта машинка может стать в ваших руках и медиацентром, и управляющим центром «умного дома», и игровой приставкой для любителей 8-битной классики , и сердцем радиоуправляемых моделей. Тут уж всё зависит от вашей фантазии, желания и прямоты рук. В Сети есть немало примеров, готовых проектов, сообществ пользователей и целых магазинов, посвящённых Raspberry Pi. Есть даже официальный очень-очень скромный The Pi Store с небольшим количеством ПО, игр, руководств и собственным журналом. Короче: «Ищущий да обрящет!» Для начала рекомендуем пролистать списки проектов на официальном форуме или же ознакомиться с наглядными примерами от Adafruit и Element14 . Ну а мы переходим ко второй части нашего обзора — практической, в которой рассмотрим процесс начальной настройки Raspberry Pi и установим на него клиент BitTorrent Sync.

Рисунок 1. Блочная диаграмма аппаратной части системы

Описание процесса монтажа аппаратной части системы занимает много времени, но является достаточно простым. В первую очередь следует соединить блок питания с стенной розеткой с помощью удлинителя, отрезав розетку это удлинителя. Зачистите провода и закрепите их с помощью винтов в терминалах блока питания. Далее соедините Raspberry Pi с блоком питания, отрезав разъем типа A от кабеля USB и соединив провода с соответствующими выводами блока питания, и вставьте разъем micro USB в разъем питания RPi. После этого следует зачистить оба конца двух жил гибкого кабеля и соединить их с соответствующими терминалами с обозначениями GND и JDVcc блока питания и блока реле. Наконец, следует удалить джампер, соединяющий вывод с обозначением JDVcc с выводом с обозначением Vcc. В том случае, если вы не удалите этот дампер, на предназначенные для напряжения 3.3 В выводы RPi будет подано напряжение в 5 В, которое с высокой вероятностью выведет компьютер из строя.

Теперь, когда питание подведено ко всем терминалам, следует соединить линии IN1-IN8 модуля реле с соответствующими выводами разъема GPIO с помощью гибкого кабеля таким образом, как показано на Рисунке 2. Представленный в данной статье код был разработан для случая, когда выводы IN1-IN7 соединены с выводами GPIO1-GPIO7. В том случае, если вы решите соединить данные выводы по-другому, вам придется модифицировать соответствующим образом ваш код.

Схема расположения выводов разъема GPIO Raspberry Pi приведена на Рисунке 2. На порты ввода-вывода Raspberry Pi подается напряжение 3.3 В, а модуль реле работает с напряжением 5 В. Однако, реле изолированы от выводов GPIO Raspberry Pi при помощи оптопар. На оптопары может подаваться напряжение 3.3 В с вывода Vcc. На вывод Vcc модуля реле может быть подано напряжение 3.3 В с разъема GPIO Raspberry Pi. Убедитесь в том, что вы убрали джампер, замыкающий выводы Vcc и JDVcc модуля реле. На вывод JDVcc должно подаваться напряжение 5 В для корректной работы реле. Рассматриваемый модуль реле размыкает контакты в активном состоянии. Из этого следует, что вы должны заземлить терминалы IN1-IN8 для включения реле.

Рисунок 2. Схема расположения выводов разъема GPIO Raspberry Pi

Предупреждение: проявляйте особую осторожность при соединении аппаратных компонентов системы. Последствия поражения электрическим током могут оказаться фатальными!

Обрежьте остатки кабелей удлинителей с вилками и закрепите провода в соответствующих терминалах модуля реле. Также подключите провода кабеля, который впоследствии будет связывать систему со стенной розеткой, к соответствующим терминалам модуля реле. Вся аппаратная часть системы может быть размещена в пенале или аналогичном контейнере. Подумайте о корпусе заранее, чтобы по окончании работы над аппаратной частью системы избежать необходимости в отсоединении и повторном присоединении проводов к терминалам модуля реле. Кроме того, я вставил несколько закрепляемых с помощью винтов зажимов для кабелей в соответствующие отверстия корпуса для ограничения натяжения кабелей (Рисунок 3).

Рисунок 3. Монтаж аппаратной части системы

Программное окружение

Я начал создание своего программного окружения с установки образа операционной системы Raspbian. Перед началом установки образа операционной системы вам потребуется подготовить дисплей, поддерживающий передачу изображения по HDMI, клавиатуру и мышь с разъемами USB, а также сетевой кабель для соединения с системой по протоколу Ethernet. Также вы можете установить соединение с системой посредством адаптера Wi-Fi. Создайте загрузочную SD-карту для первой загрузки системы в соответствии с инструкциями, приведенными на ресурсе http://www.raspberrypi.org/documentation/installation/installing-image . В процессе первой загрузки системы установщик осуществит настройку операционной системы и разместит данные из ее образа на всем доступном пространстве карты памяти. После первой загрузки вы должны иметь возможность входа в систему с помощью стандартных данных учетной записи пользователя (имя пользователя "pi" и пароль "raspberry").

Обновление системы является разумным действием, которое должно выполняться сразу же после успешного входа в систему. Образ операционной системы Raspbian базируется на пакетах программного обеспечения дистрибутива Debian и использует приложение aptitude в качестве менеджера пакетов программного обеспечения. Кроме того, вам понадобятся пакеты программного обеспечения с именами python , pip и git . Я также мог бы порекомендовать установку Webmin для упрощения процесса администрирования системы. Инструкции по установке Webmin приведены на ресурсе http://www.webmin.com/deb.html (следуйте рекомендациям, приведенным в разделе "Using the Webmin APT repository"):

Sudo apt-get update && sudo apt-get dist-upgrade sudo apt-get install python python-pip git git-core

После этого вам придется настроить соединение с использованием адаптера Wi-Fi. Вы можете найти подробные инструкции на ресурсе http://www.raspberrypi.org/documentation/configuration/wireless . Я рекомендую использовать вариант wicd-curses . На данном этапе вы можете изменить параметры настройки Raspberry Pi с помощью команды sudo raspi-config . После ввода данной команды вы получите доступ к удобному графическому интерфейсу, который позволит вам установить значения таких параметров, как объем оперативной памяти, разделяемой с графическим процессором, параметры быстродействия центрального процессора, режим использования графического интерфейса в процессе загрузки и других.

Другим полезным инструментом является интегрированная среда разработки Cloud 9 IDE . Cloud 9 IDE позволит вам редактировать свой код на уровне Raspberry Pi посредством веб-браузера. Данная интегрированная среда разработки также предоставит вам доступ к интерфейсу командной строки в рамках веб-браузера. Вы можете разрабатывать и исполнять любой код, не покидая свой веб-браузер. Интегрированная среда разработки Colud 9 IDE требует наличия определенной версии фреймворка NodeJS. Использование неподдерживаемой версии фреймворка повлечет за собой постоянные аварийные завершения работы сервера Cloud 9, которые могут привести любого пользователя в уныние. Инструкции по установке фреймворка NodeJS на компьютер Raspberry Pi приведены на ресурсе http://weworkweplay.com/play/raspberry-pi-nodejs .

Программное обеспечение

Я решил создавать пользовательский интерфейс своей системы с использованием технологий HTML5, CSS3 и JavaScript. Комбинация трех упомянутых технологий является мощным инструментом для создания пользовательских интерфейсов. Язык программирования JavaScript позволяет использовать простой API для взаимодействия с серверами. Кроме того, существует множество библиотек для языка программирования JavaScript, таких, как JQuery, Bootstrap и других, из которых можно выбрать наиболее подходящую. HTML5 предоставляет API WebSocket, позволяющее веб-браузеру поддерживать соединение в рабочем состоянии и осуществлять обмен данными посредством этого соединения. Это обстоятельство делает API WebSocket особенно полезным для реализации динамических приложений и приложений для потоковой передачи данных, таких, как игры и чаты. Каскадные таблицы стилей CSS полезны для стилизации различных элементов страницы HTML. В случае корректного использования они позволяют создавать динамические пользовательские интерфейсы путем изменения стилей элементов страниц при наступлении тех или иных событий. Для данного проекта я выбрал фреймворк JQuery для обработки событий, Bootstrap CSS для размещения кнопок в форме сетки и язык программирования JavaScript для реализации механизмов обмена данными на основе API WebSocket.

Библиотеки

Серверное приложение, работающее на уровне Raspberry Pi, должно управлять состоянием выводов разъема GPIO платы Raspberry Pi. Оно также должно предоставлять интерфейс HTTP для передачи данных графического интерфейса и интерфейс WebSocket для передачи сообщений с командами и данными состояния. Готового к установке серверного приложения с такими специфическими функциями попросту не существует, поэтому я принял решение о создании своей собственной реализации сервера с использованием языка программирования Python. Для упрощения разработки описанного серверного приложения с использованием языка программирования Python доступны модули с реализациями методов для работы с интерфейсом GPIO Raspberry Pi, для создания сервера HTTP и для работы с интерфейсом WebSockets. Так как все перечисленные модули предназначены для выполнения поставленных задач, мне пришлось разработать минимальный объем кода.

Однако, упомянутые модули не включены в комплект поставки интерпретатора Python и должны устанавливаться отдельно. В первую очередь вам понадобится модуль для управления состоянием выводов разъема GPIO Raspberry Pi. Простейший способ изменения состояния выводов данного разъема заключается в использовании библиотеки RPi.GPIO, доступной по адресу https://pypi.python.org/pypi/RPi.GPIO . Вы можете установить соответствующий модуль с помощью следующей команды:

Sudo pip install RPi.GPIO

Работа с модулем RPi.GPIO не связана с какими-либо сложностями. Вы можете найти примеры использования данного модуля по адресу . На первом шаге работы с модулем необходимо осуществить импорт его кода в код проекта. После этого вам придется выбрать режим работы. В качестве идентификатора режима работы может использоваться либо константа GPIO.BOARD, либо константа GPIO.BCM. Выбор режима работы обуславливает использование чипа BCM или выводов разъема ввода-вывода при ссылках на номера выводов во всех последующих командах. Далее следует указать, используются ли выводы из рассматриваемого разъема для ввода или вывода. Теперь вы можете использовать выводы данного разъема по назначению. Наконец, вам придется осуществить вызов метода cleanup() для сброса состояния выводов разъема GPIO. В Листинге 1 показан простейший пример использования модуля RPi.GPIO.

Листинг 1. Использование модуля RPi.GPIO

Import RPi.GPIO as GPIO # импортирование кода модуля в код проекта GPIO.setmode(GPIO.BOARD) # указание на то, что нумерация используется для обозначения выводов разъема GPIO.setup(0, GPIO.IN) # указание на то, что канал 0 будет использоваться для ввода GPIO.setup(1, GPIO.OUT) # указание на то, что канал 1 будет использоваться для вывода var1=GPIO.input(0) # чтение состояния канала 0 GPIO.output(1, GPIO.HIGH) # установка логической единицы на канале 1 GPIO.cleanup() # сброс состояния выводов разъема GPIO.

Raspberry PI - это устройство имеющее достаточную производительность для того чтобы на его основе могли быть построены роботы способные распознавать образы, выполнять работу людей и прочие подобные устройства для автоматизации и выполнения сложных вычислительных действий. Т.к. тактовая частота процессора Raspberry PI 3 м.б. 1.2 ГГц а его разрядность 32 бита то Raspberry PI 3 значительно превосходит обычное Arduino у которого тактовая частота как правило 16 МГц а разрядность микроконтроллера 8 бит, Arduino безусловно занимает своё место в выполнении операций не требующих большой производительности но когда её уже не хватает Raspberry PI "приходит на помощь" и перекрывает такой большой диапазон возможных применений что можно быть абсолютно уверенным в целесообразности приобретения данного одноплатного компьютера Raspberry PI 3 (можно заказать по ссылке) . Т.к. Raspberry PI - это компьютер то для того чтобы его использовать нужно на него установить операционную систему (хотя существуют обходные пути но всё же лучше и проще установить операционную систему (ос далее)). Существует много ос которые можно установить на Raspberry Pi но одной из самых популярных (для использования с Raspberry Pi), наиболее подходящих для начинающих является ос Raspbian. Для того чтобы установить ос на Raspberry Pi понадобиться micro sd карта с расширителем для того чтобы её можно было вставить в обычный компьютер и записать на неё ос. Sd карта должна иметь не менее 4Гб памяти при установке полной версии Raspbian и не менее 8Гб для установки минимальных версий Raspbian. Минимальные версии могут не иметь (и скорее всего не имеют) графического интерфейса и много всего остального что может считаться лишним и занимает место. Для избежания проблем с отсутствием необходимых файлов, можно поставить полную версию. Можно использовать SD карту 10го класса и с 32Гб памяти (проверено работает (как см. видео ниже)). После приобретения карты памяти её надо вставить в компьютер в соответствующий разъём, после этого посмотреть с какой буквой появился диск в разделе "мой компьютер" и запомнить, потом надо скачать ос с официального сайта https://www.raspberrypi.org/downloads/raspbian/ нажав кнопку "Download ZIP" под "RASPBIAN JESSIE" для скачивания полной версии или под "RASPBIAN JESSIE LITE" для скачивания облегчённой но, для начинающих, лучше выбрать "RASPBIAN JESSIE" т.е. полную версию. После скачивания архива "RASPBIAN JESSIE" его нужно разархивировать, потом скачать программу (или от сюда https://yadi.sk/d/SGGe1lMNs69YQ), установить её, открыть, далее нужно в правом верхнем углу указать букву диска (запомненную ранее), найти разархивированный образ ос

И нажать кнопку "write".

После чего выведется окно с предупреждением и в этом окне надо нажать кнопку "Yes",

После того как запись закончиться и появится окно сообщающее об успешной записи (Write Successful) нужно нажать кнопку "Ok" в этом окне.

Потом закрыть программу, вытащить SD карту безопасным способом и вставить в Raspberry Pi.

Далее можно подключить к Raspberry Pi usb клавиатуру (или ps2 через ), usb мышь и монитор или телевизор через hdmi кабель или можно подключить ethernet кабель (но это для опытных пользователей поэтому далее рассмотрим первый вариант). После этого надо подключить питание через micro usb например от зарядного устройства от смартфона. После подключения питания начнётся установка операционной системы. Как правило в новых (на момент написания данной статьи) версиях ос уже настроена возможность связи с Raspberry Pi по SSH и поэтому для того чтобы настроить связь с Raspberry Pi 3 по wifi достаточно настроить только wifi, Для этого в правом верхнем углу экрана есть значёк на который нужно нажать и выбрать wifi,

После чего вписать пароль от данного wifi в появившееся текстовое поле,

После этих действий wifi на Raspberry Pi 3 будет настроен и дальше можно будет не используя провода программировать Raspberry Pi 3 удалённо по wifi. После настройки Raspberry Pi 3 можно выключить вписав в командной строке (в программе LXTerminal которую можно открыть двойным кликом по иконке программы) команду sudo halt или нажав соответствующие кнопки выключения в графическом режиме, после окончательного выключения можно отключить питание и при следующей подаче питания Raspberry Pi 3 включиться с wifi. Теперь чтобы программировать Raspberry Pi 3 по wifi нужно выяснить какой у него ip адрес. Для того чтобы это сделать надо подать питание на Raspberry Pi 3, дождаться окончания загрузки ос, зайти в веб интерфейс маршрутизатора (вписав в строке браузера 192.168.1.1 или то что надо для входа в веб интерфейс, ввести логин и пароль), найти вкладку DHCP Leases или что то подобное, найти там строку с raspberry и ip адрес Raspberry Pi 3.

Далее нужно открыть программу PuTTY (если её нет то перед этим скачать (или ) и установить) поставить порт 22, соединение по SSH, вписать в поле "Host Name (or IP Adress)" ip адрес Raspberry Pi 3,

После чего нажать кнопку "Open" внизу окна, далее появиться чёрное окно с предложением ввести логин. По умолчанию логин "pi" - его надо ввести и нажать enter. Далее надо ввести пароль, по умолчанию "raspberry". При вводе пароля он не отображается - это нормально. После того как пароль введён невидимыми буквами нужно нажать enter и если всё было сделано правильно то мы получим доступ к Raspberry Pi 3 если нет то нужно повторить действия. После того как получен доступ к Raspberry Pi 3 можно его программировать, для начала нужно войти в папку "pi" для этого надо вписать команду

И нажать enter (после cd обязательно пробел).
Теперь можно открыть текстовый редактор nano. Nano - это специальный текстовый редактор который есть на большинстве ос на подобии Linux и в котором можно написать программу для Raspberry Pi. Для открытия этого редактора и одновременно с этим создания файла с названием "first" и расширением "py" нужно вписать команду

И нажать enter. Откроется редактор nano и можно заметь что его интерфейс немного отличается но в основном - это то же чёрное поле в которое надо вписывать команды. Т.к. мы хотим управлять портами ввода вывода общего (GPIO) то прежде чем запустить программу по управлению этими портами, нужно подключить к ним какое нибудь устройство чтобы можно было видеть что управление получилось. Надо также отметить что пины настроенные как выходы у Raspberry Pi могут выдавать очень небольшой ток (предполагаю что до 25мА) и учитывая что Raspberry Pi это всё таки не самое дешёвое устройство то настоятельно рекомендуется позаботиться от том чтобы нагрузка на выводы не была слишком большой. Маломощные индикаторные светодиоды, как правило, могут использоваться с Raspberry Pi т.к. им для того чтобы светиться достаточно небольшого тока. Для первого раза можно сделать приспособление с разъёмом, двумя встречно параллельно включёнными светодиодами и резистором с сопротивлением 220Ом включённым последовательно со светодиодами. Т.к. сопротивление резистора 220Ом, ток обязательно проходит через этот резистор и нет параллельных путей его прохода, напряжение на выводах 3.3В то ток не будет больше чем 3.3/220=0.015А=15мА. Подключить это можно к свободным GPIO например к 5 и 13 как на схеме

(распиновка взята с https://en.wikipedia.org/wiki/Raspberry_Pi), выглядеть это может примерно так:

После того как всё аккуратно и правильно подключено и есть уверенность в том что ничего не сгорит можно скопировать в редактор NANO первую простенькую программу на языке Python

Import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.cleanup()

Потом нажать

После выхода из редактора NANO можно ввести команду

Sudo python first.py

После чего светодиоды помигают некоторое количество раз. Т.е. получилось управлять портами ввода вывода общего назначения по wifi! Теперь давайте рассмотрим программу и выясним как это получилось.
Строка:

Import RPi.GPIO as GPIO

Это подключение библиотеки "GPIO" для управления выводами.
Строка:

Это подключение библиотеки "time" для задержек.
Далее идёт установка режима GPIO:

GPIO.setmode(GPIO.BCM)

Конфигурация выводов 5 и 13 как выходы:

GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)

Установка логической единицы на выводе 13, установка логического нуля на выводе 5:

GPIO.output(13, True)
GPIO.output(5, False)

Задержка

Установка логического нуля на выводе 13, установка логической единицы на выводе 5:

GPIO.output(13, False)
GPIO.output(5, True)

Переводит все выводы в исходное состояние и программа завершается. Т.о. можно управлять любыми свободными пинами по wifi и если сделать питание 5В от аккумулятора то уже можно сделать какого нибудь автономного робота или устройство не привязанное проводами к чему либо стационарному. Язык программирования Python (питон) отличается от си подобных языков, например вместо точки с запятой, для завершения команды, в питоне используется перевод строки, вместо фигурных скобок используется отступ от левого края который делается клавишей Tab. В общем Python это очень интересный язык на котором получается легко читаемый простой код. После того как работа (или игра) с Raspberry PI 3 закончена можно его выключить командой

И после полного выключения убрать питание. При подаче питания Raspberry PI 3 включается и с ним снова можно работать (или играть). Заказать Raspberry pi 3 можно по ссылке http://ali.pub/91xb2 . О том как делается настройка Raspberry PI 3 и управление его пинами можно посмотреть на видео:

После успешного мигания светодиодами можно приступить к полномасштабному изучению данного компьютера и созданию проектов используя возможностями Raspberry PI 3 которые ограничены лишь вашим воображением!

Продолжаем рассматривать применение компьютера Raspberry Pi для домашней автоматизации. Как вы помните, в предыдущих выпусках мы получили общие сведения о Raspberry Pi , научились, как установить и сконфигурировать операционную систему Raspbian , познакомились с фреймворком WebIOPi и его возможностями по работе с портами GPIO , в частности, как управлять дискретными входами / выходами и работу последовательного порта UART .

Сегодня я постараюсь познакомить вас с общей структурной схемой планируемой системы домашней автоматизации, которая будет создаваться с применением Raspberry Pi . (рис.1).

Рис. 1

Система домашней автоматизации состоит из центрального сервера , связанного по интерфейсу RS 485 с установленными в каждом помещении контроллерами , а к контроллерам в свою очередь подключаются все периферийные устройства (различные устройства управления, контроля, регулирования, защиты). Преимущество такой сетевой архитектуры состоит в том, что нет необходимости тянуть провода от каждого устройства к серверу, а достаточно соединить контроллеры, к которым они подключены, двумя парами проводов - по одной паре подается питание, а вторая используется для интерфейса RS 485. Кроме того, логика работы задумывается так, что выход из строя любого контроллера или даже центрального сервера не должен повлиять на работоспособность остальной системы. Другими словами, архитектура системы домашней автоматизации должна быть распределенной и децентрализованной . Подобная архитектура напоминает широко используемую в коммерческих проектах «умного дома» шину Smart Bus .

В качестве центрального сервера системы домашней автоматизации применяется Raspberry Pi . На нем установлен Web сервер , посредством которого пользователь с любого коммуникационного устройства (смартфона, ноутбука, планшета) через браузер может получать информацию о всех процессах, происходящих в доме и соответственно, управлять ими. Доступ к Web серверу по вводу логина и пароля можно получить как из домашней локальной сети, так и из сети интернет через Wi - Fi роутер .

К последовательному порту UART Raspberry Pi через согласующее устройство по интерфейсу RS 485 подключаются контроллеры , имеющие необходимый набор вводов/выводов. Кроме этого, к RS 485 подключается GSM модем для доступа к системе через сотовую или стационарную телефонную сеть на случай, если в точке, где находится пользователь, нет возможности получить выход в интернет. Доступ в этом случае также выполняется через ввод пароля.

Как уже говорилось ранее, Raspberry Pi имеет собственные порты GPIO , которые можно задействовать под различные функции. UART GPIO мы используем для организации интерфейса RS 485, а остальные порты пока свободны. Поэтому, вполне логично, что кроме подключения датчиков и исполнительных устройств к контроллерам, некоторые элементы системы домашней автоматизации можно подключить и непосредственно к портам GPIO Raspberry Pi через буферное устройство при условии, что к таким элементам не нужно прокладывать длинные коммуникации. Например, это может быть датчик атмосферного давления или датчик контроля температуры с управлением охлаждения самого Raspberry Pi . На структурной схеме непосредственное подключение к портам Raspberry Pi показано через буферный модуль GPIO .

Так как на первом этапе практической реализации нашей системы мы будем организовывать подключение порта UART Raspberry Pi к контроллеру по интерфейсу RS 485, а так же подключать исполнительные устройства непосредственно к портам ввода/вывода GPIO , предлагаю для начала завершить настройку и конфигурирование Raspberry Pi для выполнения этих задач.

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

Заходим в файл конфигурирования командой:

sudo nano /etc/ webiopi / config

и устанавливаем следующие настройки [ GPIO ] (рис.2)

4 = OUT 0

7 = OUT 0

8 = OUT 0

25 = OUT 0

24 = OUT 0

Рис. 2

В разделе [ HTTP Server Configuration ] необходимо прописать строку:

doc-root = /home/pi/myproject/html

Это будет путь к папке, которую мы потом создадим для хранения страницы Web интерфейса index . html . Разумеется, можно было создать эту папку и в другом месте, прописав к ней соответствующий путь, но во избежание путаницы и проблем в дальнейшем, давайте будем придерживаться однообразия (рис.3)

gpio-export = 4, 7, 8, 25, 24

gpio-post-value = true

gpio-post-function = true

device-mapping = true


Рис. 4

В файле конфигурации настройки завершены. Сохраняем их нажатием сочетания клавиш Ctrl и O , затем нажимаем Enter и выходим командой Ctrl и Х .

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

/home/pi/myproject/html (рис.5)


Рис. 5

Для контроля правильности выполненных операций, распакуйте архив тестового файла в папку html . Там должен появится файл index . html . Введите сетевой адрес Raspberry Pi , логин и пароль (webiopi / raspberry ). Выполните перезагрузку WebIOPi командой:

sudo /etc/init.d/webiopi restart

После этого вы должны увидеть тестовый web интерфейс (рис.6). С помощью этого интерфейса можно управлять выходами GPIO 4 , 7 , 8 , 24 , 25 кликая мышкой по соответствующей кнопке. Высокий уровень на выходе показывается оранжевым цветом, низкий - черным. После каждого клика по кнопке состояние выхода меняется на противоположное. Для визуального контроля выполняемых команд к этим выходам можно подключить светодиоды через токоограничивающие резисторы 300 - 470 Ом .

Рис. 6

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

Самая мощная на сегодня модель 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.

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

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



Загрузка...