Телевизоры

Web управление raspberry pi gpio. Назначение Raspberry Pi статического IP адреса

Web управление raspberry pi gpio. Назначение Raspberry Pi статического IP адреса

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

Особенности данного проекта:
- серверная программа, запущенная на Raspberry Pi для чтения значений GPIO
- использование MySQL базы данных для хранения состояния GPIO
- использование веб-сервера Apache2 для контроля GPIO через веб-браузер

Итак, первое, что вам необходимо установить на Raspberry Pi, это:
- Apache веб-сервер
- PHP5
- MySQL сервер
- phpMyAdmin (есть русская версия)

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

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

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

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

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

Для начала скачайте данный SQL файл . Он содержит команды для создания базы данных, таблиц и их содержимого. Затем, войдите в phpMyAdmin и в вкладках выберите Import (Импорт). Выберите файл gpio.sql на вашем диске и нажмите кнопку Go для импортирования. После этого, phpMyAdmin создаст БД, таблицы и данные в них.

Вбиваем User name (Имя пользователя) gpio (желательно, чтобы оно совпадало с именем базы данных), Host - localhost, и 2 раза пароль.

Затем переходим к списку пользователей, находим нашего и нажимаем ссылку Edit Privileges (Редактировать права). В вкладке Database-specific privileges в выпадающем списке находим и выбираем нашу БД gpio. А затем нажимаем Go.

Нажимаем Check All (Выбрать все), чтобы назначить пользователю gpio все права на БД gpio.

На этом установка и настройка БД завершена.

Шелл скрипт

Скачайте скрипт, введя следующие команды:
sudo -i
wget http://raspberrypi-gpio.googlecode.com/files/GPIOServer.sh

После того, как скрипт скачается, выполните команды установки прав на файл и редактирования скрипта в редакторе nano:
chmod +x GPIOServer.sh
nano GPIOServer.sh

В строки mysqlusername="USERNAME HERE" и mysqlpassword="PASSWORD HERE" вы должны вписать имя пользователя (gpio) и пароль к нему.

Затем сохраните изменения в файле нажав ctrl+x, а затем y и ввод.

Настройка Web-страницы

Теперь необходимо скачать файлы для работы веб-интерфейса. Войдите под root"ом и выполните следующие команды:
wget http://raspberrypi-gpio.googlecode.com/files/control.php
wget http://raspberrypi-gpio.googlecode.com/files/off.jpg
wget http://raspberrypi-gpio.googlecode.com/files/on.jpg

После того, как эти файлы скачаются, наберите:
mv control.php /var/www/control.php
chmod 755 /var/www/control.php
mv off.jpg /var/www/off.jpg
chmod 755 /var/www/off.jpg
mv on.jpg /var/www/on.jpg
chmod 755 /var/www/on.jpg

Этими командами мы переместим файлы в папку www и установим для них соответствующие права.

Находим следующие строки:
$MySQLUsername = "USERNAME HERE";
$MySQLPassword = "PASSWORD HERE";

и вписываем имя пользователя и пароль.

Открываем в браузере файл control.php (у меня полный путь выглядит как http://raspberryPi/control.php)
Если спросит авторизацию, то:
Username: admin
Password: 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)

Так сложилось, что первая программа, которую человек пишет при изучении программирования называется «Hello World!». Суть этой программы сводится к тому, чтобы после запуска на экране появилась указанная простая фраза. Обычно для этого используется всего несколько строк кода.

В мире микроэлектроники, аналогичной задачей можно считать управление светодиодом. А именно, периодическое включение и выключение — мигание. В этом уроке мы как раз займемся подключением светодиода к Raspberry Pi и составлением программы на языке python, заставляющей этот светодиод мигать.

1. Выводы общего назначения Raspberry Pi (GPIO)

Одно из главных преимуществ Raspberry Pi - это наличие выводов общего назначения (General Purpose Iinput/Outputs). GPIO - это группа контактов, которыми можно управлять с помощью программы. Причем управление это может быть совсем простым, например, включение/выключение светодиода. Либо весьма сложным - обмен данными с периферийными устройствами по специализированным протоколам.

