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

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

  • Вычислительная техника
    • Микроконтроллеры микропроцессоры
    • ПЛИС
    • Мини-ПК
  • Силовая электроника
  • Датчики
  • Интерфейсы
  • Теория
    • Программирование
    • ТАУ и ЦОС
  • Перспективные технологии
    • 3D печать
    • Робототехника
    • Искусственный интеллект
    • Криптовалюты

Чтение RSS

Управление линиями GPIO на Raspberry Pi

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

Различие между 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 КОм.

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

Web-управление Raspberry Pi GPIO

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

Далее, необходимо сделать правки в РНР-файле:
nano /var/www/control.php

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

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

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

На этом установка и настройка закончены.

Использование

Для запуска ПО введите следующую команду:
./GPIOServer.sh

Теперь можно войти в веб-интерфейс http://HOSTNAME/control.php, авторизоваться и пользоваться.

Последнюю версию скриптов всегда можно найти на сайте Google.

Raspberry Pi

Ваши покупки

Поиск

Рубрики

Рейтинг

Облако тэгов

Боковое меню

Как настроить управление GPIO через интернет: руководство для Raspberry Pi

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

Алгоритм действий подразумевает работу со следующим софтом:

1. Серверная программа для чтения переменных;
2. Базы данных MySQL для хранения информации;
3. Веб-страница Apache2 для веб-контроля.

Предварительная настройка

Чтобы управлять электронными устройствами через интернет, вы должны заранее настроить следующие элементы:
• Веб-сервер Apache;
• PHP5;
• Сервер MySQL;
• phpMyAdmin.

Root аккаунт

Если вы создали аккаунт ранее, переходите к третьему шагу. Если еще нет – действуйте по инструкции.
При помощи специальной команды зайдите в Raspberry Pi:

Придумайте и дважды напишите пароль от аккаунта. Закройте SSH сессии. После перезапуска компьютера зайдите в root аккаунт.

Настройка MySQL и phpMyAdmin

Третий шаг посвящен настройке баз данных. Зайдите в аккаунт Вашей базы MySQL через панель управления phpMyAdmin. Найдите в верхнем меню опцию «Import», нажмите соответствующую кнопку.
Выберите пункт «File to Import», чтобы выбрать нужный файл, нажмите «Choose File». Вам нужно загрузить то, что скачали по ссылке выше. Теперь перейдите в самый низ страницы, кликните по кнопке «Go». Только так можно создать таблицы.

Читайте также  Интернет вещей с remotexy

Используйте phpMyAdmin, чтобы в базах данных появился новый пользователь. Алгоритм действий следующий:
• наверху страницы найдите «Users», кликните по кнопке;
• Откройте ссылку «Add User»;
• Укажите имя пользователя в строке «User name» (это может быть, например, «gpio»);
• Найдите строку «Host» и впишите слово «localhost»;
• Заполните поля с паролями (не используйте спецсимволы, переносы, пробелы);
• Больше ничего не меняйте – нажмите «Add User» (кнопка находится снизу в правом углу).

Теперь новый пользователь должен получить привилегии. Как это делается?
• Откройте вкладку «Users», найдите в списке нового пользователя (ищите строку в таблице «Users Overview»);
• Кликните по ссылке «Edit Privileges» около логина;
• Пролистайте страницу вниз, пока не наткнетесь на словосочетание «Database-specific privileges» — найдите «gpio», кликните «Go»;
• Еще раз нажмите «Go», после того как установите все флажки (кнопка находится в левом нижнем углу).

Проверяем значения MySQL

Четвертый шаг связан с проверкой значений, который находятся в базе данных на компьютере. Нужно настроить некоторые параметры. Скачайте скрипт и выполните следующие команды (после первого запроса нажмите Return/Enter, после второго – тоже):

После скачивания скрипта напишите еще две команды (после каждой нажимайте Return либо Enter):

Теперь можно поменять сценарий.

Корректировки требуют переменные, которые указаны в самом начале файла:

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

После внесения изменений нажмите комбинацию Ctrl+X. Удерживайте Ctrl и добавьте к клавише Y. Теперь нажмите Enter либо Return.
Изменение параметров веб-страницы
Это последний шаг перед тестовым запуском приложения. Зайдите в аккаунт (если вы не залогинены, напишите sudo –i). Пришло время для команд (после каждой жмите Enter/Return):

