Делаем интернет-кофеварку с Raspberry Pi. Проверка IP адреса, присвоенного вашему Raspberry Pi

26.04.2019

. Сегодня третий урок, на котором мы поработаем с консолью и утилитой apt-get, научимся делать скриншоты и настроим удаленное управление через VNC.

Видео третьего урока:

Для третьего урока нам понадобится:

  • плата Raspberry Pi;
  • кабель питания;
  • USB-клавиатура;
  • USB-мышь;
  • монитор или телевизор с HDMI/RCA/DVI интерфейсом;
  • кабель, один конец которого RCA или HDMI, а другой соответствует вашему монитору;
  • SD-карта с уже установленной ОС Raspbian (как ее установить смотри );
  • USB-разветвитель с собственным питанием;
  • WiFi-модем.

Работа с консолью на Raspberry Pi

В ОС Raspbian (как и в других дистрибутивах Linux ) имеется главная консоль. Если бы мы не сделали соответствующие в rasppi-config , консоль открывалась бы сразу при запуске операционной системы. Работать с такой консолью не удобно, поскольку придется выйти из графического режима. Гораздо удобнее использовать предустановленную программу LXTerminal , которая эмулирует главную консоль в виде окна в графическом интерфейсе. Когда мы откроем эту программу, увидим строчку pi@raspberrypi ~ $ Здесь pi — имя пользователя в ОС, raspberrypi — hostname, ~ — текущая директория, ~ заменяет /home/pi . Когда мы видим такую строку, можем писать свою команду. В частности, здесь можно делать действия с файлами, папками, архивами (но эти действия можно делать и в графическом режиме, что гораздо удобнее).

Sudo

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

Утилита apt-get и установка программ

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

Альтернативный способ поиска, скачивания и установки программ на Raspberry Pi — консольная утилита apt-get.

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

sudo apt-get update

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

apt-cache search <запрос>

например,

apt-cache search tree

После запроса будет выведен список программ и утилит, в названии или описании которых имеется введенный запрос. Выбираем подходящую программу и запоминаем ее название.

Запрашиваем установку:

sudo apt-get install <название>

например,

sudo apt-get install tree

Установку потребуется подтвердить с помощью Enter.

После установки можно узнать информацию о программе или утилите:

info <название>

например,

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

Для использования консольной программы вводим <название> <параметры и флаги>, например tree .

Для удаления программы используется команда (удаление также нужно подтверждать):

sudo apt-get remove <название>
например,
sudo apt-get remove tree
Периодически с этой утилитой желательно совершать следующие действия:
sudo apt-get update (обновление базы программ)
sudo apt-get upgrade (обновление установленных программ)
sudo apt-get autoremove (удаления оставшихся после удаления программ библиотек, сопутствующих программ и др.)

Создание скриншотов на Raspberry Pi

К сожалению, ОС Raspbian не имеет предустановленных средств для создания снимков экрана — скриншотов.

Искать средства для создания скриншотов в apt-get можно с помощью запроса:

apt-cache search screen capture

Мне показалась удобной утилита scrot для скриншотов. Установка утилиты scrot:

sudo apt-get install scrot

Для создания скриншота необходимо ввести команду scrot. Можно указать задержку выполнения команды — это необходимо, чтоб вы успели свернуть или закрыть консоль — а то именно она попадет в скриншот. Для задержки в 5 секунд необходимо ввести:

Настройка удаленного управления через VNC

Virtual Network Computing (VNC ) - система удаленного доступа к рабочему столу компьютера . Управление осуществляется путем передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть. Будем использовать VNC для удаленного управления Raspberry Pi.

Чтобы настроить удаленное управление, установим и запустим VNC-сервер x11vnc, узнаем ip-адрес Raspberry Pi:
sudo apt-get install x11vnc
x11vnc -desktop:0
Просмотрим ip-адрес Raspberry Pi с помощью команды hostname -I.

На компьютер, с которого мы хотим удаленно управлять Raspberry Pi, скачаем и установим VNC-клиент, например, от realVNC . Запустим его и введем ip-адрес Raspberry Pi. После этого мы можем удаленно управлять.