В терминах цифровой электроники, управлять — значит менять на выводе уровень напряжения. Другими словами, все что мы можем сделать с помощью программы — это соединить желаемый вывод либо с контактом питания (+3.3 В), либо с землей (Gnd). Изобразим это на принципиальной схеме.

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

Если мы в программе подаем на вывод №23 истину True, то Raspberry Pi соединит этот вывод с питанием +3.3В, и через резистор побежит ток. Если же мы передадим ложь — False, то контроллер соединит вывод №23 с землей, и с обоих концов от резистора окажутся равные потенциалы — ток никуда не побежит. То есть, с помощью программы мы как бы щелкаем невидимым переключателем, то вверх, то вниз!

Когда мы коснемся составления программы для мигания светодиодом, то узнаем как передавать истину и ложь на выводы общего назначения Raspberry Pi.

Светодиод - это устройство, которое представляет собой полупроводниковый прибор, способный излучать свет при пропускании через него электрического тока в прямом направлении (от анода к катоду). Ниже приведена схема типичного светодиода с линзой.

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

  • анод светодиода имеет более длинный проводник;
  • со стороны катода, корпус светодиода немного срезан.

А вот так выглядят светодиоды «вживую».

Это обычные одноцветные светодиоды. А бывают еще двух, и даже трехцветные. Так, например, выглядит трехцветный (RGB) светодиод:

У этого светодиода сразу четыре ноги. Одна - катод, а три другие - аноды для трех разных цветов.

В современной микроэлектронике применяются миниатюрные светодиоды для поверхностного монтажа. Такие индикаторы, например, имеются на Raspberry Pi для информирования пользователя о состоянии системы.

3. Схема включения

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

Принципиальная схема

Внешний вид макета

В схеме, помимо самого светодиода присутствует резистор. Зачем он нужен? Дело в том, что если подключить светодиод напрямую к источнику напряжения 3.3 Вольт (а именно такое рабочее напряжение у Raspberry Pi), то светодиод непременно выйдет из строя!

Для правильной работы светодиода необходимо строго выдерживать рабочий ток и напряжение. Например, обычный красный светодиод имеет рабочий ток 20 мА, при напряжении от 1.8 до 2 Вольт. Резистор позволяет нам снизить напряжение в цепи и установить нужный ток. Такой резистор еще называют токозадающим.

I = U/R;

Сила тока, протекающая через некий элемент равна отношению напряжения, приложенного к этому элементу на его сопротивление.

Выразим из этой формулы сопротивление R:

Как уже было замечено, Raspberry Pi работает с напряжением 3,3 Вольта. Значит, чтобы на светодиоде осталось 2 Вольта, нам нужно куда-то убрать лишние 1,3 Вольта. Заставим резистор съесть их!

Получается, нам нужно подобрать сопротивление резистора таким образом, чтоб он убрал лишние 1,3 Вольта, при токе 20 мА. Подставим эти числа в полученную формулу:

R = 1,3В/20мА = 1,3В/0,02ОА = 130/2 = 65 Ом

Таким образом, в Raspberry Pi токозадающий резистор для красного светодиода имеет номинал 65 Ом. Именно его мы и должны установить в схему.

Если под рукой нет резистора именно на 65 Ом, то можно использовать любой другой большего номинала, например, 100 Ом или даже 200 Ом. Просто светодиод будет гореть чуть менее ярко.

4. Программа

Теперь приступим к составлению программы, которая будет управлять включением и выключением светодиода по нужному нам алгоритму. Для примера, включим светодиод на 5 секунд, а затем выключим.

Первое, что нам нужно сделать — это задать тип нумерации выводов общего назначения. Есть два типа. Первый тип — это нумерация разъема, а второй тип — нумерация выводов микропроцессора. На рисунке изображен разъем GPIO.

Слева на право начинается нумерация первого типа: 1,2. За ней не подписано, но идет по порядку: 3,4 — 5,6 — и т.д. В конце разъема — 39,40.

