Программирование платы raspberry pi через язык python

Raspberry Pi — собираем и настраиваем компьютер для юного кибернетика Часть 2

?senpai_ed (senpai_ed) wrote,
2017-03-24 04:46:00senpai_ed
senpai_ed
2017-03-24 04:46:00Category:Raspberry Pi — собираем и настраиваем компьютер для юного кибернетика Часть 1.

7. Знакомство со средствами программирования, установленными на Raspberry Pi

Для изучения программирования в Raspbian ОС предустановлены пакеты Python, Scratch, Node-RED, SonicPi и Wolfram Mathematica. Именно ради того, чтобы сделать максимально доступным и удобным для всех изучение програмирования и физического компьютинга проект Raspberry Pi и создавался несколько лет назад! Так что же представляют в трех словах предустановленные на RasPi средства разработки?

Python представлять не надо – это самый популярный в университетской и научной среде язык программирования. Для работы с датчиками через GPIO для Python написана и предустановлена библиотека.

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

Помимо самого языка Python версий 2 и 3 со средой разработки IDLE, в Raspbian ОС предустановлена специальная версия популярной игры Minecraft Pi и библиотеки на Python для управления игрой. (Введение см.

здесь и здесь)
Node-RED – визуальный редактор от IBM с открытым исходным кодом для создания “интернета вещей”, позволяющий практически без программирования, соединением готовых модулей “собирать” довольно сложные приложения для систем типа “умный дом”. (Введение см. здесь и здесь ).

Язык Scratch – инструментарий визуального программирования, позволяющий детям создавать анимации и игры методом Drag&Drop. (Введение см. здесь и здесь )
Уникальный в своем роде язык SonicPi позволяет программировать музыку. (Введение см.

здесь)
Пакеты Wolfram и Mathematica – наиболее полная система для современных технических вычислений в мире. Она будет незаменимым помощником для технических вычислений как учащихся школ, так и студентов ВУЗов. Хотя продукт для Windows платный, на Raspbian ОС установлена полнофункциональная бесплатная версия.
(Введение см. здесь и здесь)Кроме того, в Raspbian ОС по умолчанию предустановлены Node.js, Perl и Ruby.Для удобной работы с кодом на Raspberry Pi предустановлен один из лучших редакторов с подсветкой синтаксиса и среда разработки Geany.

8. Восстановление работы Raspberry Pi после сбоев

Может возникнуть ситуация, когда несовместимость вновь установленного аппаратного или программного обеспечения вызовет ошибку при запуске системы. Напирмер, хотя в настройках Raspberry Pi 3 имеется пункт Open GL, как показала практика, включение этой опции вызовет ошибку загрузки системы.

Как показала практика, у Raspberry Pi имеется несколько возможностей восстановления после сбоя загрузки.1) Откат до последней резервной копии microSD-карты при помощи Win32DiskImager.

Делайте почаще образы стабильной версии системы программой Win32DiskImager и можете быть уверены, что в случае сбоя система будет востановлена за считанные минуты.2) Редактирование конфигурационного файла config.txt с microSD-карты на компьютере при помощи кард-ридера.

К примеру, в случае сбоя с Open GL надо закомментировать символом # последнюю строчку “dtoverlay=vc4-kms-v3d” в файле config.txt и система запустится нормально.3) Удаленное подключение к Raspberry Pi по сети через SSH-терминал.

Во многих случаях, например, в случае того-же сбоя загрузки при включении Open GL, после загрузки ядра системы успевает запуститься SSH-сервер и продолжает работу в фоновом режиме. Можно зайти в консоль Raspberry Pi через SSH-терминал, отредактировать конфигурационные файлы (boot/config.txt), либо запустить raspi-config и отключить сбойные опции.

4) Чистка системы.

Удалите кеш пакетов:
sudo apt-get cleanУдалите осиротевшие пакеты:

sudo apt-get autoremove

Обновите список пакетов:

sudo apt-get update

Исправьте зависимости:

sudo apt-get -f install

Переустарновите пакет, если установка пакета была прервана

sudo apt-get install –reinstall имя_пакета

9. Удаленное управление Raspberry Pi (SSH/VNC)

Как и любой Unix-системой, Raspberry Pi можно управлять удаленно несколькими способами.Самый простой – управление в консоли по протоколу SSH.

Чтобы это стало возможным, необходимо зайти в настройки Raspberry Pi (sudo raspi-config), выбрать пункт меню “Interfacing options”, в следующем окне выбрать пункт “SSH” и подтвердить включение сервера SSH при запуске.

Рекомендуется сразу поменять пароль по умолчанию пользователя “pi” с “raspberry” на какой-нибудь другой, содержащий не менее 8 символов в английской раскладке.

Затем можно скачать на другом компьютере бесплатный SSH-клиент PuTTY, запусить его и ввести в строку “Host Name (or IP address)” локальный IP-адрес Raspberry Pi. В консоли появится запрос на логина, а за ним – пароля. Если все введено верно, появится приветствие Raspberry Pi и зеленый курсор ввода команд.