На этом третий урок закончен, следует!

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

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

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

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

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

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

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

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

Raspberry Pi 2 - $36.99;

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

Orange Pi pc - $18.99

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

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

Banana Pi 2 (BPI-M2 A31S);

Raspberry Pi 2.

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

Banana Pi 2 (BPI-M2 A31S);

Raspberry Pi 2.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

iface lo inet loopback

iface eth0 inet static

address 172.20.0.138

netmask 255.255.0.0

gateway 172.20.200.1

dns-nameservers 8.8.8.8

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

sudo apt-get purge dhcpcd5

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

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

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

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

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

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

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

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

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

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

$ tar xvzf WebIOPi-0.7.1.tar.gz

$ cd WebIOPi-0.7.1

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

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

$ patch -p1 -i webiopi-pi2bplus.patch

$ sudo ./setup.sh

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

sudo update-rc.d webiopi defaults

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

$ cd /etc/systemd/system/

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

$ sudo systemctl start webiopi

$ sudo systemctl enable webiopi

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

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

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

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

sudo webiopi-passwd

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

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

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

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

dtparam=i2c_arm=on

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

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

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

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

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

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

/etc/init.d/webiopi restart

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

cat /var/log/webiopi

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

chmod +x weaved-nixinstaller_1.2.13.bin

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

./weaved-nixinstaller_1.2.13.bin

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

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

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

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

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

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

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

Выводы.

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

from webiopi.devices.sensor.bmp085 import BMP085

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

from webiopi import deviceInstance

bmp = webiopi.deviceInstance("bmp")

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

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

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

Литература.

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

Предисловие

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

Из трех вариантов компьютера Raspberry Pi A, B и B+ мне удалось познакомится с двумя последними. Модель B продается с февраля 2012 года, а B+ с июля 2014. С точки зрения работы с камерой различий между этими моделями нет. Они оснащены ARM11 процессором Broadcom BCM2835 с тактовой частотой 700 МГц и модулем оперативной памяти 512МБ.

Различия в количестве портов USB и в расположении и типе разъемов. Модель B имеет раздельные аудио и видеовходы и разъем для карт SD, а D+ объединенный разъем для аудио и видео, как и на многих фотоаппаратах и разъем для карт памяти micro SD. Некая защита и стабилизация по питанию существует только, если подавать 5 В на разъем micro USB, и эта часть реализована у этих моделей по-разному. Если подавать питание на разъем GPIO, то о качестве питания надо заботиться самому. Успех проекта Arduino доказал, что для многих задач не в производительности счастье и надо использовать компьютеры той производительности, которая необходима для решения поставленной задачи. Оценки показывают, что по производительности центрального процессора Raspberry Pi сопоставима с 300 MHz Pentium II образца далекого 1997 года. Однако, графический процессор Broadcom VideoCore IV с частотой 250 МГц уже вполне из 21 века и обеспечивает вывод видео1080p с частотой 30 кадров в секунду и аппаратным декодированием H.264, MPEG-4 AVC.

Компьютеры Raspberry Pi моделей B и B+ (слева)

Модель B в фирменном корпусе.

Хотя в корпусе и предусмотрены щели для шлейфа, ведущего к камере, он мало полезен при создании установок для съемки. Корпус для камеры и компьютера надо делать в соответствии с задачей. Например, для уличной камеры с емкими аккумуляторами и большим сроком автономной работы я изготовил следующую конструкцию.

Безымянный адаптер 802:11n заработал из коробки, но постоянно терял сеть. Были куплены два внешне разных и разных фирм адаптера, но при детальном рассмотрении они оказались на одном чипе: REALTEK RTL8188ETV. Сборка драйверов из исходников дала для Raspberry Pi неработоспособные драйвера. Однако в сети нашлись уже скомпилированные бинарники на сайте www.fars-robotics.net / и с ними все стабильно заработало. Однако у этого пути оказался смертельный враг - sudo apt-get upgrade. Очередное обновление системы, коснувшееся в том числе и камеры и потому оправданное, привело адаптеры в нерабочее состояние и на вышеуказанном сайте обновлений не появилось. Поиск показал, что я не первый, кто обновился, и решение уже найдено и даже выложены бинарники драйверов для последней версии.

