Удаленный доступ к датчикам с помощью Raspberry Pi и Фреймворка WebIOPi

Скачать Viber 23.06.2019
Скачать Viber

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

В данной статье мы рассмотрим управление входами/выходами (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

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

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

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

Оборудование и программное обеспечение

  • 1 x ;
  • 1 x кабель Ethernet;
  • 1 x ноутбук или стационарный ПК;
  • 1 x SD карта (минимальный размер 4 ГБ);
  • 1 x кабель Micro USB (чтобы запитать Raspberry Pi).

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

  • Raspbian OS : когда вы покупаете Raspberry Pi, у вас есть возможность (в некоторых магазинах) купить предустановленную на SD карту операционную систему, либо просто скачать zip-файл c https://www.raspberrypi.org/downloads/ , который содержит образ Raspbian OS, чтобы записать его на вашу SD карту;
  • SDFormatter : у SD Card Association есть очень хорошее ПО, которое может быть использовано для форматирования вашей SD карты. Посетите https://www.sdcard.org/downloads/formatter_4/index.html и скачайте SDFormatter для вашей операционной системы;
  • Win32DiskImager : чтобы записать Raspbian OS на вашу SD карту, вам понадобится полезная утилита Win32DiskImager. Скачать её можно здесь ;
  • : вам будет необходимо определить IP адрес вашего Raspberry Pi, когда подключите его компьютеру. Просто скачайте эту программу http://www.advanced-ip-scanner.com/ ;
  • PuTTy : PuTTy - это SSH клиент, который будет использоваться для подключения к Raspberry Pi. Вы можете скачать его здесь http://www.putty.org/ ;
  • VNC : и последнее это VNC сервер. Скачать его можно здесь https://www.realvnc.com/download/ .

Когда скачаете всё это программное обеспечение, распакуйте и установите его.

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

  1. Вставьте SD карту в картридер и проверьте, какая буква была присвоена диску.
  2. Откройте Win32DiskImager, возможно понадобится запустить его от имени администратора.
  3. Выберите образ распакованной Raspbian OS.
  4. Выберите букву, присвоенную вашей SD карте, в выпадающем списке устройств. Убедитесь в том, что выбрали правильную букву диска, чтобы не повредить данные на каком-либо другом диске.
  5. Нажмите Записать (Write ) и ждите завершения.
  6. Закройте Win32DiskImager, выньте SD карту и вставьте её в Raspberry Pi.

Примечание: после записи операционной системы вы заметите, что на SD карте осталось лишь несколько мегабайт. Это из-за созданного раздела, остальная часть свободного пространства скрыта. Вы сможете это исправить, как только мы подключимся к Raspberry Pi.

Общий интернет через Ethernet порт

Как только SD карта будет готова, вставьте её в Raspberry Pi. Подключите USB кабель питания. А также соедините Raspberry Pi и ноутбук кабелем Ethernet.

Если вы подключаете Raspberry Pi к роутеру с доступом к интернету, то этот шаг можно пропустить.

Проверка IP адреса, присвоенного вашему Raspberry Pi

Это просто, убедитесь, что ваш Raspberry Pi подключен к Ethernet сети вашего компьютера (напрямую или через роутер). Если всё работает нормально, вы увидите, что светодиоды на плате мигают.


Подключение к Raspberry Pi через PuTTy

Отлично! Перед тем, как продолжить, посмотрим, что у нас уже сделано к текущему моменту.

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

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

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



Рекомендуем почитать

Наверх