Raspberry Pi: управление светодиодом. Raspberry Pi: настройка и управление. Рассмотрим последовательность решения задачи

7. Знакомство со средствами программирования, установленными на Raspberry Pi

Для изучения программирования в Raspbian ОС предустановлены пакеты Python, Scratch, Node-RED, SonicPi и Wolfram Mathematica. Именно ради того, чтобы сделать максимально доступным и удобным для всех изучение програмирования и физического компьютинга проект Raspberry Pi и создавался несколько лет назад! Так что же представляют в трех словах предустановленные на RasPi средства разработки?

Python представлять не надо - это самый популярный в университетской и научной среде язык программирования. Для работы с датчиками через GPIO для Python написана и предустановлена библиотека. Вообще говоря, через инструмент pip можно доустановить тысячи библиотек для Python буквально для решения всех практических задач физического компьютинга и научных вычислений.
Помимо самого языка Python версий 2 и 3 со средой разработки IDLE, в Raspbian ОС предустановлена специальная версия популярной игры Minecraft Pi и библиотеки на Python для управления игрой. (Введение см. и )
Node-RED - визуальный редактор от IBM с открытым исходным кодом для создания "интернета вещей", позволяющий практически без программирования, соединением готовых модулей "собирать" довольно сложные приложения для систем типа "умный дом". (Введение см. и ).
Язык Scratch - инструментарий визуального программирования, позволяющий детям создавать анимации и игры методом Drag&Drop. (Введение см. и )
Уникальный в своем роде язык SonicPi позволяет программировать музыку. (Введение см. )
Пакеты Wolfram и Mathematica - наиболее полная система для современных технических вычислений в мире. Она будет незаменимым помощником для технических вычислений как учащихся школ, так и студентов ВУЗов. Хотя продукт для Windows платный, на Raspbian ОС установлена полнофункциональная бесплатная версия.
(Введение см. и )
Кроме того, в Raspbian ОС по умолчанию предустановлены Node.js, Perl и Ruby.
Для удобной работы с кодом на Raspberry Pi предустановлен один из лучших редакторов с подсветкой синтаксиса и среда разработки Geany.

8. Восстановление работы Raspberry Pi после сбоев


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

1) Откат до последней резервной копии microSD-карты при помощи Win32DiskImager.
Делайте почаще образы стабильной версии системы программой Win32DiskImager и можете быть уверены, что в случае сбоя система будет востановлена за считанные минуты.

2) Редактирование конфигурационного файла config.txt с microSD-карты на компьютере при помощи кард-ридера.
К примеру, в случае сбоя с Open GL надо закомментировать символом # последнюю строчку "dtoverlay=vc4-kms-v3d" в файле config.txt и система запустится нормально.

3) Удаленное подключение к Raspberry Pi по сети через SSH-терминал.
Во многих случаях, например, в случае того-же сбоя загрузки при включении Open GL, после загрузки ядра системы успевает запуститься SSH-сервер и продолжает работу в фоновом режиме. Можно зайти в консоль Raspberry Pi через SSH-терминал, отредактировать конфигурационные файлы (boot/config.txt), либо запустить raspi-config и отключить сбойные опции.

4) Чистка системы.

Удалите кеш пакетов:
sudo apt-get clean
Удалите осиротевшие пакеты:
sudo apt-get autoremove
Обновите список пакетов:
sudo apt-get update
Исправьте зависимости:
sudo apt-get -f install
Переустарновите пакет, если установка пакета была прервана
sudo apt-get install --reinstall имя_пакета

9. Удаленное управление Raspberry Pi (SSH/VNC)



Как и любой Unix-системой, Raspberry Pi можно управлять удаленно несколькими способами.
Самый простой - управление в консоли по протоколу SSH. Чтобы это стало возможным, необходимо зайти в настройки Raspberry Pi (sudo raspi-config), выбрать пункт меню "Interfacing options", в следующем окне выбрать пункт "SSH" и подтвердить включение сервера SSH при запуске. Рекомендуется сразу поменять пароль по умолчанию пользователя "pi" с "raspberry" на какой-нибудь другой, содержащий не менее 8 символов в английской раскладке.
Затем можно скачать на другом компьютере бесплатный SSH-клиент PuTTY , запусить его и ввести в строку "Host Name (or IP address)" локальный IP-адрес Raspberry Pi. В консоли появится запрос на логина, а за ним - пароля. Если все введено верно, появится приветствие Raspberry Pi и зеленый курсор ввода команд. Через SSH-терминал можно устанавливать и удалять программы, копировать, перемещать и удалять файлы, исполнять консольные команды системы и скрипты (BASH, Python, Perl...), работать с конфигурационными файлами Raspberry Pi. Словом, делать все многообразие операций, доступных в консоли Unix-систем. Многие вещи удобнее делать в консольных редакторах типа файл-менеджера MC, которые также работают через SSH-терминал.
Помимо терминального доступа к консоли, в Raspberry Pi встроена возможность полноценного управления в графическом интерфейсе. Для этого на Raspberry Pi предустановлена бесплатная версия VNC-сервера. Включить его автозапуск можно там-же, где до этого мы включили SSH-сервер. Надо выбрать следующий пункт меню "Iinterfacing options" - "VNC" и подтвердить влючение сервера. Для полноценного доступа к Raspberry Pi необходимо будет скачать бесплатный VNC-viewer , запустить его, и также как в случае с SSH ввести локальный IP-адрес Raspberry Pi. Пройдя процедуру авторизации, вы попадете на Raspberry Pi, как если бы находились перед подключенным к нему дисплеем, нажимали на клавиатуру и кликали мышью. Скорость работы в VNC-клиенте лишь немного медленнее, чем на самом Raspberry Pi. Меню открываются почти с той же скоростью, только графические файлы при открытии прорисовываются не мгновенно, с неболшой задержкой в доли секунды.
При удаленном подключении к Raspberry Pi по SSH и VNC необходимо только, чтобы устройство было подключено к локальной сети и сети питания. Клавиатура, мышь и монитор при этом могут быть и не подключены к Raspberry Pi . Это удобно в случае настройки "малинки" в качестве веб-сервера, или сервера IoT (сервера управления датчиками "умного дома").