Адаптер USB-Bluetooth (первый на снимке) может быть использован для управления камерой, но соединение должно быть установлено до запуска программы, и поэтому оказалось удобнее использовать адаптер com-Bluetooth, поскольку последовательный порт от и в Африке последовательный порт и независимо от наличия соединения программа ругаться не будет. Для спаривания устройств в этом случае от ОС ничего не требуется, если на адаптер подано питание, то с ним может быть установлено соединение.

Подключив цифровой приемник ИК сигнала (например TSOP1736) к GPIO, можно воспользовавшись результатами трудов проекта LIRC , организовать управление камерой от пульта дистанционного управления.

На фото внизу фотоприемник вставлен в плату расширения, которая в данном случае нужна только для удобства подключения.

Для работы с компьютером существует множество ОС. Мне, например, без проблем удалось установить Slackware ARM , но это получилась огромная базовая система, которую еще предстояло адаптировать для работы с камерой. Поэтому, несмотря на всю мою любовь к этому дистрибутиву, я остановился на самой массовой и соответственно наиболее адаптированной и документированной системе - Raspbian (Debian Wheezy) . В нем камера поддерживается из коробки, однако при первом включении надо разрешить к ней доступ вызвав sudo raspi-config. Операционная система устанавливается копированием командой dd на карту памяти и здесь отмечу, что к картам система оказалась весьма привередлива. Моя попытка использовать старые 4 ГБ карты в большинстве случаев окончилась неудачей, либо не записывалось, либо система с этих карт не стартовала.

Наиболее полный список ресурсов, на мой взгляд, расположен на elinux.org/RPi_Hub . И соответственно раздел, посвященный камере: elinux.org/Rpi_Camera_Module .

С точки зрения построения своих систем отличных от серийно выпускаемых наибольший интерес представляют огромные возможности дистанционного управления камерой. Это и проводная сеть, и Wi-Fi, и Bluetooth, и ИК пульт дистанционного управления, и цифровые входы, позволяющие опрашивать как простейшие кнопки, так и организовать передачу данных по самым разным последовательным протоколам.

Подключиться к сети можно как по витой паре через Ethernet, так и через Wi-Fi. Можно подключаться к роутеру, а можно и напрямую. При прямом подключении через Wi-Fi превращаем в роутер телефон, а в случае Ethernet, если сеть предварительно не настроена, задать IP локальному компьютеру и поднять сеть можно командой:

Bash-4.2# ifconfig eth0 192.168.0.214 up

А отключить командой:

Bash-4.2# ifconfig eth0 down

В случае подключения по сети простейший способ получить доступ к Raspberry Pi и соответственно к камере это в командной строке набрать команду: ssh -l pi 192.168.0.198 где 192.168.0.198 адрес Raspberry Pi и ввести пароль raspberry

Bash-4.1$ ssh -l pi 192.168.0.198 [email protected]"s password: Linux raspberrypi 3.12.22+ #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l Last login: Sat Sep 27 16:49:37 2014 from 192.168.0.215 pi@raspberrypi ~ $

Постоянный IP-адрес можно присвоить, отредактировав файл etc/network/interfaces, примерно так, как приведено ниже. Т.е. комментируем строку с dhcp и добавляем настройки, соответствующие Вашей локальной сети.

Auto lo iface lo inet loopback #iface eth0 inet dhcp iface eth0 inet static address 192.168.0.199 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp iface default inet static address 192.168.0.198 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1

На телефоне с Android надо установить какой-нибудь SSH Client. У меня установлен . Это общее решение аналогичное по стилю и возможностям с работой с большого компьютера. Есть и множество программ, заточенных именно под работу с Raspberry Pi. Я попробовал работать с и . Хотя в первой уже есть предустановки для работы с камерой, мне вариант с составлением собственного списка команд, который предлагается во второй, понравился больше.

