Web-управление Raspberry Pi GPIO. Система управления умным домом на основе Raspberry Pi. Утилита apt-get и установка программ

Предисловие

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Появившийся в 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-хаб все равно может понадобиться.

На двух мониторах, которые я опробовал, при настройках по умолчанию была черная кайма по краям экрана. Это корректируется настройками режима 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

Настройка Ethernet и Wi-Fi

Имевшаяся у меня 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) $ 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 И VNC

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

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

ВЕБ-КАМЕРА И MOTION

В качестве веб-камеры в моем варианте используется 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

ПОРТЫ GPIO - ОСОБЕННОСТИ И УПРАВЛЕНИЕ

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

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

Распайка портов и примеры доступа к ним из различных языков программирования приведены здесь: 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" >

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

$ 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

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

$ sudo nano switch_gpio

#! /bin/bash PORT_NUM=$1 if [ $2. == "on." ]; then NEW_VALUE=1 else if [ $2. == "off." ]; then NEW_VALUE=0 else echo "Usage: $0 PORT_NUM on|off" exit fi fi # Настраиваем порт GPIO на вывод if [ ! -e /sys/class/gpio/gpio$PORT_NUM ] then echo $PORT_NUM > /sys/class/gpio/export fi # Читаем старое состояние OLD_VALUE=$(cat /sys/class/gpio/gpio$PORT_NUM/value) if [ $OLD_VALUE == 1 ]; then OLD_VALUE_TEXT="on" else OLD_VALUE_TEXT="off" fi echo "out" > /sys/class/gpio/gpio$PORT_NUM/direction echo -ne "Switching GPIO "$PORT_NUM" from "$OLD_VALUE_TEXT" to "$2"..." echo $NEW_VALUE > /sys/class/gpio/gpio$PORT_NUM/value echo " done."

Права на исполнение:

$ chmod +x switch_gpio

И проверим:

$ switch_gpio 4 on $ switch_gpio 4 off

МОДУЛЬ РЕЛЕ

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

Задействованы другое реле (по нему чуть позже) и транзистор с диодом - те, которые оказались под рукой, близкие по характеристикам. Резистор R1 (1 кОм), диод типа КД522 (1N4148), транзистор H547. В статье есть рекомендации, как выбрать аналоги. Дополнительно стоит проверить выходной ток порта при включенном реле.

Подключаемая к схеме нагрузка составляет 640 Вт. Это значит, что при напряжении в 220 В ток составит 640 Вт / 220 В = 2,9 А. Еще одно требование к реле - чтобы замыкались и размыкались сразу два провода и нагрузка полностью обесточивалась. Один из вариантов, подходящий под такие требования, - реле TRIL-5VDC-SD-2CM-R, управляемое от 5 В и способное коммутировать до 8 А переменного тока 250 В.

Начать монтаж можно на контактной макетной плате. Конечно, для серьезных задач она не подходит, но такие вот небольшие схемы на ней можно быстро собрать и отладить. Сначала запитываем от отдельного источника +5 В, все проверяем без подключения к RPi, заменив подключение к порту резистором и кнопкой к +5 В, промеряем все токи и ставим разъем для подключения к основной плате RPi. Подключать 220 В к такой плате категорически нельзя, поэтому все равно придется брать паяльник в руки и переносить это на печатную плату.

Для подключения к основной плате RPi можно собрать шлейф из пары разъемов и плоского кабеля, подключить к нему промежуточную плату, на которой уже разводятся нужные порты и питание на шлейфы к периферийным устройствам, пока всего на один, уже не 26-, а 4-проводной шлейф. Он подключается к монтажной плате, на которой собирается в точности то же, что и в первом варианте, добавлением клеммников для 220 В. Клеммники распаиваем на реле проводом сечением 0,75, аккуратно проверяем тестером работоспособность схемы, пощелкав реле. Дополнительно можно развести землю. Затем подключаем провода к клеммам, также сечением 0,75, на одномй из которых ставится вилка, на другой - розетка на провод.


