Web-управление raspberry pi gpio

Удаленный доступ к датчикам с помощью 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.

Источник: http://ksm.khnu.km.ua/blog/index/12

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

Далее, необходимо создать и добавить пользователя к БД и установить права. Для этого переходим по вкладке Users (Пользователи) и нажимаем ссылку Add User (Добавить пользователя)

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

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

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

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

Шелл скрипт

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

sudo -i

Источник: http://shemopedia.ru/web-upravlenie-raspberry-pi-gpio.html

Веб-контроль Raspberry Pi GPIO

Доброго времени суток! В этом посте я хочу показать, как управлять электроникой через Интернет используя Raspberry Pi. Выглядеть это будет примерно вот так.

Краткое описание:

  • Серверная программа, которая работает на Raspberry Pi, для того чтобы читать переменные
  • Базы данных MySQL для хранения переменных
  • Веб-страница Apache2, для того чтобы контролировать переменные

Шаг 1. База знаний

Это уже должно быть на вашем Raspberry Pi:

  • Веб-сервер Apache
  • PHP5
  • Сервер MySQL
  • phpMyAdmin

Если хотите узнать, как всё это настроить, вам сюда (инструкция на английском языке).

Шаг 2. Создание root аккаунта

Пропустите это, если у вас уже есть аккаунт, а если нет — продолжайте прочтение 🙂 Войдите в Raspberry Pi используя следующую команду:

sudo -i

passwd root Теперь введите и подтвердите пароль для учётной записи. Затем нужно закрыть SSH сессии и перезапустить его, войдя в систему как root.

Шаг 3. Настройка баз данных и phpMyAdmin

Это решение основано на базах данных MySQL, сейчас мы их и настроем.

Итак, для начала скачайте этот файл.

Залогиньтесь в панели управления phpMyAdmin и нажмите кнопку “Import” в верхнем меню.

Теперь, в пункте “File to Import“, нажмите кнопку “Choose File” и выберите файл, который скачали до этого (gpio.sql).
И в завершении нажмите кнопку “Go” внизу страницы. Это позволит создать все необходимые таблицы.
Теперь вам нужно добавить нового пользователя в базы данных используя phpMyAdmin. Для того чтобы это сделать, вам следует:

  • Кликнуть на “Users” вверху страницы.
  • Теперь жмите на ссылку “Add User“.
  • В поле “User name” введите нужное вам имя пользователя. У ввёл “gpio“.
  • В поле “Host” введите “localhost“.
  • Затем в двух полях введите подходящие пароли. (Без пробелов, переносов или специальных символов). Я ввёл “pr03ND2“.
  • Все остальное остальное оставьте по умолчанию, а затем нажмите кнопку “Add User” кнопку в правом нижнем углу.

В заключительной части этого шага нужно дать пользователю нужные привилегии.

  • Нажмите на кнопку “Users” в верхнем меню, затем пролистывайте вниз до тех пор, пока вы не увидете только что добавленного вами пользователя в таблице “Users Overview“.
  • Напротив имени пользователя нажмите на ссылку “Edit Privileges“.
  • Листайте внизу к пункту “Database-specific privileges” и выберите “gpio” из выпадающего списка, нажмите кнопку “Go“.
  • Отметьте ВСЕ флажки и нажмите кнопку “Go” слева снизу.

Шаг 4. Shell Script

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

  • sudo -i и нажмите Return / Enter

Источник: https://habr.com/post/162651/

Делаем интернет-кофеварку с Raspberry Pi – «Хакер»

Содержание статьи

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

Многие любители кофе мечтают, чтобы к пробуждению их уже ждал горячий кофе. На мечты наложились разговоры про «умный дом», контроллеры, сенсоры, а тут еще я заказал плату Raspberry Pi (RPi) «на поиграть» — в общем, судьба ее была решена.

Если в 1998-м управление кофеваркой через веб действительно выглядело забавным, то в наше время это вполне можно сделать своими руками. С такой же игрушкой, как RPi, радости будет вдвойне.

На ее фоне пылящийся в коробке Ардуино Мега 2560 кажется случайно попавшим в будущее из мира 8-разрядных процессоров 80–90-х годов раритетом, к которому зачем-то прикрутили Wi-Fi, шилды и сенсоры.

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

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

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

От кофеварки требуется немного. Тип — капельный: и цена значительно меньше, и кофе, на мой вкус, мягче, чем в эспрессо. И главное — минимум электроники.

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

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

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

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