Сверху и снизу идет нумерация процессора (BCM). На нашей схеме мы подключили светодиод к выводу №23 согласно нумерации BCM.

В программе тип нумерации задается с помощью функции setmode :

GPIO.setmode(GPIO.BCM)

Теперь нужно задать режим работы вывода №23. Всего есть два режима: вывод (OUT) и ввод (IN). Мы хотим управлять светодиодом, значит нам нужен режим «вывод». А вот если бы мы хотели прочитать какой-то сигнал, например, с датчика, то следовало бы выбрать режим «ввод».

GPIO.setup(23, GPIO.OUT)

Чтобы подать на вывод №23 истину, используем функцию output :

GPIO.output(23, True)

Помимо этих функций, нам понадобится пауза sleep . Эта функция ставит на паузу выполнение программы. В качестве аргумента указывается количество секунд паузы.

Sleep(5)

Наконец, чтобы функции работы с GPIO и sleep работали, в самом начале программы подключим две библиотеки:

From RPi import GPIO from time import sleep

Итак, вся программа целиком.

From RPi import GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23, True) sleep(5) GPIO.output(23, False) GPIO.cleanup()

5. Мигание светодиодом в цикле

Усовершенствуем программу таким образом, чтоб светодиод мигал непрерывно с частотой 1 Герц (то есть один раз в секунду). Для этого нам нужно будет добавить в программу оператор цикла while .

From RPi import GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) while True: GPIO.output(23, True) sleep(0.5) GPIO.output(23, False) sleep(0.5) GPIO.cleanup()

Цикл while будет работать пока истинно условие, указанное в нем. Чтобы цикл работал без остановки, в качестве условия мы поставили True .

Составленная нами программа имеет один неприятный изъян. Если мы ее запустим, она войдет в бесконечный цикл и мы не сможем её остановить штатными средствами. А если мы её остановим нештатно, то не выполнится функция cleanup , что нежелательно.

Добавим в программу еще одну конструкцию, которая позволит нам в любой момент прервать работу цикла с помощью комбинации клавиш Ctrl+C. При этом программа завершится в нормальном режиме и выполнит функцию cleanup .

From RPi import GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) try: while True: GPIO.output(23, True) sleep(0.5) GPIO.output(23, False) sleep(0.5) except KeyboardInterrupt: print "program stop" GPIO.cleanup()

Задания

Наконец, немного поиграем со светодиодами на Raspberry Pi.

  1. Сирена. Подключить два светодиода и мигать ими на манер полицейской сирены — первый гаснет, второй зажигается. Один светодиод оставить на выводе №23, второй можно подключить к соседнему №24.
  2. SOS. Генерировать сигнал SOS с помощью азбуки Морзе. Три раза мигнуть быстро — с периодом 0.5 секунды, затем три раза с периодом 1 секунда, наконец еще три раза опять быстро.

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 даст моей дочери и ребятам в гимназии мощный импульс в учебе и развитии, раскроет новые возможности изменения себя и окружающего мира к лучшему при помощи современных технологий.

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

Для получения удаленного доступа к датчикам возможно использование микроконтроллеров или одноплатных миникомпьютеров. В этой работе для решения задачи получения доступа к датчикам рассматриваются одноплатные миникомпьютеры. В настоящее время наиболее популярными и покупаемыми являются Raspberry Pi 2, Banana Pi 2 и Orange Pi PC (см. рисунок 1).

Рис.1. Одно платные миникомпьютеры

Эти компьютеры объединяет:

  1. Малые размеры, с кредитную карточку;
  2. Четырехядерный процессор, который работает на всех компьютерах примерно на частоте 1-1.2 ГГц;
  3. Оперативная память 1 ГБайт;
  4. SD card вместо диска для загрузки операционной системы и программ;
  5. Ethernet порт для подключения к сети;
  6. HDMI выход для подключения монитора или телевизора;
  7. USB порты для подключения, например клавиатуры, мыши, флешь памяти.
  8. Операционная система Linux;
  9. И главное - 40-а пиновый GPIO порт, к которому подключаются устройства, датчики, которыми надо управлять.