После завершения скачивания введите следующие значения (не забывайте нажимать Return либо Enter после каждой строчки):

Не спешите использовать файл. Для начала скорректируйте переменные. Введите nano /var/www/control.php, нажмите Enter/Return. Внесите изменения в следующие строчки:

Откройте браузер, загрузите страницу control.php (в начале адреса указывается название хоста). Чтобы залогиниться на сайте, используйте стандартный логин (admin) и пароль (gpio).

Чтобы обезопасить себя, измените пароль. Вверху страницы найдите строку «Change Password» и перейдите по ссылке. Укажите новые данные для входа.

Автоматизация дома на Raspberry Pi с управлением с веб-страницы

Плата Raspberry Pi представляет широкие возможности для реализации различных проектов в тематике интернета вещей (Internet of Things, IoT) для управления различными устройствами. В данной статье мы рассмотрим проект автоматизации дома на Raspberry Pi с управлением домашними устройствами с помощью веб-страницы, в связи с чем появляется возможность управления устройствами из любой точки Земли, где есть сеть интернет. Веб-сервер для данного проекта может быть запущен на любом устройстве, поддерживающем HTML: смартфоны, планшеты, ноутбуки и т.д.

Ранее на нашем сайте мы рассматривали различные проекты автоматизации дома на основе платы Arduino:

Здесь же, на основе платы Raspberry Pi, появляется возможность реализовать более «продвинутый» проект автоматизации дома, чем указанные проекты на основе платы Arduino.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Реле на 5 В.
  3. Транзисторы 2n222.
  4. Диоды.
  5. Светодиоды (купить на AliExpress).
  6. Резисторы 220 или 100 Ом (купить на AliExpress).
  7. Электрические лампы переменного тока.
  8. Макетная плата.
  9. Соединительные провода.

Для данного проекта не понадобится код программы на python поскольку фреймворк WebIOPi сделает за нас всю работу.

Подготовка платы Raspberry Pi

Для подготовки платы Raspberry Pi к данному проекту необходимо будет установить фреймворк WebIOPi, который упростит взаимодействие между веб-страницей и платой Raspberry Pi. Данный фреймворк легче всего установить с помощью фреймворка Flask на python, но в данном проекте мы сделаем это вручную чтобы посмотреть «изнутри» как это выглядит.

Но вначале необходимо установить самые свежие обновления для платы Raspberry Pi и перезагрузить плату чтобы изменения вступили в силу:

После этого можно будет приступать к установке фреймворка (framework) WebIOPi. Но перед этим убедитесь, что вы находитесь в домашнем каталоге:

Используем wget чтобы загрузить необходимые нам файлы WebIOPi из сети интернет:

Когда скачивание завершится, извлеките файлы из архива и смените каталог на папку с WebIOPi:

Поскольку в данном проекте мы использовали плату Raspberry Pi 3 нам понадобилось установить специальный патч поскольку скачанная нами версия WebIOPi не могла должным образом работать с платой Raspberry Pi 3. Для установки данного патча мы использовали следующие команды:

После этого необходимо запустить процесс установки с помощью WebIOPi:

Если во время установки у вас будут появляться различные предупреждения, нажимайте в них на «yes». После завершения процесса установки перезагрузите плату.

Тестирование WebIOPi

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

Выполните следующую команду:

После выполнения данной команды запустите браузер на вашей Raspberry Pi и откройте в нем страницу по адресу http://raspberrypi.mshome.net:8000 или http://thepi’sIPaddress:8000. После этого система попросит вас ввести имя пользователя и пароль. Используйте следующие имя пользователя и пароль:

Эту авторизацию можно в дальнейшем удалить из проекта, но если вы заботитесь о возможном несанкционированном доступе к вашей системе автоматизации дома, то ее целесообразно оставить.

После авторизации у вас откроется страница, показанная на следующем рисунке. Нажмите на ней на ссылку с GPIO header.

Для тестирования WebIOPi мы подключим к GPIO 17 светодиод и сконфигурируем GPIO 17 в качестве цифрового выхода.

Подключите светодиод с помощью токоограничивающего резистора к контакту GPIO 17 как показано на следующей схеме:

После сборки этой схемы вернитесь снова на выше показанную страницу и нажимайте на кнопку напротив контакта 11 (GPIO 17) чтобы включать и выключать светодиод, подключенный к данному контакту. Таким образом можно проверить как осуществляется управление контактами GPIO платы Raspberry Pi с помощью фреймворка WebIOPi.