К слову, по умолчанию размеры виртуального экрана в VNC слишком малы - всего 640х480 пикселей. Приведу мой маленький "хак" по настройке комфортного разрешения экрана (1024х768) при удаленном подключении по VNC:

Откроем для редактирования файл конфиргурации Raspberry Pi:
sudo nano /boot/config.txt
Раскоментируем (удалим слева символ #) и слегка подправим следующие строки:
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=16

10. Установка комплекта ПО интернет-разработчика LAMP

Поскольку не только я считаю, что за интернетом - будущее, на компьютере юного программиста должен быть установлен пакет программ, обеспечивающийх возможность обучения основам интернет-программирования, создания и администрирования вебсайтов. Общепризнанным стандартом среды интернет-разработчика в ОС Linux является комплект программ, стостояший из вебсервера Apache, СУДБ MySQL и языка программирования PHP (LAMP). Для удобства администрирования баз данных также рекомендуют установить ПО PHPMyAdmin (все программы распространяются бесплатно). Следуя пошаговым инструкциям с офсайта Raspberry Pi , за полчаса LAMP и самая популярная система управления сайтами (CMS) Wordpress были установлены на "малинку" и настроены для работы. Привожу пошаговую инструкцию с пояснениями, чтобы у вас этот процесс не занял больше времени, чем у меня.


1. Установка сервера Apache2 (<1 мин)
sudo apt-get install apache2 -y
Проверка работы Apache
links2 http://192.168.0.100
Просмотр папки сайта
cd /var/www/html
ls -al

2. Установка PHP 5 (1 мин)
sudo apt-get install php5 libapache2-mod-php5 -y
sudo service apache2 restart
Создание тестовой страницы
sudo rm index.html
sudo nano index.php

Проверка работы PHP
links2 http://192.168.0.100

3. Установка mysql 5 (3 мин)
sudo apt-get install mysql-server php5-mysql -y
sudo service apache2 restart

Присвоение прав пользователю Apache
sudo chown -R www-data: .

Создание базы MySQL
mysql -uroot -ppassword
mysql> create database wordpress;

Включение Apache mod rewrite
sudo a2enmod rewrite

Включение возможности указывать настройки в.htaccess
sudo nano /etc/apache2/sites-available/000-default.c onf

Добавим следующий код

< VirtualHost *:80 >
< Directory "/var/www/html" >
AllowOverride All
< /Directory >

4. Установка PHPMyAdmin (3 мин)
sudo apt-get install phpmyadmin

5. Установка Wordpress

Скачивание Wordpress

cd /var/www/html/

Распаковка Wordpress

sudo tar xzf wordpress-4.7.2-ru_RU.tar.gz

sudo mv wordpress/* .

sudo rm -rf wordpress-4.7.2-ru_RU.tar.gz

Установка и настройка Wordpress
Заходим в броузере по вашему текущему адресу, например http://192.168.0.100 , либо по адресу http://localhost .
В соответствующих полях указываем имя, адрес (localhost), логин и пароль пользователя созданой вами ранее базы данных, название сайта, логин и пароль администратора сайта (не используйте простые имена типа "root" и "admin", придумайте пароль не короче 8 символов, содержащий цифры и буквы в разных регистрах), а также ваш e-mail.
Через несколько секунд после подрвеждения ввода данных Wordpress установится и уже будет готов к работе! Комплекты необходимых плагинов, таких как cyr3lat, wp-edit, hyper-cache, wp-db-backup и т.п., можно установить позже, просто введя их названия в форме поиска страницы Plugins консоли Администратора Wordpress.
Теперь Raspberry Pi готов стать домашним веб-сервером интернет-разработчика.

11. Знакомство с языком Python

Объектно-ориентированный интерпретируемый язык программирования Python появился в конце 80-начале 90х годов в центре математики и информатики в Нидерландах благодаря усилиям Гвидо ван Россума.
Изначально язык был ориентирован на повышение производительности разработчика и читаемости кода.
Python характеризуется минималистичным синтаксисом при высокой функциональности, поддерживает все основные парадигмы программирования, поддерживает динамическую типизацию, автоматическое управление памятью, обработку исключений, многопоточность вычислений, модульность.
В настоящее время Python активно используется как универсальная среда для научных расчётов. Во многих популярных программах трёхмерной графики, таких как Blender, язык Python используется для расширения стандартных возможностей программ.
Python используется во многих крупных компаниях, таких как Dropbox, Google, Facebook, Instagram.
Особенностью синтаксиса языка Python является выделение блоков кода с помощью отступов, поэтому в Python отсутствуют операторные скобки begin/end и фигурные скобки. Также в Python отсутствую явные завершающие символы конца строк, такие «;» как в Perl.
Одной из привлекательных сторон Python стала богатая библиотека стандартных модулей. Помимо стандартной библиотеки существует огромное множество прикладных библиотек для Python в самых разных областях. Для Python созданы программные каркасы для разработки веб-приложений, самым популярным из которых является Django.
С Python поставляется библиотека tkinter для создания кроссплатформенных программ с графическим интерфейсом. Также для Python существуют расширения для всех основных библиотек графических интерфейсов.
Существуют расширения Python для создания игр (Pygame), работы с мультимедиа, 3D-моделирования, обработки графики, построения графиков, астрономических вычислений (Astropy).
Установка и обновление пакетов для Python осуществляется через интерфейс PyPI (Python Package Index). Модули задействуются в начале программ командой import.
Изначально Python предполагался в качестве основного языка программирования на Raspberry Pi. Не случайно devboard имеет символическое окончание «Pi» в названии.
Для работы с внешними датчиками, подключаемыми к Raspberry Pi для Python написаны и предустановлены в Rasbian несколько библиотек, таких как RPi.GPIO.
Вместе с Python на Raspberry Pi предустанавливаются стандартный интерфейс разработки и тестирования приложений IDLE и удобный редактор Geany.
В Интернет имеется масса руководств по знакомству с языком Python и готовых примеров для создания IoT-приложений на Raspberry Pi, понятных даже школьникам младших классов.
Надо учитывать, что большинство примеров в Интернет написаны для версии Python 2.х, не совместимой с 3.Х Поэтому, на Raspberry Pi предустановлены обе версии Python. Также вместе с Python 3.Х поставляется программа (скрипт) «2to3», конвертирующая код с версии 2.х в 3.Х.

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

(Введение в основы языка Python см. и )

12. Работа с Python и GPIO, мигание светодиодом

После знакомства с основами синтаксиса и базового набора команд языка Python, решающим шагом на пути физического компьютинга является решение, вроде бы, простой задачи: «помигать светодиодом».
Именно с этого шага многие школьники, студенты и взрослые «гики» всего мира начинали свой путь в IoT-программировании.
Для этого мне в первую очередь потребовалось приобрести несколько радиодеталей: несколько пар резисторов от 100 до 300Ом (как предлагается в руководствах) и несколько светодиодов разного цвета (я взял красный, синий и белый). В ходе поиска подходящего радиоларька выяснилось, что радиодеталями в моем городе торгует только одна, конкретная точка. Стоимость деталей оказалась невысокой (3-5 рублей за штуку).
При сборе простенькой схемы, состоящей из светодиода и резистора, я обнаружил, что 40-пиновый кабель к моей монтажной плате (breadboard) не маркирован красной полосой по краю, а состоит из разноцветных кабелей. В интернете схемы подключения для такого кабеля к breadboard и Raspberry Pi 3 слету я не нашел. Пришлось открыть схему GPIO и прозванивать контакты кабеля цифровым тестером, чтобы понять, как его подсоединять.
Также оказалось, что «гребенка» для подключения кабеля к breadboard у меня не имеет отводов для вывода на линии питания breadboard, так что пришлось подключить Ground на гребенке к минусу на breadboard.
Собрав схему таким образом, чтобы длинный контакт (+) светодиода был подключен к 21 порту GPIO, а короткий — через резистор сопротивлением в 100 Ом — к «земле» (-), запустил Raspberry Pi 3 и подключился к нему по VNC.
Создал в IDLE3 программу мигания светодиодами flashpi.py, описанную на сайте http://edurobots.ru/ , и сохранил ее в папке /home/pi."
Запустил программу с помощью F5 в IDLE3 (можно также запустить программу командой "sudo python3 flashpi.py" в LXTerminal) и... светодиод не загорелся.
Проверив все контакты и правильность сборки схемы, понял, что дело не в аппаратной, а в программной части системы. Из примера в одной из электронных книжек по Raspberry Pi 3 выяснилось, что вместо команды
GPIO.setmode(GPIO.BOARD) надо инициализировать порты командой GPIO.setmode(GPIO.BCM). После правки кода и запуска программы, вслед за нажатием клавиши Enter светодиод, наконец, загорелся ярким светом!
Повторное нажатие клавиши Enter выключало светодиод. Нажатием любой другой клавиши осуществлялся выход из программы и корректное завершение работы с портами GPIO.
Вот код рабочей программы ("__" заменяем на пробелы - это необходимые отступы в Python):

Из цикла закрытие работы с GPIO

Никогда в жизни я так не радовался горящему светодиоду! Да и давно так не радовался вообще! Как это, надеюсь, рано или поздно сделали 10 миллионов покупателей Raspberry Pi, я таки "помигал светодиодом"! Причем, «помигал» программно!

Заключение - напутствие юным кибернетикам

Надеюсь, что мой долгий, но захватывающий путь длиной в 3 месяца, от решения купить одноплатный компьютер Raspberry Pi 3 до программного «мигания светодиодом», был пройден не зря.
Он познакомил меня с новым миром Unix и физического компьютинга, а заодно подготовил пошаговое руководство для всех, кто хочет войти в него (в первую очередь — для преподавателей школ и старшеклассников) и создал платформу для дальнейшего освоения физического компьютинга, веб-программирования и системного администрирования. На базе Raspberry Pi 3 стоимостью чуть больше 2 т.р. стало возможным создание домашнего вебсервера и мультимедиа-центра, интересных решений по автоматизации выполнения рутинных задач и более сложных IoT-систем, в том числе, решений для концепции «Умный дом».
Лично для меня в мои 43 года было занимательным и полезным приключением осваивать незнакомый мне язык программирования Python и новую, не похожую на распространенные у нас, операционную систему.
Компьютер Raspberry Pi 3, настроенный и проверенный в работе, вместе с breadboard, радиодеталями и комплектом из 16 датчиков я изначально планировал подарить дочке на День рождения для использования в качестве учебного ПК и перспективного исследовательского инструмента в кружке информатики местной гимназии. Договорился с учителем информатики о предоставлению помощи по приобретению и внедрению Raspberry Pi во внеурочных занятиях по информатике среди заинтересованных ребят и олимпиадников. Надеюсь, как и мне, Raspberry Pi даст моей дочери и ребятам в гимназии мощный импульс в учебе и развитии, раскроет новые возможности изменения себя и окружающего мира к лучшему при помощи современных технологий.

. Сегодня третий урок, на котором мы поработаем с консолью и утилитой apt-get, научимся делать скриншоты и настроим удаленное управление через VNC.

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

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

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

Работа с консолью на Raspberry Pi

В ОС Raspbian (как и в других дистрибутивах Linux ) имеется главная консоль. Если бы мы не сделали соответствующие в rasppi-config , консоль открывалась бы сразу при запуске операционной системы. Работать с такой консолью не удобно, поскольку придется выйти из графического режима. Гораздо удобнее использовать предустановленную программу LXTerminal , которая эмулирует главную консоль в виде окна в графическом интерфейсе. Когда мы откроем эту программу, увидим строчку pi@raspberrypi ~ $ Здесь pi — имя пользователя в ОС, raspberrypi — hostname, ~ — текущая директория, ~ заменяет /home/pi . Когда мы видим такую строку, можем писать свою команду. В частности, здесь можно делать действия с файлами, папками, архивами (но эти действия можно делать и в графическом режиме, что гораздо удобнее).

Sudo

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

Утилита apt-get и установка программ

На мы рассмотрели установку программ с помощью PiStore . Это удобный и понятный способ с графическим интерфейсом, однако библиотека PiStore содержит не так много программ, как хотелось бы.

Альтернативный способ поиска, скачивания и установки программ на Raspberry Pi — консольная утилита apt-get.

Apt-get хранит данные о различных консольных и графических программах и утилитах на Raspberry Pi . Прежде чем работать с этой утилитой, нужно обновить ее базу программ с помощью команды

sudo apt-get update

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

apt-cache search <запрос>

например,

apt-cache search tree

После запроса будет выведен список программ и утилит, в названии или описании которых имеется введенный запрос. Выбираем подходящую программу и запоминаем ее название.

Запрашиваем установку:

sudo apt-get install <название>

например,

sudo apt-get install tree

Установку потребуется подтвердить с помощью Enter.

После установки можно узнать информацию о программе или утилите:

info <название>

например,

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

Для использования консольной программы вводим <название> <параметры и флаги>, например tree .

Для удаления программы используется команда (удаление также нужно подтверждать):

sudo apt-get remove <название>
например,
sudo apt-get remove tree
Периодически с этой утилитой желательно совершать следующие действия:
sudo apt-get update (обновление базы программ)
sudo apt-get upgrade (обновление установленных программ)
sudo apt-get autoremove (удаления оставшихся после удаления программ библиотек, сопутствующих программ и др.)

Создание скриншотов на Raspberry Pi

К сожалению, ОС Raspbian не имеет предустановленных средств для создания снимков экрана — скриншотов.

Искать средства для создания скриншотов в apt-get можно с помощью запроса:

apt-cache search screen capture

Мне показалась удобной утилита scrot для скриншотов. Установка утилиты scrot:

sudo apt-get install scrot

Для создания скриншота необходимо ввести команду scrot. Можно указать задержку выполнения команды — это необходимо, чтоб вы успели свернуть или закрыть консоль — а то именно она попадет в скриншот. Для задержки в 5 секунд необходимо ввести:

Настройка удаленного управления через VNC

Virtual Network Computing (VNC ) - система удаленного доступа к рабочему столу компьютера . Управление осуществляется путем передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть. Будем использовать VNC для удаленного управления Raspberry Pi.

Чтобы настроить удаленное управление, установим и запустим VNC-сервер x11vnc, узнаем ip-адрес Raspberry Pi:
sudo apt-get install x11vnc
x11vnc -desktop:0
Просмотрим ip-адрес Raspberry Pi с помощью команды hostname -I.

На компьютер, с которого мы хотим удаленно управлять Raspberry Pi, скачаем и установим VNC-клиент, например, от realVNC . Запустим его и введем ip-адрес Raspberry Pi. После этого мы можем удаленно управлять.

На этом третий урок закончен, следует!

В следующем уроке мы поработаем с портами GPIO, в частности помигаем светодиодом в разных режимах.

В данной статье мы рассмотрим управление входами/выходами (GPIO) микрокомпьютера Raspberry Pi через Web-интерфейс. Это дает возможность управлять различными устройствами через интернет.

Особенности данного проекта:

– серверная программа, запущенная на Raspberry Pi для чтения значений GPIO

– использование MySQL базы данных для хранения состояния GPIO

– использование веб-сервера Apache2 для контроля GPIO через веб-браузер

Итак, первое, что вам необходимо установить на Raspberry Pi, это:

– Apache веб-сервер

– MySQL сервер

– phpMyAdmin (есть русская версия)

Т.к. микрокомпьютер Raspberry Pi работает на Linux-системах, то в интернете полно описаний на русском языке как устанавливать все эти пакеты. Поэтому зацикливаться на этом мы не будем. Есть неплохая инструкция применительно к Raspberry Pi, но на английском языке: почитать .

Полноценный root-доступ

Для получения полного root доступа необходимо в терминале набрать команду sudo -i , которая переводит пользователя в сессию под root-ом.

Если вы уже включили root эккаунт, то дальше можете пропустить, если нет, то после команды sudo -i необходимо задать пароль пользователю root, делается это командой passwd root. После чего введите 2 раза пароль. Теперь можно закрыть SSH-сессию и войти заново уже под root’ом.

Настройка базы данных

Для упрощения работы, все действия с MySQL будем делать из оболочки phpMyAdmin.

Скачать файлы проекта

Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)

Raspberry Pi представляет собой не просто миникомпьютер, предназначенный для того, чтобы из него и проигрывали на нем музыку. Он может применяться и в более серьезных электротехнических . Для этого у него имеются линии ввода/вывода общего назначения (GPIO), которые мы сегодня рассмотрим.



GPIO находятся на разъеме 2×13, на котором можно найти интерфейсы SPI, I2C, UART и линии питания 3.3 В и 5 В.



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



Итак, как же управлять линиями GPIO на Raspberry Pi?


Для начала нужно установить библиотеку RPi.GPIO Python Library. Возможно, она уже была предустановленна на ваш дистрибутив операционной системы Raspbian OS. Чтобы проверить это, введите:


sudo python


Затем введите в строчке:


import RPi.GPIO as GPIO


Если не появилась ошибка, то все хорошо. Но если же она возникла, то нужно сделать следующие шаги.


Для начала загружаем RPi GPIO Library:


wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.3.1a.tar.gz


Затем извлекаем файлы:


tar zxf RPi.GPIO-0.3.1a.tar.gz


Потом переходим в извлеченный каталог:


cd RPi.GPIO-0.3.1a


И устанавливаем библиотеку:


sudo python setup.py install


Использование библиотеки RPi.GPIO Python Library


# импорт библиотеки import RPi.GPIO as GPIO # используем нумерацию разъема Raspberry Pi GPIO.setmode(GPIO.BOARD) # или GPIO.setmode(GPIO.BCM) # настраиваем выводы GPIO на вход или выход GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.OUT) # берем входное значение с вывода 11 input_value = GPIO.input(11) # устанавливаем выходное значение на вывод 13 GPIO.output(13, GPIO.HIGH) #GPIO.output(13, GPIO.LOW)

Различие между GPIO.setmode(GPIO.BOARD) и GPIO.setmode(GPIO.BCM) заключается в системе нумерации выводов. В первом случае используется нумерация разъема P1 на борту Raspberry Pi, а во втором случае нумерация выводов системы-на-кристалле Broadcom, являющейся ядром Raspberry Pi. Следует знать, что в случае с BCM нумерация выводов между первой и второй ревизиями немного отличается, а при использовании BOARD ревизия не имеет никакого значения, все остается тем же самым.


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



Соединения:



Значения сопротивлений резисторов могут быть вычислены следующим образом. Используемые в данном случае 5-миллиметровые светодиоды потребляют ток 20 мА. Напряжение, подаваемое с Raspberry Pi, составляет 3.3 В. Тогда сопротивление будет равно 3.3 В / 20 мА = 165 Ом. Для кнопок были задействованы резисторы 1 КОм.




from time import sleep import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(16, GPIO.IN) GPIO.setup(18, GPIO.IN) GPIO.setup(11, GPIO.OUT) GPIO.setup(13, GPIO.OUT) GPIO.setup(15, GPIO.OUT) GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) # state - определяет должен ли светодиод быть включенным или выключенным state = 0 # increment - направление изменения состояний inc = 1 while True: # кнопка нажата if (GPIO.input(16) == True): if (inc == 1): state = state + 1; else: state = state - 1; # достигнуто максимальное состояние state, возвращаемся назад (декремент) if (state == 3): inc = 0 #достигнуто минимальное состояние state, возвращаемся назад (инкремент) elif (state == 0): inc = 1 if (state == 1): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) elif (state == 2): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.HIGH) GPIO.output(15, GPIO.LOW) elif (state == 3): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.HIGH) GPIO.output(15, GPIO.HIGH) else: GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) print("pressed B1 ", state) # нажата кнопка сброса if (GPIO.input(18) == True): state = 0 inc = 1 GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) print("pressed B2 ", state) sleep(0.2);

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

Появившийся в 1998 году гипертекстовый протокол управления кофеваркой HTCPCP/1.0 ныне незаслуженно забыт. Чтобы воскресить заложенные в него создателями идеи, реализуем кофеварку с управлением от Raspberry Pi.

Многие любители кофе мечтают, чтобы к пробуждению их уже ждал горячий кофе. На мечты наложились разговоры про «умный дом», контроллеры, сенсоры, а тут еще я заказал плату Raspberry Pi (RPi) «на поиграть» - в общем, судьба ее была решена. Если в 1998-м управление кофеваркой через веб действительно выглядело забавным, то в наше время это вполне можно сделать своими руками. С такой же игрушкой, как RPi, радости будет вдвойне. На ее фоне пылящийся в коробке Ардуино Мега 2560 кажется случайно попавшим в будущее из мира 8-разрядных процессоров 80–90-х годов раритетом, к которому зачем-то прикрутили Wi-Fi, шилды и сенсоры.

Но вернемся на кухню за кофе. Кофеварку включаем с помощью реле, реле управляем с RPi, доступ к RPi из браузера по Wi-Fi. Проснувшись, прямо из кровати с помощью браузера в телефоне. И смотрим, как оно заваривается, через веб-камеру. Либо детектируем движение, и кофе начинает завариваться в тот момент, когда мы заходим на кухню или включаем свет. Настоящий гик сможет включить кофеварку из постели через SSH, настоящий лентяй - просто зайдя на кухню, простой же пользователь вроде меня - через браузер.

ВЫБОР КОФЕВАРКИ

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

Выбор кофеварок небольшого объема и мощности невелик, большинство предложений - объемом больше литра, но почти сразу мне приглянулась Moulinex BCA 1.L1 Little Solea. Мощность 640 Вт, кофейник 0,6 л.

Скручиваем все вместе

В первой ревизии плат RPi стоят неудачные предохранители (рис. 2), из-за которых почти всю USB-периферию приходится подключать через USB-хаб с дополнительным питанием. В более поздних ревизиях эта проблема была исправлена, однако из-за того, что мощность источника питания невелика, USB-хаб все равно может понадобиться.

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

Операционная система

Основной операционной системой на данный момент является Raspbian, основанный на Debian, с поддержкой аппаратного сопроцессора для операций с плавающей запятой. На странице загрузки можно загрузить не только его (нужен Raspbian «wheezy»), но и несколько других, также основанных на Linux, вместе с необходимыми утилитами.

Образ карты нужно скачать на диск, разархивировать, затем, если все делается под Windows, залить с помощью утилиты Win32DiskImager (ссылка есть на странице загрузки), на SD-карту, размер которой должен быть от 2 Гб. Далеко не любая SD-карта заработает - есть список совместимых карт и другого оборудования , но даже использование карт из этого списка не гарантирует, что конкретная карта не является подделкой. Если RPi не грузится из образа, только что залитого на карту, первое, что стоит попробовать, - сменить карту SD.

После установки SD-карты в RPi, включения и загрузки (имя пользователя по умолчанию pi, пароль - raspberry) выводится начальное конфигурационное меню, в котором нужно обязательно расширить файловую систему с 2 Гб образа на всю SD-карту и разрешить SSH. Кроме того, стоит задать раскладку клавиатуры, языки, временную зону и сменить пароль по умолчанию.

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

$ sudo raspi-config

После завершения начальной настройки перезагрузиться:

$ sudo reboot

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

$ sudo apt-get update $ sudo apt-get upgrade

Настройка Ethernet и Wi-Fi

Имевшаяся у меня Wi-Fi-карта D-Link DWA-140 B2 значилась в списке совместимого оборудования . Подключил, проверил, что успешно определилась:

$ lsusb <..> Bus 001 Device 006: ID 07d1:3c0a D-Link System DWA-140 RangeBooster N Adapter(rev.B2) $ iwconfig lono wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on

Wi-Fi можно настроить в соответствии с документацией .

SSH И VNC

Старт сервера SSH разрешается в меню начальной конфигурации. Для доступа с Windows-машины можно использовать Putty, с телефона под Андроид - Irssi ConnectBot. Но тут уже на вкус и цвет…

Если недостаточно SSH и нужен доступ к рабочему столу RPi (например, просмотреть снимки, сделанные Motion, не копируя их на локальную машину), можно получить его через vncviewer из TightVNC, а для доступа с Андроида - с помощью androidVNC. Для этого нужно установить VNC, используя рекомендации bit.ly и bit.ly .

ВЕБ-КАМЕРА И MOTION

В качестве веб-камеры в моем варианте используется Logitech HD Webcam C525. При приобретении новой веб-камеры стоит свериться со списком оборудования, совместимого сRPI , некоторым может потребоваться USB-хаб с дополнительным питанием. Кроме того, стоит проверить совместимость с Motion по ссылкам «Working Devices» и «Non Working Devices». Если камеры нет в списке «Working Devices», это еще не значит, что она не заработает, но из второго списка камеру покупать точно не стоит.

$ lsusb <..> Bus 001 Device 007: ID 046d:0826 Logitech, Inc.

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

$ sudo apt-get install uvccapture $ uvccapture -S80 -B80 -C80 -G80 -x800 -y600

В текущем каталоге должен появиться файл snap.jpg (даже если были сообщения об ошибках), который можно открыть на RPi с помощью Image Viewer. Motion - приложение для мониторинга сигнала с камеры, позволяющее установить, что значительная часть изображения изменилась (то есть определить движение в кадре), и в этом случае сохранять изображения и запускать внешние программы. Домашняя страница проекта .

$ sudo apt-get install motion

Чтобы разрешить автозапуск Motion:

$ sudo nano /etc/default/motion # set to "yes" to enable the motion daemon start_motion_daemon=yes

Разрешить доступ к веб-интерфейсу Motion с внешних хостов:

$ sudo nano /etc/motion/motion.conf webcam_localhost off control_localhost off

В этом же файле хранятся настройки детектирования движения, начала и завершения записи с камеры и запуска внешней программы при детектировании движения.

$ sudo nano /etc/motion/motion.conf # Command to be executed when a motion frame is detected (default: none) on_event_start sudo /home/pi/motion-det

/home/pi/motion-det - сценарий, который будет выполняться при детектировании движения. Ему понадобятся права root для управления портами. Добавить пользователя Motion (motion) в список sudoers:

$ sudo visudo

дописав следующую строку в конце файла:

Motion ALL=(ALL) NOPASSWD: ALL

Запуск с выводом информации в консоль:

$ sudo motion -n

Когда Motion запущен, настройки можно изменить из браузера по адресу: //:8080

Вместо нужно подставить фактический IP-адрес RPi. Увидеть изображение с камеры можно по адресу //:8081

В Firefox обновление изображения может происходить некорректно. В Chrome все ОK. Предустановленные на RPi браузеры вообще не могут его отобразить. Для настройки определения движения предусмотрен конфигурационный режим

$ sudo motion -s

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

Изображения с камеры сохраняются в каталоге /tmp/motion, формат отдельных изображений по умолчанию jpg, роликов - swf. Формат можно изменить в конфигурационном файле. А отключить сохранение файлов можно так:

Output_normal off ffmpeg_cap_new off

ПОРТЫ GPIO - ОСОБЕННОСТИ И УПРАВЛЕНИЕ

У RPi есть встроенные порты ввода-вывода. Называются они GPIO, General Purpose Input/Output, то есть порты ввода-вывода общего назначения. Строго говоря, подключить исполнительное устройство можно без особых проблем и к простому ПК, но не держать же ПК на кухне? Тем и хороша недорогая и миниатюрная RPi - ее спокойно можно разместить рядом с исполнительным устройством.

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

Распайка портов и примеры доступа к ним из различных языков программирования приведены здесь: bit.ly/StAJXA .

Есть две основных версии плат, Revision 1 и 2, в них немного различается распайка и назначение портов. Чтобы определить, какая версия, нужно ввести команду cat /proc/cpuinfo и найти hardware revision code в таблице: Дополнительная информация о различиях Revision 1 и 2 есть .

Питание +5 В и 3,3 В, земля (GND) и порт GPIO 4, который мы будем дальше использовать, в обеих версиях размещаются на тех же контактах. Разработчики RPi неоднократно отмечают опасность сжечь порт или всю RPi при неправильном подключении порта. Чтобы этого не произошло, порт рекомендуется защитить от ошибочных действий. Схемы защиты портов (а кроме того, примеры подключения различной периферии) можно посмотреть .

Доступ к портам

Самый простой способ управления портом - из командной строки. Состояние порта при этом можно проконтролировать вольтметром. Все действия делают под рутом.

$ sudo -i

Начало работы с портом:

$ echo "4" > /sys/class/gpio/export

Режим работы - вывод:

$ echo "out" >

Вывод значений:

$ echo "1" > /sys/class/gpio/gpio4/value $ echo "0" > /sys/class/gpio/gpio4/value

Режим работы - ввод:

$ echo "in" > /sys/class/gpio/gpio4/direction

$ cat /sys/class/gpio/gpio4/value

Завершить работу с портом:

$ echo "4" > /sys/class/gpio/unexport

Подготовим скрипт для управления заданным портом, который будем использовать позже:

$ sudo nano switch_gpio

#! /bin/bash PORT_NUM=$1 if [ $2. == "on." ]; then NEW_VALUE=1 else if [ $2. == "off." ]; then NEW_VALUE=0 else echo "Usage: $0 PORT_NUM on|off" exit fi fi # Настраиваем порт GPIO на вывод if [ ! -e /sys/class/gpio/gpio$PORT_NUM ] then echo $PORT_NUM > /sys/class/gpio/export fi # Читаем старое состояние OLD_VALUE=$(cat /sys/class/gpio/gpio$PORT_NUM/value) if [ $OLD_VALUE == 1 ]; then OLD_VALUE_TEXT="on" else OLD_VALUE_TEXT="off" fi echo "out" > /sys/class/gpio/gpio$PORT_NUM/direction echo -ne "Switching GPIO "$PORT_NUM" from "$OLD_VALUE_TEXT" to "$2"..." echo $NEW_VALUE > /sys/class/gpio/gpio$PORT_NUM/value echo " done."

Права на исполнение:

$ chmod +x switch_gpio

И проверим:

$ switch_gpio 4 on $ switch_gpio 4 off

МОДУЛЬ РЕЛЕ

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

Задействованы другое реле (по нему чуть позже) и транзистор с диодом - те, которые оказались под рукой, близкие по характеристикам. Резистор R1 (1 кОм), диод типа КД522 (1N4148), транзистор H547. В статье есть рекомендации, как выбрать аналоги. Дополнительно стоит проверить выходной ток порта при включенном реле.


Подключаемая к схеме нагрузка составляет 640 Вт. Это значит, что при напряжении в 220 В ток составит 640 Вт / 220 В = 2,9 А. Еще одно требование к реле - чтобы замыкались и размыкались сразу два провода и нагрузка полностью обесточивалась. Один из вариантов, подходящий под такие требования, - реле TRIL-5VDC-SD-2CM-R, управляемое от 5 В и способное коммутировать до 8 А переменного тока 250 В.

Начать монтаж можно на контактной макетной плате. Конечно, для серьезных задач она не подходит, но такие вот небольшие схемы на ней можно быстро собрать и отладить. Сначала запитываем от отдельного источника +5 В, все проверяем без подключения к RPi, заменив подключение к порту резистором и кнопкой к +5 В, промеряем все токи и ставим разъем для подключения к основной плате RPi. Подключать 220 В к такой плате категорически нельзя, поэтому все равно придется брать паяльник в руки и переносить это на печатную плату.

Для подключения к основной плате RPi можно собрать шлейф из пары разъемов и плоского кабеля, подключить к нему промежуточную плату, на которой уже разводятся нужные порты и питание на шлейфы к периферийным устройствам, пока всего на один, уже не 26-, а 4-проводной шлейф. Он подключается к монтажной плате, на которой собирается в точности то же, что и в первом варианте, добавлением клеммников для 220 В. Клеммники распаиваем на реле проводом сечением 0,75, аккуратно проверяем тестером работоспособность схемы, пощелкав реле. Дополнительно можно развести землю. Затем подключаем провода к клеммам, также сечением 0,75, на одномй из которых ставится вилка, на другой - розетка на провод.


Дальше осторожно и аккуратно: 220 В частотой 50 Гц - напряжение, при неаккуратной работе с которым последствия могут быть намного трагичнее, чем сгоревшая RPi. Визуально проверяем пайку на плате реле, проверяем надежность закрепления проводов 220 В в клеммники. Фиксируем плату, а лучше устанавливаем ее в закрытый корпус, чтобы случайно не задеть открытые контакты под напряжением. Не торопимся и последовательно на каждом шагу проверяем тестером. Отключаем плату реле от основной платы RPi, втыкаем вилку в 220. Дыма нет. Отключаем от сети, подключаем основную плату RPi, опять включаем в 220. Дыма опять нет, RPi жива. Щелкаем реле, видим 220 на розетке. Отключаем реле и 220, подключаем к розетке настольную лампу, подаем 220, щелкаем реле. Ура!

Рис. 5. Второй вариант модуля реле, распаянный на печатной макетной плате
с промежуточной коммутационной платой

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

УПРАВЛЕНИЕ ПОРТАМИ С ПОМОЩЬЮ WEBIOPI

Самый простой способ достучаться до портов GPIO через веб - установить WebIOPi. Это приложение, позволяющее визуально задавать направление работы порта (ввод/вывод), видеть его состояние при вводе и задавать значение на выводе.

Установка подробно описана .

$ sudo apt-get install apache2 php5

Для работы WebIOPi использует модуль rewrite и переопределение конфигурации (.htaccess):

$ sudo a2enmod rewrite $ sudo nano /etc/apache2/sites-enabled/000-default

В разделе изменить строку «AllowOverride None» на «AllowOverride All»:

Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all

Добавить пользователя Apache (www-data) в список sudoers:

$ sudo visudo

Дописав следующую строку в конце файла:

Www-data ALL=(ALL) NOPASSWD: ALL

Рестартовать Apache:

$ sudo /etc/init.d/apache2 restart

$ wget //webiopi.googlecode.com/files/WebIOPi-0.3.tar.gz $ tar xvzf WebIOPi-0.3.tar.gz

Переместить файлы в соответствующий каталог:

$ sudo mv webiopi /var/www

Основной интерфейс доступен по адресу: //localhost/webiopi.

Если открывать страницу непосредственно с RPi, то нужно это делать в Chromium или Midori, ни в NetSurf, ни в Dillo она не работает из-за отсутствия в них поддержки JavaScript.

СВЯЗЫВАЕМ ВСЕ ВМЕСТЕ

Для управления портом из браузера через веб вполне достаточно веб-интерфейса WebIOPi, при желании его можно настроить под свои нужды. Для включения реле при детектировании движения добавим старт Motion в заданное время утром, например в 8:00, в /etc/crontab:

0 8* * * echo $(date)": "$(service motion start) >> /var/log/motion_start.log

Crontab /etc/crontab

Создадим скрипт, который будет запускаться из Motion:

$ nano /home/pi/motion_det

#!/bin/bash /home/pi/switch_gpio 4 on service motion stop sleep 1800 /home/pi/switch_gpio 4 off

Права на исполнение:

Chmod +x /home/pi/motion_det

Теперь в восемь утра будет запущен Motion, который начнет детектировать движение. Когда движение будет обнаружено, запустится скрипт motion_det, который выдаст логическую единицу на порт GPIO 4, подав напряжение на реле и включив кофеварку, остановит Motion, подождет 30 минут и выдаст на тот же порт логический ноль, отключив нагрузку.

ЗАКЛЮЧЕНИЕ

Большая часть компонентов приобретена в «Чип и дип» (включая корпуса, кабельные вводы, платы, переходник и так далее). Это магазин с хорошим выбором, в который можно зайти, посмотреть и потрогать, но недешевый, есть ощутимо бюджетнее. Те, кто не хочет долго ждать доставки RPi, уже могут ее приобрести, например в «Терраэлектронике», хотя и совсем не за 25 долларов.

Чтобы не помешала темнота зимними утрами, вместо камеры (или в дополнение к ней) можно подключить ИК датчик движения. Можно разобраться в кофеварке эспрессо с автоматическим приготовлением и не задумываться вечером о том, что нужно засыпать кофе на следующее утро. Можно подключить реле через ZygBee, добавить других исполнительных устройств, например светильник в спальне. Можно реализовать управление через SMS, подключив 3G-модем, либо с обычного телефона через DTMF, подняв Asterisk или Freeswitch. А можно написать приложение для Андроида и iPhone/iPad.

Вариантов очень много, и с появлением RPi возможности экспериментировать на границе между программированием и физическим миром резко расширились. Да, и, конечно, ближайшего первого апреля нужно будет задуматься о полной поддержке стандарта RFC 2324.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: