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

Автор: Мясіщев Олександр Анатолійович

Дата публікації: 15 березня 2016 р. 04:31:57 GMT / Категорія: Сучасні розробки

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

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

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

- Orange Pi pc;

- Raspberry Pi 2.

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

- Orange Pi pc;

- 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 на

auto lo

iface lo inet loopback

auto eth0

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:

sudo reboot

Теперь необходимо проверить работу 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 в секции [DEVICES]:

bmp = BMP085

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

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

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

dtparam=i2c_arm=on

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

$ sudo webiopi-passwd

Далее выполняем перегрузку компьютера командой reboot.

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

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.

Рис.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).

Далее вводится имя своего устройства, например webiopi80.

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

Заходим по адресу 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

bmp = BMP085()

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

from webiopi import deviceInstance

bmp = webiopi.deviceInstance("bmp")

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

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

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

Литература.

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