Если все работает нормально, вернитесь к терминалу и остановите выполнение программы нажав CTRL + C. После этого можно переходить к основной программе нашего проекта.

Более подробно о возможностях WebIOPi и правилах работы с нею вы можете прочитать на странице — http://webiopi.trouch.com/INSTALL.html.

Разработка веб-приложения для нашего проекта автоматизации дома

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

Но перед тем, как переходить к написанию html, css и java кодов для нашего проекта автоматизации дома, давайте вначале создадим на компьютере папку, где все это будет храниться. Убедитесь, что вы находитесь в домашнем каталоге, после этого создайте в нем каталог с названием » webapp «, а в нем каталог с названием «html».

После этого создадим также каталоги для хранения скриптов (scripts), CSS и изображений (images) внутри каталога «html».

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

Код JavaScript

Первым кодом, который мы напишем для нашего проекта, будет код JavaScript. Это простой скрипт для взаимодействия с сервисом WebIOPi.

Читайте также  Схема управления rgb светодиодом

Здесь необходимо заметить, что на нашей веб-станице управления проектом автоматизации дома будет 4 кнопки, с помощью которых мы будем управлять работой 4-х контактов GPIO, но управлять мы будем всего 2-мя реле. Более подробно принцип работы проекта показан на видео, представленном в конце статьи.

Представленный код будет выполняться когда WebIOPi будет готово к работе.