Через SSH-терминал можно устанавливать и удалять программы, копировать, перемещать и удалять файлы, исполнять консольные команды системы и скрипты (BASH, Python, Perl…), работать с конфигурационными файлами Raspberry Pi. Словом, делать все многообразие операций, доступных в консоли Unix-систем.

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

Помимо терминального доступа к консоли, в Raspberry Pi встроена возможность полноценного управления в графическом интерфейсе. Для этого на Raspberry Pi предустановлена бесплатная версия VNC-сервера. Включить его автозапуск можно там-же, где до этого мы включили SSH-сервер. Надо выбрать следующий пункт меню “Iinterfacing options” – “VNC” и подтвердить влючение сервера. Для полноценного доступа к Raspberry Pi необходимо будет скачать бесплатный VNC-viewer, запустить его, и также как в случае с SSH ввести локальный IP-адрес Raspberry Pi. Пройдя процедуру авторизации, вы попадете на Raspberry Pi, как если бы находились перед подключенным к нему дисплеем, нажимали на клавиатуру и кликали мышью. Скорость работы в VNC-клиенте лишь немного медленнее, чем на самом Raspberry Pi. Меню открываются почти с той же скоростью, только графические файлы при открытии прорисовываются не мгновенно, с неболшой задержкой в доли секунды.При удаленном подключении к Raspberry Pi по SSH и VNC необходимо только, чтобы устройство было подключено к локальной сети и сети питания. Клавиатура, мышь и монитор при этом могут быть и не подключены к Raspberry Pi . Это удобно в случае настройки “малинки” в качестве веб-сервера, или сервера IoT (сервера управления датчиками “умного дома”).

К слову, по умолчанию размеры виртуального экрана в VNC слишком малы – всего 640х480 пикселей. Приведу мой маленький “хак” по настройке комфортного разрешения экрана (1024х768) при удаленном подключении по VNC:

Откроем для редактирования файл конфиргурации Raspberry Pi:
sudo nano /boot/config.txt
Раскоментируем (удалим слева символ #) и слегка подправим следующие строки:

hdmi_force_hotplug=1hdmi_group=2

hdmi_mode=16

10. Установка комплекта ПО интернет-разработчика LAMP

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

Общепризнанным стандартом среды интернет-разработчика в ОС Linux является комплект программ, стостояший из вебсервера Apache, СУДБ MySQL и языка программирования PHP (LAMP).

Для удобства администрирования баз данных также рекомендуют установить ПО PHPMyAdmin (все программы распространяются бесплатно).

Следуя пошаговым инструкциям с офсайта Raspberry Pi , за полчаса LAMP и самая популярная система управления сайтами (CMS) WordPress были установлены на “малинку” и настроены для работы. Привожу пошаговую инструкцию с пояснениями, чтобы у вас этот процесс не занял больше времени, чем у меня.

[Пошаговая инструкция по установке LAMP и Worpdress]

1. Установка сервера Apache2 ( create database wordpress;Включение Apache mod rewrite

sudo a2enmod rewrite

Включение возможности указывать настройки в .htaccess

sudo nano /etc/apache2/sites-available/000-default.conf

Добавим следующий код

< VirtualHost *:80 >< Directory "/var/www/html" >AllowOverride All

< /Directory >

4. Установка PHPMyAdmin (3 мин)
sudo apt-get install phpmyadmin

nano /etc/apache2/apache2.conf

Записать в конец файла “Include /etc/phpmyadmin/apache.conf”Перезагрузка Apache

sudo service apache2 restart

5. Установка WordPress

Скачивание WordPress

cd /var/www/html/sudo rm *

sudo wget https://ru.wordpress.org/wordpress-4.7.2-ru_RU.tar.gz

Распаковка WordPress

sudo tar xzf wordpress-4.7.2-ru_RU.tar.gzsudo mv wordpress/* .

sudo rm -rf wordpress-4.7.2-ru_RU.tar.gz

Установка и настройка WordPress
Заходим в броузере по вашему текущему адресу, например http://192.168.0.100, либо по адресу http://localhost .

В соответствующих полях указываем имя, адрес (localhost), логин и пароль пользователя созданой вами ранее базы данных, название сайта, логин и пароль администратора сайта (не используйте простые имена типа “root” и “admin”, придумайте пароль не короче 8 символов, содержащий цифры и буквы в разных регистрах), а также ваш e-mail.

Через несколько секунд после подрвеждения ввода данных WordPress установится и уже будет готов к работе! Комплекты необходимых плагинов, таких как cyr3lat, wp-edit, hyper-cache, wp-db-backup и т.п., можно установить позже, просто введя их названия в форме поиска страницы Plugins консоли Администратора WordPress.

Теперь Raspberry Pi готов стать домашним веб-сервером интернет-разработчика.

(Подробнее см. здесь, или здесь).

11. Знакомство с языком Python

Источник: https://senpai-ed.livejournal.com/116084.html

Программирование на Python на Raspberry Pi

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

Содержание

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

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

Этот язык был выбран не случайно. “Питон” – популярный, многофункциональный, красивый, а главное – достаточно легкий в освоении ЯП. А “Малина” изначально и была ориентирована на новичков – её разработчик с помощью данного одноплатника хотел научить детей и подростков глубоко понимать устройство и принципы функционирования компьютеров.

С чего начать изучение программирования на python для raspberry

Python-программирование на Raspberry Pi нельзя назвать ни простым, ни сложным – все зависит от того, что хочет сделать человек, владеющий “Малиной”.

Какие-то базовые вещи (например, взаимодействие по GPIO) выполняется элементарно, тогда как более сложные (к примеру, написание скрипта, стабилизирующего квадрокоптер) требуют тщательного изучения документации как ЯП, так и гироскопа и прочих модулей.

Основы программирования на Python

Raspberry Pi и программирование в Питоне неразрывно связаны. Чтобы начать этим заниматься, необходимо освоить базовые вещи:

  • переменные;
  • функции;
  • циклы;
  • переходы;
  • способы ограничения блоков кода (в случае с Python – табуляцию).

Не должно уйти много времени – большинству хватает 1-2 вечеров. Все вышеперечисленное называется синтаксисом языка. Если его хорошо знать и уметь им пользоваться, то остальное понять будет не трудно.

Почерпнуть соответствующую информацию можно из многочисленных ресурсов в интернете. Однако лучше, конечно, использовать официальную документацию – она опубликована на python.org. Но, к сожалению, русского перевода на указанном ресурсе не размещено.

А чтобы узнать непосредственно о взаимодействии с “Малиной” через Пайтон, рекомендуется прочесть Python programming with Raspberry Pi.

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

Там, например, написано, как при помощи модулей заставить Raspberry Pi отправлять через Python SMS, включать/отключать Bluetooth и т. д.

Читайте также:  Детектор движения с камерой android на базе arduino

Нужно ли что-то дополнительно устанавливать и как запустить скрипт

На Raspberry Pi возможно использовать абсолютно любые языки, компиляторы или интерпретаторы, которые существуют для Linux. Однако Пайтон для “Малины” хорош тем, что в Raspbian уже установлено все необходимо для запуска соответствующих скриптов (даже если при их написании использовалась библиотека для работы с GPIO).

Рассматривать на Raspberry Pi Python примеры особого смысла нет – их легко найти в документации или на GITHUB. Однако следует посмотреть, как вообще писать скрипты и запускать их.

Для этого нужно открыть любой текстовый редактор или средство для работы с кодом и прописать в нем следующую строку:

Затем нужно сохранить это в файле в формате .py (например, hw.py). После этого потребуется открыть консоль, перейти в каталог, в котором размещен скрипт (если в домашней директории, то дополнительно ничего делать не нужно) и ввести команду: python hw.py. В ответ на это отобразится строка: Hello, World.

Вот так легко можно запустить скрипт на Python под “Малиной”.

Что еще нужно для программирования Raspberry

Чтобы работать с “Малиной”, потребуется освоить несколько библиотек – в частности, предназначенную для взаимодействия с GPIO. Это необходимо по причине того, что без соответствующих знаний не получится работать с внешними модулями. А именно в них заключается особенность и достоинство данного одноплатного компьютера.

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

Источник: https://myraspberry.ru/programmirovanie-python-na-raspberry-pi.html

Raspberry Pi. Работаем с GPIO на Python – Часть 1

Как-то я писал о том, что планирую использовать Raspberry Pi в качестве веб-сервера, управляющего моим устройством. Пришло время задуматься над интерфейсом подключения. У разработчика, желающего подключить свое железо к Raspberry есть два пути: использовать для этого USB или выводы общего назначения (GPIO).

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

В статье речь пойдет о выводах общего назначения Raspberry PiGPIO:

  • возможности GPIO
  • распиновка GPIO
  • как работать с GPIO на Python
  • характеристики GPIO (прежде всего показатели скорости)
  • пример использования GPIO Raspberry

Предварительно я наладил удаленную работу с Raspberry Pi через SSH, чтобы каждый раз не подключать  монитор и клавиатуру. Поэтому в исходном состоянии у меня к Raspberry подключено всего два “провода”: питание и сетевой кабель для соединения с роутером. Хотя принципиального значения это не имеет: все нижеописанное будет справедливо, как в случае работы с консолью Raspberry через SSH, так и при использовании подключенной клавиатуры.Порт GPIO (сокращение от General Purpose Input Output) – это программно управляемые выводы общего назначения, которые могут работать как входы (для считывания сигнала) или как выходы (для передачи сигнала). На Raspberry Pi они выполнены в виде двух рядов штырьков с шагом в 2,54 мм (разъем PLD). Выражение “общего назначения” означает, что эти выводы пользователь может использовать в своих целях так, как ему захочется, поскольку они не выполняют каких-то определенных жестко заданных функций. При работе с GPIO следует только иметь ввиду, что это цифровые выводы с максимальным уровнем напряжения 3,3 В, соответствующим логической единице. Поэтому программно выводить на GPIO аналоговый сигнал или подавать на него аналоговый сигнал извне для последующий оцифровки нельзя.

Итак, что представляет собой порт GPIO и каковы его возможности? GPIO объединяет в себе 26 выводов, среди которых присутствуют следующие:

  • 2 вывода с постоянным уровнем напряжения 5 В
  • 2 вывода с постоянным уровнем напряжения 3,3 В
  • 5 общих выводов (земля)
  • 17 цифровых программно управляемых выводов

Каждый из этих 17 выводов может работать как вход, либо как выход. Однако помимо этого, некоторые из этих выводов могут выполнять альтернативные необязательные функции. Что это значит? Каждый из таких выводов в зависимости от программной настройки могут работать либо как обычный вывод, либо как вывод одного из последовательных интерфейсов. С помощью таких выводов GPIO альтернативно могут реализовываться последовательные интерфейсы I2C, SPI и другие последовательные интерфейсы посредством UART.

Примечание: Это знакомые понятия для тех, кто сталкивался с программированием микроконтроллеров. Для тех, кто не сталкивался и на данном этапе пока желает просто программно выводить “1” и “0” на нужном выводе – знания этих интерфейсов не понадобится. Поэтому не буду здесь уделять этому внимание.

Скажу только, что среди микроконтроллеров и других устройств (различные датчики, АЦП, ЦАП, микросхемы памяти) это очень распространенные интерфейсы, поэтому наличие выводов этих интерфейсов в GPIO Raspberry при необходимости позволяет очень легко и с минимумом программного кода “научить” Raspberry “общаться” с вашим устройством.

Как понять где какой вывод находится? Для этого необходима распиновка (цоколевка) GPIO. В официальной документации приведена распиновка разных версий GPIO Raspberry Pi. Здесь я приведу самую последнюю на данный момент распиновку GPIO – для Raspberry Pi Model B Rev.2:

На схеме в скобках указана альтернативная функция каждого вывода:

  • SDA, SCL – выводы интерфейса I2C
  • TXD, RXD – выводы UART
  • MOSI, MISO, SCLK, CE0, CE1 – выводы интерфейса SPI
  • GPCLK0 – (General Purpose Clock) вывод для формирования варьируемой тактовой частоты для внешних устройств
  • PCM_CLK, PCM_DOUT – выводы аудио-интерфейса I2S

Пожалуй, это самый важный раздел. Нужно помнить о некоторых особенностях GPIO и соблюдать определенные меры предосторожности, чтобы не залететь еще на 35-50$ не повредить Raspberry. Ниже приведены такие “критические особенности”, а также несколько нюансов, которые просто могут быть полезны, и которые желательно помнить при разработке.

  • Максимальный суммарный ток обоих выводов 3.3 В равен 50 мА! Поэтому эти выводы могут использоваться для питания внешних устройств, только если их потребляемый ток меньше 50 мА.
  • Максимальный суммарный ток обоих выводов 5 В равен 300 мА! Эти выводы также могут использоваться для питания внешних устройств только в том случае, если их потребляемый ток меньше 300 мА.
  • Нельзя на GPIO подавать напряжение больше 3,3 В! Цифровые выводы GPIO имеют уровни напряжения 0 – 3,3 В и не совместимы с традиционными уровнями напряжения 0 – 5В! Поэтому нельзя напрямую соединять Raspberry Pi и цифровые устройства, работающие с TTL-уровнями 5 В. Если подать на GPIO вывод Raspberry логическую единицу, представляющую собой 5 В, а не 3,3 В – вывод может выйти из строя.
  • Выводы GPIO 14 и GPIO 15 по-умолчанию выполняют альтернативную функцию и являются выводами UARTRXD и TXD. Поэтому после включения на них присутствует высокий уровень 3,3 В. Программно их можно переконфигурировать в обычные выводы. Все остальные GPIO после включения Raspberry выполняют основную функцию и работают как обычные цифровые выводы.
  • Все настраиваемые пины GPIO по-умолчанию являются входами. И поэтому имеют высокое входное сопротивление. При этом подтяжка логического уровня у них не включена, выводы “висят в воздухе”, поэтому после включения Raspberry напряжение на них может “плавать”. Это нормально. Исключением является только 2 следующих вывода:
  • Выводы GPIO 0 (SDA) и GPIO 1 (SCL) по-умолчанию “подтянуты” к питанию. Поэтому после включения Raspberry на них присутствует напряжение логической единицы (3,3 В).
  • Сигнал на любом из цифровых выводов может служить источником внешнего прерывания. Кто раньше сталкивался с микроконтроллерами поймет, насколько это может быть полезно. Как использовать прерывания в Raspberry Pi – пока это идея для следующего поста.

Пожалуй, все.. Ну и в целом нужно помнить, что GPIO – это выводы, непосредственно подключенные к процессору Raspberry Pi, они являются инструментом для взаимодействия с ним.

Поэтому неосторожное обращение с GPIO может привести к необратимым последствиям для процессора. На этом с “пугалками” заканчиваю.

Главное и простое правило – не подавать больших напряжений и не потреблять большой ток. Переходим к делу.

Примечание: Работать с GPIO, по сути, можно двумя способами:

1) Используя bash и файловую систему Rasbian
Raspbian является одним из дистрибутивов Linux, а концепция Linux предполагает, что любой объект является файлом.

Именно это позволяет выводить и считывать сигналы с GPIO обычными командами оболочки bash прямо в терминале! Вывод логической единицы при этом выглядит как команда записи “1” в файл, соответствующий нужному выводу. Подробные примеры даны здесь.

 

2) Используя языки программирования (самые разные от C до Бэйсика)

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

Предположим нам нужно вывести логическую “1” или “0” на GPIO 7 и считать сигнал с GPIO 8.

0) Для работы с GPIO на Python нужна специальная библиотека RPi.GPIO. Сейчас ее можно установить прямо с репозиториев, а не качать архив и устанавливать вручную, как было раньше. Воспользуемся этой возможностью:

     sudo apt-get install python-rpi.gpio (или python3-rpi.gpio для 3-й версии Питона)

Оказывается, в новом дистрибутиве Raspbian она уже установлена, поэтому двигаемся дальше.

0.5)  GPIO является системным элементом Raspbian, поэтому работать с ним нужно только под суперпользователем. Будем писать программу прямо в консоли, поэтому запускаем python

     sudo python

1) Импортируем библиотеку для работы с GPIO:

     import RPi.GPIO as GPIO

2) Устанавливаем способ нумерации выводов GPIO.
Зачем? Дело в том, что во многих функциях этой библиотеки необходимо указывать номер вывода, над которым мы хотим произвести какую-либо манипуляцию.

 Однако указываемый номер можно интерпретировать по-разному: либо это номер GPIO, либо это номер пина (P1-26) на плате Raspberry (см. распиновку). Чтобы не возникало путаницы, сразу после импорта желательно “указать библиотеке”, какую нумерацию мы будем использовать в программе.

     GPIO.setmode(GPIO.BCM)   #GPIO.BCM – будет использоваться нумерация GPIO 

                                                     #GPIO.BOARD – будет использоваться нумерация пинов P1-26

3) Конфигурируем выводы
Поскольку мы будем выводить сигналы на GPIO 7, конфигурируем его как выход, а GPIO 8 – как вход:
     GPIO.setup(7, GPIO.OUT)    #конфигурируем GPIO 7 как выход
     GPIO.setup(8, GPIO.IN)        #конфигурируем GPIO 8 как вход

Читайте также:  Atmel микроконтроллеры: помощники начинающим программистам

Примечание: именно после выполнения этой команды на GPIO 7 установится ровно 0 В, поскольку этот вывод больше не является входом и на нем нет “плавающего” потенциала.

С помощью необязательного параметра pull_up_down функции setup можно также настроить “подтяжку” вывода к питанию или к земле:

     GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP)           #подтяжка к питанию 3,3 В
     GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)   #подтяжка к земле 0 В
     GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_OFF)        #режим по-умолчанию

4) Формируем и считываем сигналы

Формируем “1” и “0” на GPIO 7 и считываем сигнал с GPIO 8:

     GPIO.output(7, True)             #выводим на GPIO 7 логическую “1” (3.3 V)

     GPIO.output(7, False)            #выводим на GPIO 7 логический “0”
     signal = GPIO.input(8)           #считываем сигнал с GPIO 8 в переменную signal

5) Завершаем работу

После всех нужных операций корректно завершаем работу:

     GPIO.cleanup()

Выполнение этой операции приведет к возвращению всех выводов GPIO в первозданное состояние.

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

Это может быть чревато тем, что при попытке повторно поработать с этими выводами будет возникать сообщение, о том, что вывод уже используется: “RuntimeWarning: This channel is already in use, continuing anyway.”

Весь пример целиком:

     import RPi.GPIO as GPIO       #подключаем библиотеку
     GPIO.setmode(GPIO.BCM)    #устанавливаем режим нумерации
     GPIO.setup(7, GPIO.OUT)     #конфигурируем GPIO 7 как выход
     GPIO.setup(8, GPIO.IN)         #конфигурируем GPIO 8 как вход
     GPIO.output(7, True)               #выводим на GPIO 7 логическую “1” (3.3 V)

     GPIO.output(7, False)              #выводим на GPIO 7 логический “0”
     signal = GPIO.input(8)             #считываем сигнал с GPIO 8 в переменную signal
     GPIO.cleanup()                        #завершаем работу с GPIO

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

     import RPi.GPIO as GPIO
     GPIO.setmode(GPIO.BCM)
     GPIO.setup(7, GPIO.OUT)
     while (1):
          GPIO.output(7, True) 
          GPIO.output(7, False)
Смотрим, что получается на осциллографе, подключенного к выводу 7, при выполнении этого кода:  
Итак, программное циклическое переключение цифровых выводов GPIO осуществляется с максимальной частотой ~27 кГц. На второй картинке видно, что в каждом из устойчивых состояний (“1” и  “0”) вывод может находится в течение ~ 18-20 мкс. Получить импульсы меньшей длительности с помощью используемых в статье программных средств нельзя.

Примечание: частота импульсов, изображенных на верхних картинках, может незначительно колебаться. Это связано с тем, что Linux на Raspberry многозадачна и не всегда уделяет нашей программе все процессорное время. Также следует иметь ввиду, что добавление дополнительных команд внутрь цикла while может существенно увеличить время каждого импульса.

По нижним картинкам можно оценить время переключения пина GPIO из одного состояния в другое (другими словами длительность переходного процесса) – оно составляет приблизительно 50 нс. Надо сказать, довольно неплохие результаты, однако и конкурировать по скорости с  ПЛИС GPIO Raspberry Pi не может.

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

Следует иметь ввиду, что те пины GPIO, которые работают в режиме последовательных интерфейсов, позволяют добиться больших скоростей, поскольку при работе последовательных интерфейсов на высоких скоростях процессор аппаратно формирует тактовые частоты и сигналы согласно  правилам того или иного последовательного интерфейса. Так, например, с помощью вывода GPCLK0 можно получать импульсы частотой порядка 100 МГц и выше.

Как можно применить все это на практике? Зачем выводить “1” или “0” на GPIO? Например, можно помигать светодиодами! Например, можно управлять силовой нагрузкой и включать / выключать любые бытовые приборы, работающие от сети 220 В. Для этого понадобится Raspberry Pi и всего 7 деталей.

Схема такого программного “выключателя” приведена ниже:

Примечание: микросхема-оптодрайвер MOC3041M имеет гальваническую развязку силовых цепей от слаботочных, поэтому она является “барьером безопасности” между Raspberry и сетью 220 В, выход ее из строя не повредит Raspberry.

Конденсатор C8 должен быть высоковольтным и выдерживать напряжение ~400 В.

Данная схема может коммутировать токи до 16А. Она полностью отлажена, проверена на практике и занимает очень мало места (к сожалению, у меня не сохранились фото устройства, где она используется).

Подача “1” на GPIO 7 Raspberry Pi приведет к срабатыванию оптодрайвера и открытию симистора V2, который начнет пропускать через себя ток, идущий от сети 220 В к силовой нагрузке. Прибор включается.

Как только на GPIO 7 возникает “0” – симистор V2 закрывается и цепь нагрузки размыкается. Прибор выключается. Все просто!

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

На этом все. В следующем посте о Raspberry постараюсь описать работу с UART и SPI.

Источник: http://hexvolt.blogspot.com/2013/02/raspberry-pi-gpio.html

9 языков для Raspberry Pi

Мини-компьютеры в помощь обучению, хозяйству и жизни.

15 августа 20172 минуты16691

В 2011 году одноплатный компьютер Raspberry Pi был выпущен для тех, кто устал искать готовые решения и решил творить технологическое окружение самостоятельно. В то время как Arduino – это игрушка в большей степени для любителей работать руками, «малиновый» продукт – разминка мозга для программистов.

Всего за 6 лет под Raspberry были адаптированы почти все популярные языки программирования. Какие-то имеют существенные ограничения, какие-то работают на полную катушку. Рассмотрим 9 представителей второй категории.

Scratch

Официальный сайт предлагает пользователям Raspberry первый делом обратиться к Scratch. Исходники языка уже включены в стандартную операционную систему Raspbian. Начать создание IoT с помощью Scratch может как взрослый специалист, так и совсем ещё ребёнок. Недаром он всего за 10 лет выбился в топ-20 языков по числу запросов в поисковиках.

Python

Возможно для вас это будет сюрпризом, но Pi в названии – это не математическая константа, а отсылка к Python. IDLE, стандартная среда разработки программ на Raspberry, работает как раз на змеином языке. На официальном сайте в разделе документация вы найдёте базовое руководство. Кроме того, благодаря Python Games и их исходникам, вы познакомитесь с возможностями языка.

HTML5 и CSS3

Компьютеры Raspberry Pi подходят для создания систем IoT, а встроенный браузер Epiphany — подходящий клиентский интерфейс. Это значит, что без языков веба не обойтись. HTML5 и CSS3 позволят вам решить вопрос создания виртуальной оболочки умного дома с минимальными затратами времени и незначительными ограничениями.

JavaScript

JavaScript — динамическая сила Raspberry Pi. Вы сможете поработать с ним благодаря платформе Node.js, позволяющей вам создавать десктопные и веб-приложения. Не стоит забывать про библиотеку jQuery, которая работает в любом браузере, и наполняет его привычными динамическими функциями.

Java

Возможность запустить Java-код на любой платформе – главная концепция языка. И эта концепция особенно полезна для таких платформ, как Raspberry Pi. Вы сначала отладите код на «большой» ОС, а потом перенесёте на Raspbian. При этом разработка приложений на Java внутри «малиновой» системы затруднительна — здесь нет полноценной среды для этого языка.

С

Так как Raspbian – ОС на базе Unix, в качестве базового языка здесь выступает С. С его помощью вы получите максимальную производительность без использования машинных команд. Это особенно важно для серверных систем в составе IoT. Надмножество языка, Objective-C, используется для написания приложений для iPhone и iPad, что также может пригодиться вам с «малиной».

C++

С++ пригодится там, где нужны и скорость, и безопасность, и чёткость работы. Спектр задач при этом невероятно широк – от работы непосредственно с железом до организации взаимодействия устройств и клиентов. С++ переменит на «малиновую» сторону опытных разработчиков из прошлого века и тех, кто до этого писал код лишь для микроконтроллеров.

Perl

Perl постепенно сдаёт позиции в мире больших машин, но в Raspberry Pi это пока один из основных инструментов.

Он поставляется «из коробки», имеет множество расширений и дополнений, с его помощью можно организовать сбор информации или переписать Си-программу.

 Это ударит по быстродействию, зато работать с таким кодом на порядок проще.                                                           

Erlang

Erlang — язык программирования для создания сложных систем. Допустим вы разрабатываете на своем одноплатном друге атомную электростанцию или нейронно-вычислительную сеть. C++ или другой прикладной язык не подойдёт. А вот Erlang позволит вам минимизировать ошибки и извлечь максимум возможностей из Raspberry Pi. Конечно, если вы дорастете до этого уровня.

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

Источник: https://geekbrains.ru/posts/raspberry_langs

Настраиваем Raspberry Pi 3 и программируем светофор

Raspberry Pi – одноплатный компьютер размером 55 × 85 мм.

Изначально проект создавался как образовательный. Raspberry Pi отлично подходит для изучения основ программирования и электроники из-за небольшой стоимости (порядка $35) и наличия практически всех необходимых признаков настоящего компьютера.

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

Устройство широко используется для создания различных электронных устройств от радиоприемников и медиаплееров до роботов и «умных домов».

Самая мощная на сегодня модель Raspberry Pi 3 Model B имеет разъём HDMI для подключения монитора, 4 USB-порта для подключения USB устройств, Ethernet-порт для подключения к сети, встроенный Wi-Fi и Bluetooth, 4 ядерный 64-битный процессор ARM 1.2 ГГц, 1 ГБ оперативной памяти.

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

1. Внешний вид, основные элементы, корпус

Итак, в наших руках Raspberry Pi 3 Model B.

Читайте также:  Уроки arduino: основы работы с семисегментными дисплеями

Верхняя сторона выглядит так:

Нижняя сторона:

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

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

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

Вот теперь можно собрать корпус и пометить туда плату микрокомпьютера:

Корпус имеет открывающуюся крышку для удобного подключения камеры, дисплея и контактов GPIO.

2. Подготовка к включению и первый запуск

Для первого запуска Raspberry необходимо следующее:

  • микро SD-карта с установленной операционной системой (OC) Raspbian, рекомендуемой для этого устройства (оптимальная емкость карты – 8 Гб, класс скорости – 10);
  • монитор с HDMI входом;
  • сетевой блок питания с выходным напряжением 5 В и током не менее 2 А, с выходным разъемом micro-USB;
  • USB-мышь и USB-клавитура.

Образ операционной системы Raspbian, созданной на основе Linux Debian 8 Jessi, можно скачать в разделе Downloads сайта raspberrypi.org. Для начала можно воспользоваться образом RASPBIAN JESSIE LITE, как наиболее простым в изучении. Записать образ на SD-карту удобно из-под Windows с помощью программы Win32DiskImager. Способ установки и сама программа описаны на сайте Raspberry по адресу.

Вы также можете воспользоваться файлами, размещенными на нашем сайте в карточке Raspberry Pi 3 или напрямую скачать с Яндекс диска:

  • образ операционной системы;
  • программа Win32DiskImager.

Дальнейшее описание базируется именно на этом образе.

Мышь и клавиатура, подключенные к Raspberry без проблем распознаются системой. Можно также использовать беспроводную мышь и клавиатуру, например Bluetooth, но их надо настроить после запуска Raspberry, а для этого нужна хотя бы USB-мышь. У нас в хозяйстве не нашлось USB-клавиатуры, поэтому для первого запуска мы подключили USB-мышь, а также монитор и питание:

Кстати, на плате нет выключателя питания, она запускается сразу при подключении разъема, и начинается загрузка операционной системы. После загрузки на экране появляется рабочий стол с вполне привычными (но оригинальными) обоями и иконками:

На начальном экране имеются легко распознаваемые иконки Меню, интернет-браузера, менеджера Bluetooth, регулятора громкости, настройки сети и некоторые другие. Из них, пожалуй, самая нужная при настройке и работе – это черный экранчик в правой верхнем углу: терминал. С помощью терминала вводятся команды операционной системы.

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

В OC используется программа LXTerminal, которая и запускается при щелчке правой кнопкой мыши по иконке. Следует заметить, что многие команды требуют ввода в начале строки приставку sudo (gksudo при запуске программ с графическим интерфейсом), что позволяет выполнить команду от лица администратора компьютера, то есть с наивысшими правами (sudo – Super User Do).

Только администратор может устанавливать и удалять программы, а также менять параметры OC и ее конфигурацию.

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

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

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

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

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

Это делается щелчком на иконке с логотипом Голубого Зуба рядом с индикатором подключение к сети в правом верхнем углу экрана. Далее надо нажать Add Device и выбрать ваши устройства из списка найденных беспроводных устройств.

Следует отметить, что при всем удобстве использовании Bluetooth устройств ввода с Raspberry – они не занимают разъемов USB – эти устройства в нашем случае периодически теряли связь с платой.

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

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

3. Знакомство с GPIO, программированием на Python и запуск светофора

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

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

, так и посылать команды на исполнительные устройства: реле, двигатели, актуаторы, серво-машины и многие другие.

Вот схема 40-контактного разъема GPIO:

Как видно, кроме обычных цифровых пинов вход/выход, принимающих или выдающих значения логических 0 и 1, имеются контакты, работающие по распространенным интерфейсам I2C, SPI и UART. Также есть возможность генерации ШИМ и прерываний от изменения уровней на входах.

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

Алгоритм этой программы такой: при нажатии кнопки начинает мигать зеленый свет, затем на короткое время зажигается желтый, затем красный; красный свет горит некоторое время, затем короткое время горят красный и желтый, и, наконец, снова зеленый; далее система ждет очередного нажатия кнопки.

Для программирования этого алгоритма воспользуемся встроенной в образ ОС Raspbian интегрированной среды разработки (IDE) на языке Python (Пайтон).

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

Это интепретирущий язык, его команды выполняются последовательно, одна за другой. В IDE Python команды можно выполнять, просто вводя их с клавиатуры и нажимая клавишу Enter в конце строки.

Среда разработки программ на языке Python запускается с рабочего стола последовательным выбором Menu – Programming – Python 3.

Далее, в открывшемся окне Python Shell следует нажать File – New File.

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

#!/usr/bin/python

import RPi.GPIO as GPIO
from time import sleep

RED_PIN = 36

YELLOW_PIN = 32
GREEN_PIN = 29
BUTTON_PIN = 40

print (“RPi.GPIO init start”)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
print (“RPi.GPIO init end”)

print (“GPIO setup”)

GPIO.setup(RED_PIN, GPIO.OUT)

GPIO.setup(YELLOW_PIN, GPIO.OUT)
GPIO.setup(GREEN_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.output(RED_PIN, 0)
GPIO.output(YELLOW_PIN, 0)
GPIO.output(GREEN_PIN, 1)

while True:
    inp = GPIO.input(BUTTON_PIN)
    if inp==0:
       for x in range(0, 5):
           GPIO.output(GREEN_PIN, 1)
           sleep(0.

5)
           GPIO.output(GREEN_PIN, 0)
           sleep(0.5)
       GPIO.output(YELLOW_PIN, 1)
       sleep(2)
       GPIO.output(YELLOW_PIN, 0)
       GPIO.

output(RED_PIN, 1)
       sleep(5)
       GPIO.output(YELLOW_PIN, 1)
       sleep(1)
       GPIO.output(RED_PIN, 0)
       GPIO.output(YELLOW_PIN, 0)
       GPIO.

output(GREEN_PIN, 1)

Первая строка указывает, где в ОС находится интерпретатор Python.

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

Функция, начинающаяся с print, просто выводит свой аргумент на экран.

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

Строки, начинающиеся с GPIO.setup, задают режим выхода (OUT) или входа (IN) соответствующих пинов, а аргумент pull_up_down=GPIO.PUD_UP включает подтягивающий резистор на входе 40, к которому подключена кнопка.

Поскольку программа на Python не имеет стандартного «вечного цикла», как, например в Ардуино, где загруженная в микроконтроллер программа выполняется бесконечно, пока подано питание, оператор while True: осуществляет этот цикл.

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

Оператор присвоения inp = GPIO.input(BUTTON_PIN) записывает в переменную inp значение на входе 40. Если кнопка не нажата – это 0, если нажата – 1. Если inp равно 0, то начинается цикл работы светофора:

  • с помощью цикла for 5 раз мигает зеленый светодиод;
  • на 2 секунды зажигается желтый (пауза задается оператором sleep);
  • желтый гаснет, зажигается красный на 5 секунд и т д.

После окончания цикла работы светофора все начинается снова.

Теперь необходимо собрать электрическую схему с помощью проводов с разъемами без пайки:

Короткие ножки светодиодов (это минус) подключаем к земле – контакты 6, 14, 20; длинные (плюс) через резисторы 240 Ом – к контактам 29 (зеленый), 32 (желтый), 36 (красный).

Кнопку подключаем к контактам 39 и 40.

Теперь в редакторе с нашей программой выбираем Run – Run Modul или нажимаем F5, и программа начинает выполняться, ожидая нажатия кнопки.

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

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

Тут нам понадобится терминал, без него обойтись.

Сначала сохраним нашу программу в виде файла svetofor-rpi.py3 в корневом каталоге пользователя /home/pi.

Теперь запустим терминал и после приглашения pi@raspberrypi:~ $ наберем следующую строку: gksudo leafpad /etc/xdg/autostart/Svetofor.desktop.

Тем самым мы вызовем текстовый редактор leafpad и создадим файл Svetofor.desktop в папке автозапуска.

В текстовом редакторе набираем следующее:

[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=Svetofor Comment= Exec=sudo python /home/pi/svetofor-rpi.py3 Terminal=false

Type=Application

и сохраняем файл.

Основное в этом файле – строка, начинающаяся с Exec, которая запускает интерпретатор Python на выполнение программы svetofor-rpi.py3.

Можно проверить, зайдя в папку /etc/xdg/autostart с помощью файлового менеджера, чья иконка в виде двух ящичков расположена в левом углу экрана, появился ли в этой папке файл Svetofor.

Теперь, если выключить питание, отключить монитор, мышь и клавиатуру, и снова включить питание, наш светофор начнет работать в автономном режиме!

Видео работы светофора:

Мастер Кит

Источник: https://www.rlocman.ru/review/article.html?di=335505

Ссылка на основную публикацию
Adblock
detector