Дальше осторожно и аккуратно: 220 В частотой 50 Гц - напряжение, при неаккуратной работе с которым последствия могут быть намного трагичнее, чем сгоревшая RPi. Визуально проверяем пайку на плате реле, проверяем надежность закрепления проводов 220 В в клеммники. Фиксируем плату, а лучше устанавливаем ее в закрытый корпус, чтобы случайно не задеть открытые контакты под напряжением. Не торопимся и последовательно на каждом шагу проверяем тестером. Отключаем плату реле от основной платы RPi, втыкаем вилку в 220. Дыма нет. Отключаем от сети, подключаем основную плату RPi, опять включаем в 220. Дыма опять нет, RPi жива. Щелкаем реле, видим 220 на розетке. Отключаем реле и 220, подключаем к розетке настольную лампу, подаем 220, щелкаем реле. Ура!


Рис. 5. Второй вариант модуля реле, распаянный на печатной макетной плате
с промежуточной коммутационной платой

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

УПРАВЛЕНИЕ ПОРТАМИ С ПОМОЩЬЮ WEBIOPI

Самый простой способ достучаться до портов GPIO через веб - установить WebIOPi. Это приложение, позволяющее визуально задавать направление работы порта (ввод/вывод), видеть его состояние при вводе и задавать значение на выводе.

Установка подробно описана .

$ sudo apt-get install apache2 php5

Для работы WebIOPi использует модуль rewrite и переопределение конфигурации (.htaccess):

$ sudo a2enmod rewrite $ sudo nano /etc/apache2/sites-enabled/000-default

В разделе изменить строку «AllowOverride None» на «AllowOverride All»:

Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all

Добавить пользователя Apache (www-data) в список sudoers:

$ sudo visudo

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

Www-data ALL=(ALL) NOPASSWD: ALL

Рестартовать Apache:

$ sudo /etc/init.d/apache2 restart

$ wget //webiopi.googlecode.com/files/WebIOPi-0.3.tar.gz $ tar xvzf WebIOPi-0.3.tar.gz

Переместить файлы в соответствующий каталог:

$ sudo mv webiopi /var/www

Основной интерфейс доступен по адресу: //localhost/webiopi.

Если открывать страницу непосредственно с RPi, то нужно это делать в Chromium или Midori, ни в NetSurf, ни в Dillo она не работает из-за отсутствия в них поддержки JavaScript.

СВЯЗЫВАЕМ ВСЕ ВМЕСТЕ

Для управления портом из браузера через веб вполне достаточно веб-интерфейса WebIOPi, при желании его можно настроить под свои нужды. Для включения реле при детектировании движения добавим старт Motion в заданное время утром, например в 8:00, в /etc/crontab:

0 8* * * echo $(date)": "$(service motion start) >> /var/log/motion_start.log

Crontab /etc/crontab

Создадим скрипт, который будет запускаться из Motion:

$ nano /home/pi/motion_det

#!/bin/bash /home/pi/switch_gpio 4 on service motion stop sleep 1800 /home/pi/switch_gpio 4 off

Права на исполнение:

Chmod +x /home/pi/motion_det

Теперь в восемь утра будет запущен Motion, который начнет детектировать движение. Когда движение будет обнаружено, запустится скрипт motion_det, который выдаст логическую единицу на порт GPIO 4, подав напряжение на реле и включив кофеварку, остановит Motion, подождет 30 минут и выдаст на тот же порт логический ноль, отключив нагрузку.

ЗАКЛЮЧЕНИЕ

Большая часть компонентов приобретена в «Чип и дип» (включая корпуса, кабельные вводы, платы, переходник и так далее). Это магазин с хорошим выбором, в который можно зайти, посмотреть и потрогать, но недешевый, есть ощутимо бюджетнее. Те, кто не хочет долго ждать доставки RPi, уже могут ее приобрести, например в «Терраэлектронике», хотя и совсем не за 25 долларов.