Коды моделей Raspberry Pi

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

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

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

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

Если RPi не грузится из образа, только что залитого на карту, первое, что стоит попробовать, — сменить карту SD.

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

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

$ sudo raspi-config

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

$ sudo reboot

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

$ sudo apt-get update
$ sudo apt-get upgrade Рис. 1. Конфигурационное меню raspi-config

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

$ lsusb

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

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

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

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

В качестве веб-камеры в моем варианте используется Logitech HD Webcam C525. При приобретении новой веб-камеры стоит свериться со списком оборудования, совместимого сRPI, некоторым может потребоваться USB-хаб с дополнительным питанием.

Кроме того, стоит проверить совместимость с Motion по ссылкам «Working Devices» и «Non Working Devices».

Если камеры нет в списке «Working Devices», это еще не значит, что она не заработает, но из второго списка камеру покупать точно не стоит.

$ lsusb

Bus 001 Device 007: ID 046d:0826 Logitech, Inc.

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

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

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

Motion — приложение для мониторинга сигнала с камеры, позволяющее установить, что значительная часть изображения изменилась (то есть определить движение в кадре), и в этом случае сохранять изображения и запускать внешние программы. Домашняя страница проекта.

$ sudo apt-get install motion

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

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

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

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

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

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

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

$ sudo visudo

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

motion ALL=(ALL) NOPASSWD: ALL

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

$ sudo motion -n

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

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

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

$ sudo motion -s

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

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

output_normal off
ffmpeg_cap_new off

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

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

Максимальный выходной ток, который может держать отдельно взятый порт, — 16 мА. Это значение задается программно, в диапазоне от 2 до 16 мА, после сброса оно составляет 8 мА.

Однако источник питания 3,3 В спроектирован из расчета, что максимальный ток по каждому порту (предполагая, что к ним подключена максимальная нагрузка) не превышает 2 мА. То есть если ко всем портам подключить нагрузку в 16 мА, ее не выдержит источник 3,3 В.

Более подробно о допустимом токе можно прочитать здесь, а пример на С, как им можно управлять, — здесь.

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

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

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

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

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

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

$ sudo -i

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

$ echo “4” > /sys/class/gpio/export

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

$ echo “out” > /sys/class/gpio/gpio4/direction

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

$ echo “1” > /sys/class/gpio/gpio4/value
$ echo “0” > /sys/class/gpio/gpio4/value

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

$ echo “in” > /sys/class/gpio/gpio4/direction

Считать значение на входе порта:

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

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

$ echo “4” > /sys/class/gpio/unexport

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

Источник: https://xakep.ru/2013/11/18/raspberry-pi-cofemachine/

Базовые принципы работы с GPIO Raspberry Pi

Raspberry Pi не был бы таким популярным, если в нём не предусмотрели GPIO. Этот интерфейс ввода/вывода позволяет сделать из одноплатника практически все что угодно – от удаленных управляемых машинок до систем “умного дома”.

Содержание

Raspberry Pi не был бы таким популярным, если в нём не предусмотрели GPIO. Этот интерфейс ввода/вывода позволяет сделать из одноплатника практически все что угодно – от удаленных управляемых машинок до систем “умного дома”.

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

Особенности GPIO “Малины”

В первую очередь необходимо рассмотреть ключевые особенности этого интерфейса. И самое главное в GPIO Raspberry Pi – это pings (пины). Именно они используются для связи одноплатника с периферией.

В совокупности у “Малины” есть 26 GPIO (портов), однако самих элементов больше:

  • 2 из них отвечают за подачу напряжения в 5 Вольт;
  • 2 – 3,3 Вольта;
  • 8 применяются для заземления;
  • 2 используются исключительно для подключения расширений.

Все они выстроены в 2 ряда. Если расположить плату горизонтально и так, чтобы интерфейс оказался вверху, то к первой паре элементов можно подключать (запитывать) устройства, требующие напряжения в 5 Вольт. Снизу, в свою очередь, находится 1 на 3,3, а второй такой же располагается в этом же ряду, примерно посередине – между 22 и 10 портами.

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

Через что возможно взаимодействовать с GPIO Raspberry

Работать с GPIO Raspberry Pi можно практически через любой инструмент. К сегодняшнему дню созданы соответствующие библиотеки почти под все распространенные языки программирования. С GPIO Raspberry Pi возможно взаимодействовать даже через PHP и JavaScript (node.js).