Рассмотрим назначение элементов этого кода:

  • webiopi().ready(function() – инструкция нашей системе создать эту функцию и запустить ее на выполнение когда webiopi готово к работе;
  • webiopi().setFunction(23,»out») – функция, которая позволяет фреймворку WebIOPi сконфигурировать GPIO23 в качестве цифрового выхода. Поскольку в нашем проекте 4 кнопки, то подобная операция производится для 4-х контактов ввода/вывода;
  • var content, button – создаем две переменные с именами content и button;
  • content = $(«#content») – эта инструкция указывает на то, что переменная content будет доступна за пределами кода html и css. То есть когда мы будем ссылаться на #content, фреймворк WebIOPi будет создавать объект, ассоциированный с нею;
  • button = webiopi().createGPIOButton(17,»Relay 1″) – WebIOPi позволяет создавать различные виды кнопок. Представленная команда говорит WebIOPi чтобы она создала GPIO кнопку, с помощью которой будет осуществляться управление контактом GPIO (ввода/вывода). В данном случае мы создаем кнопку для управления GPIO 17 и “Relay 1”. Аналогичным образом поступаем и для остальных контактов;
  • content.append(button) – полезно добавлять этот код к любому другому коду для создания кнопки. В этом случае при создании других кнопок они будут наследовать свойства этой кнопки. Это особенно полезно когда пишите CSS или скрипт.

После создания этого файла JavaScript мы сохраняем его и затем копируем его на Raspberry Pi с помощью filezilla в ранее созданную там папку webapp/html/scripts.

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

Код CSS

CSS (каскадная таблица стилей) позволяет сделать нашу веб-страницу для управления домашними устройствами более привлекательной.

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

Если вы не хотите вникать в коды CSS, то вы можете скачать готовый код CSS для данного проекта по ссылке в конце статьи.

В первой части кода CSS мы запишем таблицу стилей для основного «тела» нашей страницы.

Веб-контроль 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
  • wget raspberrypi-gpio.googlecode.com/files/GPIOServer.sh и нажмите Return / Enter

После того, как он это скачает, введите

  • chmod +x GPIOServer.sh и нажмите Return / Enter
  • nano GPIOServer.sh и нажмите Return / Enter

Это позволит вам изменить сценарий.

Вы должны изменить следующие переменные в начале файла:

  • mysqlusername=»ЗДЕСЬ ИМЯ ПОЛЬЗОВАТЕЛЯ»
  • mysqlpassword=»ЗДЕСЬ ПАРОЛЬ»

Их нужно изменить на имя пользователя и пароль, которые вы создавали ранее в phpMyAdmin.

После того как всё изменили, удерживайте клавишу Ctrl и нажмите X, затем отпустите Ctrl и нажмите Y. Нажмите Return / Enter.

Шаг 5. Настройка веб-страницы

Финальный шаг, перед тем как вы сможете использовать это, — настройка веб-страницы.

Для этого, напишите следующие команды, убедившись, что вы залогинены (если нет — напечатайте sudo -i ).:

  • wget raspberrypi-gpio.googlecode.com/files/control.php и нажмите Return / Enter
  • wget raspberrypi-gpio.googlecode.com/files/off.jpg и нажмите Return / Enter
  • wget raspberrypi-gpio.googlecode.com/files/on.jpg и нажмите Return / Enter

Когда они скачаются, напишите вот это:

  • mv control.php /var/www/control.php и нажмите Return / Enter.
  • chmod 755 /var/www/control.php и нажмите Return / Enter.
  • mv off.jpg /var/www/off.jpg и нажмитеReturn / Enter.
  • chmod 755 /var/www/off.jpg и нажмите Return / Enter.
  • mv on.jpg /var/www/on.jpg и нажмите Return / Enter.
  • chmod 755 /var/www/on.jpg и нажмите Return / Enter.

Теперь вам нужно изменить пару переменных перед использованием файла, поэтому напишите nano /var/www/control.php и нажмите Return / Enter.

Измените следующие переменные:

  • $MySQLUsername = «ЗДЕСЬ ИМЯ ПОЛЬЗОВАТЕЛЯ»;
  • $MySQLPassword = «ЗДЕСЬ ПАРОЛЬ»;

Сейчас через браузер зайдите на страницу control.php (у меня raspberryPi/control.php, где raspberryPi — имя хоста.)

Там потребуется ввести следующие данные:
Имя пользователя: admin
Пароль: gpio

Я рекомендую нажать на ссылку «Change Password» сверху страницы и сменить пароль по очевидным причинам.


Шаг 6. Использование

Чтобы запустить программы GPIO, сделайте следующее:
Начните SSH сессию на Raspberry Pi и залогиньтесь как root, затем напечатайте ./GPIOServer.sh и нажмите Return / Enter.

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

Готово! Теперь войдите в панель управления (http://ИМЯ ХОСТА/control.php) и наслаждайтесь!

Для безопасности следует удалить root аккаунт.

Raspberry Pi. Работа с портами ввода-вывода GPIO.

Всем доброго времени суток! В сегодняшней статье мы рассмотрим основные нюансы и механизмы управления портами ввода-вывода GPIO платы Raspberri Pi. И, конечно же, как обычно, все проверим на практическом примере.

Читайте также  Цифровой измеритель интенсивности света

Все версии Raspberry Pi оснащены штыревым разъемом, на который выведены порты GPIO. Начиная с 2014-го года разъем стал 40-пиновым (ранее было 26). На версиях Pi Zero и Pi Zero W присутствует посадочное место для разъема, но физически он не распаян:

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

Порты можно разделить на несколько категорий:

Разберем по очереди… Пины 3.3V и 5V могут использоваться для питания внешних устройств, подключенных к плате. При этом ограничение по току выглядит так:

  • Максимальный ток для вывода 5V определяется по формуле:

где I_ <вх>– это входной ток источника, который мы используем для питания платы. А I_ <п>– это ток, потребляемый самой платой, а также внешними устройствами, подключенными по USB. То есть мы подаем входной ток, часть его потребляют узлы платы, а то, что остается мы можем использовать для дополнительных устройств, подключенных к пину 5V.

  • Для выводов 3.3V все проще – максимальный ток составляет 50 мА и на этом точка.

В итоге за вычетом выводов 3.3V, 5V и Ground остаются 28 пинов GPIO, помеченных на схеме зеленым. GPIO0 и GPIO1 можно считать зарезервированными (их назначение обязательно обсудим в отдельной статье). Таким образом, остается 26 выводов, которые можно использовать по-своему усмотрению. Каждый из них может быть сконфигурирован на работу в том или ином режиме. Вот, к примеру, возможные функции портов для платы Raspberry Pi 4:

То есть любой из портов ввода-вывода может выполнять до 6-ти различных функций, в зависимости от конфигурации. В частности, GPIO2 может быть использован как сигнал SDA для I2C1 (SDA1), либо, к примеру, как сигнал MOSI для интерфейса SPI3 (SPI3_MOSI).

Об I2C и SPI поговорим в ближайших статьях, а сегодня нас интересует использование GPIO в качестве “обычных” входов и выходов. В режиме выхода на пин может быть выведен высокий (3.3 В) или низкий (0 В) уровень напряжения. А, соответственно, в режиме входа мы можем проанализировать, какой уровень подан на пин – высокий или низкий – 3.3 В или 0 В. Тут важно обратить внимание, что порты не являются толерантными к 5 В, то есть подавать на вход 5 В категорически нельзя.

В режиме входа для любого из GPIO можно активировать внутреннюю подтяжку к питанию или земле (pull-up/pull-down). Если вывод настроен на использование подтяжки вверх, то это означает, что при отсутствии сигнала (ничего не подключено) со входа будет считываться высокий уровень. С pull-down ситуация обратная – на входе в данном случае будет низкий уровень.

Исключением являются пины GPIO2 и GPIO3. Они имеют фиксированную подтяжку вверх, без вариантов.

В режиме выхода мы снова возвращаемся к ключевому параметру, а именно к ограничению по току. Максимальный ток для одного вывода составляет 16 мА. При этом, если используются несколько выходов, то суммарный ток не должен превышать 50 мА. Превышение допустимых значений с большой вероятностью приведет к выгоранию порта.

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

Выберем GPIO3 для светодиода и GPIO4 для кнопки. Схема подключения будет такой:

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

Резистор R_ <1>– токоограничительный. Как вытекает из названия он нужен для ограничения тока Рассмотрим, что произойдет, если вывод GPIO4 будет ошибочно настроен не как вход, а как выход и на нем будет 3.3 В. При нажатии кнопки произойдет короткое замыкание 3.3 В на землю, что приведет к безвозвратному повреждению порта платы. Это в случае отсутствия резистора.

А при наличии резистора ток будет ограничен величиной:

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

Итак, переходим к диоду, который подключен через резистор R_ <2>. Каждому диоду соответствует своя собственная вольт-амперная характеристика (ВАХ), определяющая возможные значения прямого напряжения и тока. Рассмотрим первый попавшийся под руку светодиод, например такой – ссылка:

Открываем даташит на него и находим зависимость тока от напряжения при прямом включении:

Максимальный ток для GPIO в режиме выхода, как мы уже выяснили, составляет 16 мА. Чтобы не превысить это значение подадим на светодиод, например, 10 мА. Этому току, исходя из графика, соответствует напряжение 2 В. Теперь по закону Ома нам остается только определить величину резистора. На выходе GPIO у нас 3.3 В, на диоде должно падать 2 В, значит на резисторе остается:

При этом ток в цепи должен быть равен 10 мА, тогда сопротивление резистора:

Если точной величины под рукой нет, можно взять резистор номиналом чуть больше. В общем, суть тут одна – обеспечить режим работы, при котором ток через выход не превышает допустимые 16 мА. Для большинства светодиодов в документации просто приводятся конкретные типовые значения напряжения и тока, например 2.5 В и 15 мА. Расчет будет выглядеть точно так же, как и рассмотренный, просто значения другие.

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

И для работы с портами ввода-вывода используем библиотеку/модуль RPi.GPIO. В Raspberry Pi OS он включен по умолчанию, но в случае отсутствия команда для установки такая:

Создаем файл gpio_test.py и добавляем в него следующий код:

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

Добавим переменные для хранения номеров портов и величины задержки. У нас светодиод на GPIO3, а кнопка на GPIO4. Так и определим:

Далее настроим режим нумерации портов, чтобы номера соответствовали названию сигнала (например, GPIO3), а не порядковому номеру на разъеме:

Настраиваем GPIO3 на работу в режиме выхода и гасим светодиод, подав низкий уровень:

GPIO4 – в режиме входа с подтяжкой вверх:

Далее организуем вечный цикл while True, в котором и будем проверять состояние кнопки и мигать светодиодом. Только обернем его в блок try, чтобы отловить исключение, возникающее, когда пользователь завершает процесс (нажав Ctrl + C). В случае завершения выполнения программы вызываем GPIO.cleanup():

Ну и, конечно, здесь же у нас вся полезная работа. Если кнопка нажата (а в нашей схеме этому соответствует низкий уровень/логический ноль на GPIO4), то зажигаем светодиод и выводим сообщение “led on“. При отпускании кнопки – обратный процесс. Проверять кнопку будем каждые 0.5 с (DELAY_TIME).

Запускаем программу командой:

И теперь, нажимая кнопку, можем наблюдать включение и выключение светодиода, как мы и планировали!