Чтобы не помешала темнота зимними утрами, вместо камеры (или в дополнение к ней) можно подключить ИК датчик движения. Можно разобраться в кофеварке эспрессо с автоматическим приготовлением и не задумываться вечером о том, что нужно засыпать кофе на следующее утро. Можно подключить реле через ZygBee, добавить других исполнительных устройств, например светильник в спальне. Можно реализовать управление через SMS, подключив 3G-модем, либо с обычного телефона через DTMF, подняв Asterisk или Freeswitch. А можно написать приложение для Андроида и iPhone/iPad.

Вариантов очень много, и с появлением RPi возможности экспериментировать на границе между программированием и физическим миром резко расширились. Да, и, конечно, ближайшего первого апреля нужно будет задуматься о полной поддержке стандарта RFC 2324.

Так сложилось, что первая программа, которую человек пишет при изучении программирования называется «Hello World!». Суть этой программы сводится к тому, чтобы после запуска на экране появилась указанная простая фраза. Обычно для этого используется всего несколько строк кода.

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

1. Выводы общего назначения Raspberry Pi (GPIO)

Одно из главных преимуществ Raspberry Pi - это наличие выводов общего назначения (General Purpose Iinput/Outputs). GPIO - это группа контактов, которыми можно управлять с помощью программы. Причем управление это может быть совсем простым, например, включение/выключение светодиода. Либо весьма сложным - обмен данными с периферийными устройствами по специализированным протоколам.

В терминах цифровой электроники, управлять — значит менять на выводе уровень напряжения. Другими словами, все что мы можем сделать с помощью программы — это соединить желаемый вывод либо с контактом питания (+3.3 В), либо с землей (Gnd). Изобразим это на принципиальной схеме.

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

Если мы в программе подаем на вывод №23 истину True, то Raspberry Pi соединит этот вывод с питанием +3.3В, и через резистор побежит ток. Если же мы передадим ложь — False, то контроллер соединит вывод №23 с землей, и с обоих концов от резистора окажутся равные потенциалы — ток никуда не побежит. То есть, с помощью программы мы как бы щелкаем невидимым переключателем, то вверх, то вниз!

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

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

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

  • анод светодиода имеет более длинный проводник;
  • со стороны катода, корпус светодиода немного срезан.

А вот так выглядят светодиоды «вживую».

Это обычные одноцветные светодиоды. А бывают еще двух, и даже трехцветные. Так, например, выглядит трехцветный (RGB) светодиод:

У этого светодиода сразу четыре ноги. Одна - катод, а три другие - аноды для трех разных цветов.

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

3. Схема включения

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

Принципиальная схема

Внешний вид макета

В схеме, помимо самого светодиода присутствует резистор. Зачем он нужен? Дело в том, что если подключить светодиод напрямую к источнику напряжения 3.3 Вольт (а именно такое рабочее напряжение у Raspberry Pi), то светодиод непременно выйдет из строя!

Для правильной работы светодиода необходимо строго выдерживать рабочий ток и напряжение. Например, обычный красный светодиод имеет рабочий ток 20 мА, при напряжении от 1.8 до 2 Вольт. Резистор позволяет нам снизить напряжение в цепи и установить нужный ток. Такой резистор еще называют токозадающим.

I = U/R;

Сила тока, протекающая через некий элемент равна отношению напряжения, приложенного к этому элементу на его сопротивление.

Выразим из этой формулы сопротивление R:

Как уже было замечено, Raspberry Pi работает с напряжением 3,3 Вольта. Значит, чтобы на светодиоде осталось 2 Вольта, нам нужно куда-то убрать лишние 1,3 Вольта. Заставим резистор съесть их!