Однако человеку, который только начинает знакомиться с “Малиной”, рекомендуется пробовать взаимодействовать с данным интерфейсом посредством Python. Это обусловлено, во-первых, что для GPIO в Raspbian уже предустановлена соответствующая библиотека для Пайтона, а, во-вторых, этот ЯП является основным для рассматриваемого одноплатника.

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

Дополнительные утилиты для работы с GPIO

Для удобства можно установить дополнительное ПО, которое позволит более эффективно взаимодействовать с интерфейсом “Малины”. Например, некоторые из них позволяют работать с GPIO без соответствующих привилегий.

К таким утилитам, в частности, относятся: quck2wire-gpio-admin и WiringPi GPIO utility. Первая из них является более функциональной.

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

Следует отметить, что любые из указанных программ возможно легко найти в репозитории Raspbian.

Управление GPIO “Малины” через Python

И теперь самое интересное: как выполняется управление GPIO Raspberry Pi через Пайтон.

Абсолютно отсутствует необходимость рассказывать о самом языке Python и подробно описывать библиотеку. Эту информацию легко найти на официальных сайтах соответствующих проектов – лучше изложить материал, чем там, крайне тяжело.

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

Первое, что потребуется сделать – это подключить библиотеку, делается это так: import PRi.GPIO as GPIO.

Далее нужно дать интерпретатору понять, что обращение к портам будет выполняться по их названиям. Это выполняется инструкцией: GPIO.setmode(GPIO.BCM). Предварительно также рекомендуется сбросить текущее состояние интерфейса (мало ли каково оно, хотя это и не критично) – GPIO.cleanup().

Далее можно сконфигурировать порты на выход и вход. Первое делается так: GPIO.setup(НОМЕР_ПОРТА, GPIO.OUT), а второе – GPIO.setup(НОМЕР_ПОРТА, GPIO.IN).

То есть, как можно убедиться, абсолютно ничего сложного в работе с GPIO нет. Главное – знать название портов (возможно почерпнуть из схемы) и функции, предусмотренные библиотекой.

Итог: что понадобится для работы с GPIO

В завершении следует резюмировать все вышесказанное. Если вы хотите работать с GPIO, то вам потребуется следующее:

  • сама “Малина”;
  • установленная на ней Raspbian;
  • внешнее устройство, управление которым вас интересует;
  • умение работать с документацией.

Даже с нуля и без знания ЯП в GPIO Raspberry возможно более или менее освоиться за пару вечеров. Работать с интерфейсом “Малины” очень просто.

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

Со временем, с приобретением знаний и опыта можно будет реализовывать все более и более интересные вещи.

Источник: http://myraspberry.ru/bazovyie-princzipyi-rabotyi-s-gpio-raspberry-pi.html

Télécharger la vidéo, regarder gratuitement

8:35

Will Smith Bungee Jumps Out of a Helicopter!

Vues 8 975 805 88%

2:21

New Pokémon Discovered: Introducing Meltan!

Vues 2 179 322 93%

14:34

Vues 400 619 99%

2:49

BTS and Jimmy Fallon Do the Fortnite Dance Challenge

Vues 1 734 240 99%

8:59

Hasan Minhaj's Groupon Proposal Fail

Vues 397 794 98%

7:33

Archery Trick Shots 2 | Dude Perfect

Vues 6 446 928 99%

11:22

Billie Eilish Reacts To Teens React To Billie Eilish

Vues 1 839 098 99%

13:15

Steelers vs. Buccaneers Week 3 Highlights | NFL 2018

Vues 1 606 619 94%

7:05

Why colleges tolerate fraternities

Vues 953 084 78%

10:16

$10 QUEER EYE TRANSFORMATION (w/ Jon Cozart)

Vues 610 968 93%

20:25

Game Theory: How PewDiePie LOST YouTube to T Series

Vues 2 184 977 91%

14:27

Vues 4 032 012 96%

7:22

DIY 7 INGREDIENT SANDWICH STADIUM

Источник: https://frvid.com/video/web-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-gpio-%D0%BF%D0%BE%D1%80%D1%82%D0%B0%D0%BC%D0%B8-raspberry-pi-x31ZOIhR7rg.html

Кращі відео

404

CYGO – Panda E (ПАРОДІЯ)

  • Чоткий Паца
  • Переглядів 6 869 462