Главная задача - это выбор компьютера для удаленного управления.

  1. Стоимость (на 25.02.2016, сайт http://ru.aliexpress.com с доставкой):

Raspberry Pi 2 - $36.99;

Banana Pi 2 (BPI-M2 A31S) - $50.21

Orange Pi pc - $18.99

  1. Быстродействие процессора + памяти:

По вычислительным тестам с использованием 4-х ядер

Banana Pi 2 (BPI-M2 A31S);

Raspberry Pi 2.

При использовании одного ядра для вычислительных работ (задача не распараллелена)

Banana Pi 2 (BPI-M2 A31S);

Raspberry Pi 2.

Отмечают, что у Orange Pi работает 3 ядра, 4-й не всегда запускается.

3.Техническая поддержка и наличие отлаженного программного обеспечения:

Raspberry Pi 2 - (1); Banana Pi 2 - (2); Orange Pi pc - (3).

У Orange Pi pc пока нет главного условия для управления устройствами - это программной поддержки порта GPIO.

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

  1. Arduino Mega256 с Ethernet Shied w5100 - $12-15;
  2. Arduino nano с контроллером сети enc28j60 - $8-9;
  3. ESP8266-12 - $2-3;

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

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

При подключении к компьютеру с помощью браузера на экране должны отображаться давление и температура. Их значения должны изменяться каждые 5 секунд.

Скрипт на Питоне должен записывать давление и температуру в файлы каждые 5 минут. Они используются для построения графиков.

Необходимо предусмотреть управление устройством и в случае отсутствия у него реального IP - адреса (DNS имени). Необходимо лишь подключение к Интернет, например через стандартный ADSL модем с установленным NAT.

Рассмотрим последовательность решения задачи.

1. Установка операционной системы Raspbian.

Для этого необходимо с сайта https://www.raspberrypi.org/downloads/raspbian/ скопировать образ операционной системы RASPBIAN JESSIE, например на компьютер под управлением Windows 8.1. Разархивировать этот файл. Скопировать дисковую утилиту Win32DiskImager с сайта http://sourceforge.net/projects/win32diskimager , разархивировать ее. Установить SD card на компьютер и с помощью дисковой утилиты установить на SD образ операционной системы. После этого эта SD card устанавливается в компьютер Raspberry Pi. К компьютеру необходимо подключить монитор, клавиатуру, мышь и кабель Ethernet. После подключения питания компьютер автоматически загружается и на экране появляется меню предварительной настройки, которое формируется файлом raspi-config. Опции этого файла есть в ссылке https://www.raspberrypi.org/documentation/configuration/raspi-config.md

2. Назначение Raspberry Pi статического IP адреса

Raspberry Pi выполняет функцию web - сервера, поэтому он должен иметь статический ip адрес. Для этого:

Меняем содержимое файла /etc/network/interfaces на

iface lo inet loopback

iface eth0 inet static

address 172.20.0.138

netmask 255.255.0.0

gateway 172.20.200.1

dns-nameservers 8.8.8.8

Полностью удаляем из системы dhcpcd5, выполнив команду

sudo apt-get purge dhcpcd5

3. Следующим этапом является установка Фреймворка WebIOPi.

Фреймворк WebIOPi представляет пакет программ, специально разработанный для Raspberry Pi для удаленного управления устройствами. Совместно с Raspberry Pi 2 он реализует технологию Internet of Things (Интернет вещей). Пакет WebIOPi позволяет создавать различные пользовательские приложения.

WebIOPi имеет следующие возможности:

Встроенный Web - сервер, реализованный на языке Python

Встроенную поддержка более чем 30 устройств с интерфейсами UART, SPI, I2C, 1-Wire

Библиотеки Javascript / HTML для создания Web-интерфейса

Библиотеки Python / Java для создания приложений для Android

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

WebIOPi имеет открытый код, который может быть изменен пользователем. Это позволяет увеличить количество задач для решения. Для настройки пакета под конкретную задачу изменяется файл конфигурации. Например, в этот файл записываются GPIO pins, к которым подключены устройства. Если используются датчики, их также заносят в конфигурационный файл. Однако необходимо в некоторых случаях включить драйвер устройства (например датчика bmp180). Рассмотрим установку версии 0.71 WebIOPi. Эта новая версия хорошо поддерживает Raspberry Pi 2, имеющего 40 пинов порта GPIO. Для установки WebIOPi, заходим в Raspberry Pi 2 через 22 порт программы putty (логин - pi, пароль - raspberry) и в терминале вводим поочередно следующие команды:

$ wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz

$ tar xvzf WebIOPi-0.7.1.tar.gz

$ cd WebIOPi-0.7.1

Устанавливаем patch, чтобы работать с 40 GPIO Raspberry Pi 2:

$wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch

$ patch -p1 -i webiopi-pi2bplus.patch

$ sudo ./setup.sh

Для автоматического запуска WebIOPi после перегрузки системы необходимо выполнить команду (справедливо для образа 2015-05-05-raspbian-wheezy.img):

sudo update-rc.d webiopi defaults

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

$ cd /etc/systemd/system/

$ sudo wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi.service

$ sudo systemctl start webiopi

$ sudo systemctl enable webiopi

После чего перезапускаем Raspberry Pi 2:

Теперь необходимо проверить работу WebIOPi. С любого компьютера в локальной сети набираем сетевой адрес, присвоенный Raspberry Pi 2 с указанием порта 8000. Например:

http://172.20.0.138:8000/app/gpio-header

Для доступа к WebIOPi необходимо в открывшейся форме ввести логин и пароль. По умолчанию логин «webiopi», пароль - «raspberry». Браузер выведет интерфейс программы WebIOPi , на котором представлены номера 40-а пинов порта GPIO и их назначение. Для изменения логина и пароля вводится команда:

sudo webiopi-passwd

Для настройки WebIOPi под задачу необходимо датчик давления и температуры BMP180 прописать в конфигурационном файле /etc/webiopi/config Webiopi в секции :

На рисунке 2 показана схема подключения датчика к пинам порта GPIO.

Рис.2. Подключение BMP180 к GPIO

В файл /boot/config.txt необходимо добавить строку

dtparam=i2c_arm=on

Изменение пароля Webiopi выполняется командой

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

http://172.20.0.138:8000/app/devices-monitor

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

Рис.3. Данные, считанные с датчика BMP180

Для перегрузки WebIOPi после внесения изменений в конфигурационный файл, скипт на Python и html файл, необходимо выполнить:

/etc/init.d/webiopi restart

Сообщения об ошибках при запуске Webiopi находятся в файле /var/log/webiopi. Его можно распечатать по команде:

cat /var/log/webiopi

4. Создание файла index.html и скрипта на Python script.py

Необходимость этих файлов в следующем. HTML-страница посредством JavaScript выполняет запрос к скрипту (подпрограмме), написанной на Python, а Python в свою очередь возвращает на HTML-страницу полученные данные с датчика BMP180 для их визуализации. Каждые 5 минут скрипт записывает значения давления и температуры в текстовый файл. Этот файл используется для построения графиков давления и температуры для изменяющегося времени.

В каталоге /home/pi/myproject/html создаем файл index.html, содержание которого представлено на рис 4. А в каталоге /home/pi/myproject/python создаем файл script.py на Python, представленный на рис. 5

Рис.4. Файл index.html

Файл press.html показан на рис. 6. Аналогично выглядит файл temp.html для формирования графика температуры.

Рис.5. Файл script.py

Рис.6. Файл press.html для формирования графика давления

HTML файлы press.html и temp.html для построения графиков давления и температуры используют готовую библиотеку dygraph, которая написана на JavaScript. Файл dygraph-combined-dev.js этой библиотеки копируется с сайта

http://dygraphs.com в каталог /home/pi/myproject/html.

После перегрузки компьютера WebIOPi будет работать по представленным скриптам. Если подключиться к нему через браузер, информация о давлении и температуре будет представлена как на рисунке 7.

Рис.7. Данные, полученные с датчика BMP180

Рис.8. График давления, полученный с помощью библиотеки dygraph

5. Подключение к сети Интернет компьютера Raspberry Pi 2, если он не имеет реального ip-адреса или доменного имени, но имеет выход в Интернет (через модем, router, межсетевой экран).

Одним из способов получения доступа к Raspberry Pi как к устройству Интернет вещей является использование сервиса Weaved. Он предлагает следующие услуги:

SSH - позволяет войти в Raspberry Pi с любой точки мира по SSH;

Web (http) on port 80 - можно просматривать web - страницы с любой точки мира, размещенные на Raspberry Pi;

WebIOPI - позволяет управлять пинами GPIO порта Raspberry Pi, используя разработанное пользователем программное обеспечение.

Перед установкой Weaved желательно создать каталог /home/pi/myproject/my, зайти туда и работать там с файлами Weaved.

Установка Weaved на Raspberry Pi:

Необходимо на сайте https://developer.weaved.com/portal/login.php получить аккаунт;

Подключить Raspberry Pi 2 к Интернет;

Загрузить Weaved Software на Raspberry Pi:

wget https://github.com/weaved/installer/raw/master/binaries/weaved-nixinstaller_1.2.13.bin

Сделать файл weaved-nixinstaller_1.2.13.bin исполняемым:

chmod +x weaved-nixinstaller_1.2.13.bin

Запустить программу установки:

./weaved-nixinstaller_1.2.13.bin

Выбрать услугу

При первом запуске программы будет предложено установить одну из услуг: SSH на порт 22, Web (HTTP) на 80-й порт, WebIOPi на порту 8000, VNC на порт 5091 (протестирован с tightvncserver), или пользовательский TCP на выбранном порту.

Выбираем здесь 3-ю услугу, Web (HTTP) на 8000-й порт.

Ввести информацию для входа в Weaved (ввести аккаунт, который был получен на сайте Weaved).

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

Заходим по адресу https://developer.weaved.com/portal/login.php и вводим свой аккаунт. После входа должна появиться следующая страничка (рис. 9), где указано имя созданного устройства:

Рис.9. Листинг созданных сервисов

Выводы.

  1. Высокая надежность управления удаленными сенсорами (оборудованием) с помощью миникомпьютеров через сеть Интернет по сравнению с микроконтроллерами. Сетевые протоколы на микроконтроллерах облегченные, поэтому работают не так надежно.
  2. Высокая стоимость систем управления на миникомпьютерах через сеть по сравнению с микроконтроллерами.
  3. Простота программирования систем сетевого управления для миникомпьютеров, в связи с разработанным программным обеспечением, подобным WeBIOPi.
  4. Возможность получения доступа к миникомпьютерам через Интернет в случае невозможности использования реальных IP - адресов и доменных имен.
  5. Обнаружены проблемы при работе с модулем BMP085 для датчика давления BMP180. После нескольких часов работы перестает работать Web - сервер WebIOPi. Вместо работы с модулем BMP085

from webiopi.devices.sensor.bmp085 import BMP085

лучше использовать модуль deviceInstance

from webiopi import deviceInstance

bmp = webiopi.deviceInstance("bmp")

Здесь ("bmp") - это получить устройство с именем bmp, которое находится в файле

/etc/webiopi/config, в секции .

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

Литература.

  1. WebIOPi - The Raspberry Pi Internet of Things Framework. . - Mode of access: http://webiopi.trouch.com/, 2016.
  2. Internet of Things for Everyone. . - Mode of access: https://www.weaved.com/ , 2016.
  3. Комплексная система домашней автоматизации на Raspberry Pi. . - Mode of access: http://electromost.com/ , 2014.
  4. Мясищев А.А. Интернет электро - розетка на основе мини компьютера Raspberry Pi и фреймворка WebIOPi. Практика для студентов. . - Mode of access: https://sites.google.com/site/webstm32/internet_rozetka, 2016.