Получается, нам нужно подобрать сопротивление резистора таким образом, чтоб он убрал лишние 1,3 Вольта, при токе 20 мА. Подставим эти числа в полученную формулу:

R = 1,3В/20мА = 1,3В/0,02ОА = 130/2 = 65 Ом

Таким образом, в Raspberry Pi токозадающий резистор для красного светодиода имеет номинал 65 Ом. Именно его мы и должны установить в схему.

Если под рукой нет резистора именно на 65 Ом, то можно использовать любой другой большего номинала, например, 100 Ом или даже 200 Ом. Просто светодиод будет гореть чуть менее ярко.

4. Программа

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

Первое, что нам нужно сделать — это задать тип нумерации выводов общего назначения. Есть два типа. Первый тип — это нумерация разъема, а второй тип — нумерация выводов микропроцессора. На рисунке изображен разъем GPIO.

Слева на право начинается нумерация первого типа: 1,2. За ней не подписано, но идет по порядку: 3,4 — 5,6 — и т.д. В конце разъема — 39,40.

Сверху и снизу идет нумерация процессора (BCM). На нашей схеме мы подключили светодиод к выводу №23 согласно нумерации BCM.

В программе тип нумерации задается с помощью функции setmode :

GPIO.setmode(GPIO.BCM)

Теперь нужно задать режим работы вывода №23. Всего есть два режима: вывод (OUT) и ввод (IN). Мы хотим управлять светодиодом, значит нам нужен режим «вывод». А вот если бы мы хотели прочитать какой-то сигнал, например, с датчика, то следовало бы выбрать режим «ввод».

GPIO.setup(23, GPIO.OUT)

Чтобы подать на вывод №23 истину, используем функцию output :

GPIO.output(23, True)

Помимо этих функций, нам понадобится пауза sleep . Эта функция ставит на паузу выполнение программы. В качестве аргумента указывается количество секунд паузы.

Sleep(5)

Наконец, чтобы функции работы с GPIO и sleep работали, в самом начале программы подключим две библиотеки:

From RPi import GPIO from time import sleep

Итак, вся программа целиком.

From RPi import GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23, True) sleep(5) GPIO.output(23, False) GPIO.cleanup()

5. Мигание светодиодом в цикле

Усовершенствуем программу таким образом, чтоб светодиод мигал непрерывно с частотой 1 Герц (то есть один раз в секунду). Для этого нам нужно будет добавить в программу оператор цикла while .

From RPi import GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) while True: GPIO.output(23, True) sleep(0.5) GPIO.output(23, False) sleep(0.5) GPIO.cleanup()

Цикл while будет работать пока истинно условие, указанное в нем. Чтобы цикл работал без остановки, в качестве условия мы поставили True .

Составленная нами программа имеет один неприятный изъян. Если мы ее запустим, она войдет в бесконечный цикл и мы не сможем её остановить штатными средствами. А если мы её остановим нештатно, то не выполнится функция cleanup , что нежелательно.

Добавим в программу еще одну конструкцию, которая позволит нам в любой момент прервать работу цикла с помощью комбинации клавиш Ctrl+C. При этом программа завершится в нормальном режиме и выполнит функцию cleanup .

From RPi import GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) try: while True: GPIO.output(23, True) sleep(0.5) GPIO.output(23, False) sleep(0.5) except KeyboardInterrupt: print "program stop" GPIO.cleanup()

Задания

Наконец, немного поиграем со светодиодами на Raspberry Pi.

  1. Сирена. Подключить два светодиода и мигать ими на манер полицейской сирены — первый гаснет, второй зажигается. Один светодиод оставить на выводе №23, второй можно подключить к соседнему №24.
  2. SOS. Генерировать сигнал SOS с помощью азбуки Морзе. Три раза мигнуть быстро — с периодом 0.5 секунды, затем три раза с периодом 1 секунда, наконец еще три раза опять быстро.

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



Есть вопросы?

Сообщить об опечатке

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