Что если затопить блютус колонку?

  • Тимур Сидельников
  • Переглядів 639 119

Что делать, когда скучно – 12 идей!

  • Трум Трум СЕЛЕКТ
  • Переглядів 834 143

LITTLE BIG – AK-47 (music video)

  • Little Big
  • Переглядів 4 557 448

Мои детские травмы

“Канцелярская крыса”. 1 серия

KAZKA – ПЛАКАЛА [OFFICIAL VIDEO] ПРЕМ`ЄРА

Вот и Мураева нет..

  • Анатолий Шарий
  • Переглядів 568 862

Недільне ВАТА ШОУ Андрій Полтава

  • Вата Шоу
  • Переглядів 205 363

Топ10 Дорогих ИДИОТСКИХ Вещей!

  • telblog.net
  • Переглядів 359 217

НАСТОЯЩИЕ ГЕРОИ НАШЕГО ВРЕМЕНИ #1

  • Bubble™
  • Переглядів 1 453 697

Моя Извращенная Учительница

  • Deshnov
  • Переглядів 674 924

ЗАШКВАРНЫЕ ИСТОРИИ 2 сезон: Настя Ивлеева

  • КЛИККЛАК
  • Переглядів 3 960 033

У прошлого в долгу! (Серия 10)

  • Канал Украина
  • Переглядів 163 085

МОИ АРМЕЙСКИЕ ПОХОЖДЕНИЯ… (анимация)

  • ZAKATOON
  • Переглядів 466 651

ONUKA – STRUM (Official Music Video)

NK – PELIGROSO [OFFICIAL LYRIC VIDEO]

  • NKofficial
  • Переглядів 1 082 345

Lil Peep & XXXTENTACION – Falling Down

  • Lil Peep
  • Переглядів 24 948 248

Ленинград – Цой

  • Ленинград | Leningrad
  • Переглядів 2 061 767

9 САМЫХ КРУТЫХ ДЕТЕЙ В МИРЕ!

  • Мастерская Настроения
  • Переглядів 1 246 640

Треш Обзор Фильма КУРОРТ

  • Фальшивый Критик
  • Переглядів 380 795

60 минут по горячим следам от 25.09.2018

  • Россия 24
  • Переглядів 272 151

12 самых КРАСИВЫХ ПРИНЦЕСС древности

  • ChanceToday
  • Переглядів 374 505

ДЕЛАЕМ ПРОСТОКВАШИНО ЕЩЁ ЛУЧШЕ

  • Fedor Comix
  • Переглядів 579 462

След – Маугли

  • След – новый сезон
  • Переглядів 109 878

КОРОЧЕ ГОВОРЯ, Я ОПТИМИСТ – ТимТим

  • Tим Тим
  • Переглядів 763 194

КОРОЧЕ ГОВОРЯ, Я ЛЕНИВЫЙ

Мот – Она не твоя (премьера трека, 2018)

Хачу Миллион – Серия 1

  • ДНЕВНИК ХАЧА
  • Переглядів 333 070

!ОПАСНО! ЗАЛИВАЕМ РУЛЕТ КИПЯЩИМ МАСЛОМ!

  • oblomoff
  • Переглядів 452 652

#Школа. Недитячі ігри. 21 серія

МАРМАЖ: ЗАБЫТОЕ И НЕ ВОШЕДШЕЕ (анимация)

FLESH – SPACE JAM

ЗАСМЕЯЛИСЬ ИЛИ УЛЫБНУЛИСЬ – ПроКЕКали ! )

  • TheBrun
  • Переглядів 988 264

Рутина настоящего игромана

Источник: https://ua-films.com/v-web-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-gpio-%D0%BF%D0%BE%D1%80%D1%82%D0%B0%D0%BC%D0%B8-raspberry-pi-x31ZOIhR7rg.html

Raspberry Pi FAQ. Теория и практика (обновление)

Raspberry Pi/Pi2 – одноплатный мини-компьютер «на ладони» (85×54 мм) на базе процессора ARM 11 (ARM1176JZF-S) c тактовой частотой 700 МГц (или ARMv7 Cortex-A7 с тактовой 900 МГц для Pi2) с потребляемой мощностью от полутора до 3.5 Вт и RAM256/512MB для модели Pi и до 6 ватт потребления с RAM 1GB для Pi2.

Для подключения монитора или телевизора на борту размещены композитный видеовыход и разъем HDMI. Кроме того, заводские OEM ЖК-экраны могут быть подключены через интерфейс DSI. Выдаваемое разрешение можно варьировать от 640х350 (EGA) до 1920х1200 (WUXGA) в формате PAL или NTCS и поддержкой OpenGL ES 2.0, кодеков MPEG-2, h.

264/MPEG-4 AVC и VC-1 в режиме до 1080p@30 FPS, гигабайт оперативной памяти типа LPDDR2 SDRAM. Следует оговорить, что ОЗУ по-прежнему общее как для процессора, так и для графического ядра. Последний фактор важен тем, что высоконагруженным процессам следует выделять поменьше квантов процессорного времени для комфортной работы.

 В качестве низкоуровневых интерфейсов доступны:

  1. 8 портов ввода-вывода общего назначения
  2. UART (Serial)
  3. Шина I²C/TWI
  4. Шина SPI с селектором между двумя устройствами

Пины питания: 3.3 В, 5 В и земля. Колонки или наушники могут быть подключены через стандартное гнездо для 3,5 мм джеков.

Также звук может передаваться через интерфейс HDMI. На Raspberry Pi Model B установлен Ethernet-адаптер на 10/100 Мбит с выходом на стандартное гнездо 8P8C (RJ45). Поддержка Wi-Fi может быть добавлена с помощью обычного USB Wi-Fi «свистка».

ТТХ одноплатного компьютера Raspberry Pi 2:
ЛИТЕРАТУРА и ДОКУМЕНТАЦИЯ
В ЧЕМ ПРОГРАММИРОВАТЬ? КОНТРОЛЬ GPIO

1. Python

Скачиваем PIP sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

Устанавливаем RPi.GPIO модуль для Python sudo pip install rpi.gpio И управляем GPIO: 2. Lazarus

Страница помощи http://wiki.freepascal.org/Lazarus_on_Raspberry_Pi

Компоненты и библиотеки: http://wiki.freepascal.org/Components_and_Code_examples
Документация: http://wiki.freepascal.org/Lazarus_Documentation
Инсталляция: http://wiki.freepascal.org/Installing_Lazarus
Пример контроля GPIO:
Модуль контроля:
3. Bash GPIO контакты Raspberry Pi являются файлами, а значит: Для чтения входов:
4. Си под GCC

Для управления GPIO потребуется библиотека bcm2835-1.17. Контроль над светодиодом:

5. Scratch Design Studio  Scratch (правильно читать – скретч) – среда разработки под расперри от группы Lifelong Kindergarten MIT Media Lab для детей от 8 до 16 лет и предназначена для создания своих собственных интерактивных историй, игр и мультфильмов дома, школе и библиотеке. Скретч помогает детям учиться думать творчески и критически, работать вместе. Продукт и среда открыты и бесплатны.

Руководство для начинающих: 1 | 2

Видеоуроки: http://scratch.mit.edu/help/videos
Официальный сайт проекта: http://scratch.mit.edu
Скачать: Mac OS X | Windows | Debian + Ubuntu

6. JAVA

Предварительно установите пакет sudo apt-get update && sudo apt-get install oracle-java7-jdk

Ознакомиться: http://www.raspberrypi.org/archives/4920

ОБРАЗЫ ОС

ПРОЕКТЫ на базе платформы
ГДЕ ПРИОБРЕСТИ? (Интернет-магазины)

Украина | Али-Экспресс | E-bay

Источник: http://raxp2.blogspot.com/2012/05/raspberry-pi-faq.html

Веб-контроль Raspberry Pi GPIO

Доброго времени суток! В этом посте я хочу показать, как управлять электроникой через Интернет используя Raspberry Pi. Выглядеть это будет примерно вот так.

Краткое описание:

  • Серверная программа, которая работает на Raspberry Pi, для того чтобы читать переменные
  • Базы данных MySQL для хранения переменных
  • Веб-страница Apache2, для того чтобы контролировать переменные

Шаг 1. База знаний

Это уже должно быть на вашем Raspberry Pi:

  • Веб-сервер Apache
  • PHP5
  • Сервер MySQL
  • phpMyAdmin

Если хотите узнать, как всё это настроить, вам сюда (инструкция на английском языке).

Шаг 2. Создание root аккаунта

Пропустите это, если у вас уже есть аккаунт, а если нет — продолжайте прочтение

Источник: http://savepearlharbor.com/?p=162651

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}