Теперь у нас есть возможность напрямую обратится к камере и, например, заставить ее делать снимки при нажатии Enter:

Pi@raspberrypi ~ $ raspistill -o foto%03d.jpg -k -v -t 999999
raspistill Camera App v1.3.6 Width 2592, Height 1944, quality 85, filename foto%03d.jpg Time delay 999999, Raw no Thumbnail enabled Yes, width 64, height 48, quality 35 Link to latest frame enabled no Full resolution preview No Capture method: Capture on keypress Preview Yes, Full screen Yes Preview window 0,0,1024,768 Opacity 255 Sharpness 0, Contrast 0, Brightness 50 Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0 Exposure Mode "auto", AWB Mode "auto", Image Effect "none" Metering Mode "average", Colour Effect Enabled No with U = 128, V = 128 Rotation 0, hflip No, vflip No ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000 Camera component done Encoder component done Starting component connection stage Connecting camera preview port to video render. Connecting camera stills port to encoder input port Press Enter to capture, X then ENTER to exit

Программа raspistill предоставляет доступ практически ко всем возможностям камеры.

Image parameter commands -?, --help: This help information -w, --width: Set image width -h, --height: Set image height -q, --quality: Set jpeg quality <0 to 100> -r, --raw: Add raw bayer data to jpeg metadata -o, --output: Output filename (to write to stdout, use "-o -"). If not specified, no file is saved -l, --latest: Link latest complete image to filename -v, --verbose: Output verbose information during run -t, --timeout: Time (in ms) before takes picture and shuts down (if not specified, set to 5s) -th, --thumb: Set thumbnail parameters (x:y:quality) or none -d, --demo: Run a demo mode (cycle through range of camera options, no capture) -e, --encoding: Encoding to use for output file (jpg, bmp, gif, png) -x, --exif: EXIF tag to apply to captures (format as "key=value") or none -tl, --timelapse: Timelapse mode. Takes a picture every ms -fp, --fullpreview: Run the preview using the still capture resolution (may reduce preview fps) -k, --keypress: Wait between captures for a ENTER, X then ENTER to exit -s, --signal: Wait between captures for a SIGUSR1 from another process -g, --gl: Draw preview to texture instead of using video render component -gc, --glcapture: Capture the GL frame-buffer instead of the camera image Preview parameter commands -p, --preview: Preview window settings <"x,y,w,h"> -f, --fullscreen: Fullscreen preview mode -op, --opacity: Preview window opacity (0-255) -n, --nopreview: Do not display a preview window Image parameter commands -sh, --sharpness: Set image sharpness (-100 to 100) -co, --contrast: Set image contrast (-100 to 100) -br, --brightness: Set image brightness (0 to 100) -sa, --saturation: Set image saturation (-100 to 100) -ISO, --ISO: Set capture ISO -vs, --vstab: Turn on video stabilisation -ev, --ev: Set EV compensation -ex, --exposure: Set exposure mode (see Notes) -awb, --awb: Set AWB mode (see Notes) -ifx, --imxfx: Set image effect (see Notes) -cfx, --colfx: Set colour effect (U:V) -mm, --metering: Set metering mode (see Notes) -rot, --rotation: Set image rotation (0-359) -hf, --hflip: Set horizontal flip -vf, --vflip: Set vertical flip -roi, --roi: Set region of interest (x,y,w,d as normalised coordinates ) -ss, --shutter: Set shutter speed in microseconds Exposure mode options: auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong, fixedfps,antishake,fireworks AWB mode options: off,auto,sun,cloud,shade,tungsten,fluorescent,incandescent,flash,horizon Image Effect mode options: none,negative,solarise,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel, watercolour,film,blur,saturation,colourswap,washedout,posterise, colourpoint,colourbalance,cartoon Metering Mode options: average,spot,backlit,matrix Preview parameter commands -gs, --glscene: GL scene square,teapot,mirror,yuv,sobel -gw, --glwin: GL window settings <"x,y,w,h">

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

Первый с использованием netcat . Сперва запускаем на локальном компьютере:

Nc -l -p 5001 | mplayer -fps 31 -cache 1024 -

А затем на Raspberry Pi:

Raspivid -t 999999 -w 640 -h 480 -fps 10 -o - | nc -v 192.168.0.24 5001

Где 192.168.0.24 IP адрес локального компьютера.

Второй вариант с использованием VLC. Повторить при написании этой статьи мне этот подвиг не удалось. Я следовал инструкции, изложенной . Причина, как оказалось, в обновлении до версии до 3.12.28+. Решается переустановкой VLC.

Задержка конечно будет, причем довольно сильно варьирующаяся от настроек управляющего компьютера.

Для удобства работы с командной строкой можно сделать некий графический интерфейс. Его можно запускать, как на удаленном компьютере, так и если установить VNC, то можно получить удаленный доступ к рабочему столу и соответственно запускать его на Raspberry Pi. Есть уже готовые решения: Pi Vision и RaspiCam Remote . Другой штатный способ управления камерой это python, для которого существует специальная библиотека picamera . Для меня главное это повторяемость результатов, т.е. от программы мне в первую очередь требуется возможность задать выдержку и чувствительность. Поскольку готового решения мне сразу не попалось, то я написал свое. (Вариант Pi Sight меня не устроил.) Подробнее программу я планирую рассмотреть в отдельной статье, а пока для желающих покопаться привожу исходный текст для Python 2.7.3 и picamera 1.8.

Для доступа через сеть к папкам Raspberry Pi можно в Dolphin набрать следующий адрес:

Fish://[email protected]:22/home/pi/

Для доступа к рабочему столу с удаленного компьютера я установил на Raspberry Pi с ОС Raspbian:

Sudo apt-get install tightvncserver

Если есть желание в дальнейшем пользоваться буфером обмена с локальной машиной через меню F8, то дополнительно устанавливаем:

Sudo apt-get install gsfonts-x11 xfonts-75dpi xfonts-100dpi autocutsel

И в файле /home/pi/.vnc/xstartup добавляем сточку autocutsel -fork после строки xsetroot -solid grey.

Включаем vncserver:

Pi@raspberrypi ~ $ vncserver:1 -geometry 800x480 New "X" desktop is raspberrypi:1 Starting applications specified in /home/pi/.vnc/xstartup Log file is /home/pi/.vnc/raspberrypi:1.log

Для доступа с настольного компьютера и ноутбука с ОС Slackware я установил пакет tightvnc.

Запускаем vncviewer, в появившемся окне вводим, в моем случае, адрес 192.168.0.198:1, затем пароль и получаем:

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

Для Android существует множество приложений. Мне показались относительно приемлемыми Remote Ripple , VNC Viewer , DesktopVNC В моем случае для подключения надо было задать адрес и порт 5901 и при подключении ввести пароль заданный для vncserver. Общая проблема этого способа управления камерой - эмуляция мыши, которую на маленьком экране телефона назвать комфортной сложно. На маленьком экране телефона для меня, пожалуй, наиболее удобным оказался VNC Viewer с постоянным размещением кнопок мыши внизу экрана.

В если отвлечься от индивидуальных пристрастий к удобству интерфейса, то для сетевых подключений уже написано достаточно программ, чтобы реализовать любой вид съемки. При работе с ноутбуком tightvnc, на мой взгляд, вполне комфортно позволяет работать с программой управления камерой запущенной на Raspberry Pi. Если необходима живая картинка именно на нем, то, возможно, стоит написать некий интерфейс к командам, отправляемым через SSH для удобства переключения между режимом потокового видео для просмотра и режимом съемки фотографий. В этом случае особых преимуществ в использовании python я не вижу и можно ограничиться вызовом raspistill и raspivid.

Raspberry Pi представляет собой не просто миникомпьютер, предназначенный для того, чтобы из него и проигрывали на нем музыку. Он может применяться и в более серьезных электротехнических . Для этого у него имеются линии ввода/вывода общего назначения (GPIO), которые мы сегодня рассмотрим.



GPIO находятся на разъеме 2×13, на котором можно найти интерфейсы SPI, I2C, UART и линии питания 3.3 В и 5 В.



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



Итак, как же управлять линиями GPIO на Raspberry Pi?


Для начала нужно установить библиотеку RPi.GPIO Python Library. Возможно, она уже была предустановленна на ваш дистрибутив операционной системы Raspbian OS. Чтобы проверить это, введите:


sudo python


Затем введите в строчке:


import RPi.GPIO as GPIO


Если не появилась ошибка, то все хорошо. Но если же она возникла, то нужно сделать следующие шаги.


Для начала загружаем RPi GPIO Library:


wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.3.1a.tar.gz


Затем извлекаем файлы:


tar zxf RPi.GPIO-0.3.1a.tar.gz


Потом переходим в извлеченный каталог:


cd RPi.GPIO-0.3.1a


И устанавливаем библиотеку:


sudo python setup.py install


Использование библиотеки RPi.GPIO Python Library


# импорт библиотеки import RPi.GPIO as GPIO # используем нумерацию разъема Raspberry Pi GPIO.setmode(GPIO.BOARD) # или GPIO.setmode(GPIO.BCM) # настраиваем выводы GPIO на вход или выход GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.OUT) # берем входное значение с вывода 11 input_value = GPIO.input(11) # устанавливаем выходное значение на вывод 13 GPIO.output(13, GPIO.HIGH) #GPIO.output(13, GPIO.LOW)

Различие между GPIO.setmode(GPIO.BOARD) и GPIO.setmode(GPIO.BCM) заключается в системе нумерации выводов. В первом случае используется нумерация разъема P1 на борту Raspberry Pi, а во втором случае нумерация выводов системы-на-кристалле Broadcom, являющейся ядром Raspberry Pi. Следует знать, что в случае с BCM нумерация выводов между первой и второй ревизиями немного отличается, а при использовании BOARD ревизия не имеет никакого значения, все остается тем же самым.


Теперь подключим к Raspberry Pi светодиоды и кнопки. На разъеме нам доступны восемь GPIO.



Соединения:



Значения сопротивлений резисторов могут быть вычислены следующим образом. Используемые в данном случае 5-миллиметровые светодиоды потребляют ток 20 мА. Напряжение, подаваемое с Raspberry Pi, составляет 3.3 В. Тогда сопротивление будет равно 3.3 В / 20 мА = 165 Ом. Для кнопок были задействованы резисторы 1 КОм.




from time import sleep import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(16, GPIO.IN) GPIO.setup(18, GPIO.IN) GPIO.setup(11, GPIO.OUT) GPIO.setup(13, GPIO.OUT) GPIO.setup(15, GPIO.OUT) GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) # state - определяет должен ли светодиод быть включенным или выключенным state = 0 # increment - направление изменения состояний inc = 1 while True: # кнопка нажата if (GPIO.input(16) == True): if (inc == 1): state = state + 1; else: state = state - 1; # достигнуто максимальное состояние state, возвращаемся назад (декремент) if (state == 3): inc = 0 #достигнуто минимальное состояние state, возвращаемся назад (инкремент) elif (state == 0): inc = 1 if (state == 1): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) elif (state == 2): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.HIGH) GPIO.output(15, GPIO.LOW) elif (state == 3): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.HIGH) GPIO.output(15, GPIO.HIGH) else: GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) print("pressed B1 ", state) # нажата кнопка сброса if (GPIO.input(18) == True): state = 0 inc = 1 GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) print("pressed B2 ", state) sleep(0.2);

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

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

Особенности данного проекта:

– серверная программа, запущенная на Raspberry Pi для чтения значений GPIO

– использование MySQL базы данных для хранения состояния GPIO

– использование веб-сервера Apache2 для контроля GPIO через веб-браузер

Итак, первое, что вам необходимо установить на Raspberry Pi, это:

– Apache веб-сервер

– MySQL сервер

– phpMyAdmin (есть русская версия)

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

Полноценный root-доступ

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

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

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

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

Скачать файлы проекта

Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)