sonyps4.ru

Как написать программу для raspberry. GPIO-пины Raspberry Pi и их использование из Python

Сегодня четвертый урок, на котором мы поработаем с портами GPIO, в частности помигаем светодиодом в разных режимах.

Урок ориентирован на начинающих пользователей и представлен в текстовом и видео-форматах.

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

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

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

Программирование Raspberry Pi GPIO на языке Python

Для сегодняшнего урока мы выбрали язык программирования Python.

Python — современный объектно-ориентированный язык. Он наиболее часто используется для программирования GPIO на Raspberry Pi. Python входит в состав операционной системы Raspbian.

Сборка модели

Для работы нам потребуется собрать следующую схему:

Схема подключения светодиода и кнопки к Raspberry Pi

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

Распиновка Raspberry Pi. Схема с ledgerlabs.us

Собранная модель со светодиодом и кнопкой

Управление светодиодом на Raspberry Pi из консоли

Заходим в LXTerminal и набираем:

После этого вместо имени пользователя в начале строки должно отобразиться >>> .

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

Import RPi.GPIO as GPIO #импорт библиотеки
GPIO.setmode(GPIO.BOARD) #"включение" GPIO
GPIO.setup(7, GPIO.OUT) #объявление 7-го пина как выход

Затем для включения светодиода можно использовать команду
GPIO.output(7, 1)

А для выключения
GPIO(output(7, 0)

После работы с GPIO желательно выполнить команду
GPIO.cleanup()

Программа для мигания светодиодом на Raspberry Pi

Для автономной работы светодиода нам потребуется написать и запустить программу. Для этого откроем предустановленную программу IDLE 3 и в меню File нажмем New. В открывшемся окне мы можем писать программу.

Напишем:
import RPi.GPIO as GPIO #импорт библиотеки для работы с GPIO
import time #импорт библиотеки для ожидания
GPIO.setmode(GPIO.BOARD) #"запуск" GPIO


____GPIO.output(7, 1) #включение светодиода

____GPIO.output(7, 0) #выключение светодиода
____time.sleep(1) #ожидание 1 секунды

Сохраним программу в папке /home/pi.

Теперь мы можем запустить программу из LXTerminal с помощью команды
sudo python programname.py

Управление светодиодом с помощью кнопки

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

Для этого подключим кнопку к порту 5.

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

Import RPi.GPIO as GPIO #импорт библиотеки GPIO
GPIO.setmode(GPIO.BOARD) #"включение GPIO"
GPIO.setup(7, GPIO.OUT) #объявление порта 7 как выход
GPIO.setup(3, GPIO.IN) #объявление порта 3 как вход
while True: #бесконечный цикл
____if GPIO.input(3) == False: #если кнопка зажата
________GPIO.output(7, 1) #включаем светодиод
____else: #иначе
________GPIO.output(7, 0) #выключаем

Управление светодиодом с клавиатуры

Сделаем еще одну программу. Она будет менять состояние светодиода при получении пустой строки и заканчиваться при получении другой строки.

Import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
while True:
____str = input("Enter - включение, другое - выход ");
____if str != "":
________break
____else:
________GPIO.output(7, 1)
____str = input("Enter - выключение, другое - выход ");
____if str != "":
________break
____else:
________GPIO.output(7, 0)
GPIO.cleanup()

На этом четвертый урок по Raspberry Pi для начинающих закончен, продолжение следует!

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

В чем подвох?

На первый взгляд задача кажется тривиальной: скачиваем keil, создаем проект… Но все не так просто. Все среды программирования(keil, IAR, Atolic) поддерживают максимум ARM9.У нас же ARM11. Это связано с негласным правилом, что на голом железе пишут до ARM9, а после на Линуксе. Но все-таки есть одна лазейка: arm-none-eabi-gcc поддерживает любой ARM.
Вторая проблема заключается в том, что под данный процессор(BCM2835) нет никаких конфигурационных файлов, header"ов и т.д. Здесь нам на помощь придет загрузчик Raspberry Pi. И ничего, что он пропритетарный. Он выполняет две функции: инициализирует процессор и его периферию, а также передает управление ядру kernel.img. Мы просто замаскируем свою программу под ядро и загрузчик её запустит.

Что нам понадобится?

1) Сама Raspberry Pi, карта памяти к ней и питание.
2) Даташит на процессор
3) Компьютер с установленным Linux (но может быть можно и на Винде. Не знаю, не пробовал).
4) Кросскомпилятор, установленный на компьютере из пункта 3. Я использую arm-none-eabi-gcc
5) Содержимое этой папочки.

Приготовления.

Нам нужно отформатировать карту памяти в FAT16 и закинуть на нее содержимое этой папки . Это загрузчик плюс ядро. Затем удаляем оттуда файлы kernel.img и kernel_emergency.img. Это ядро Linux, а оно нам не нужно.

Первая программа.

Теперь мы можем приступить к написанию первой программы. Создаем файл main.c и пишем следующий код
int main (void) { while(1) { } } void exit (void) { while(1) { } }
Как видите, эта программа ничего не делает. Функция exit зачем-то нужна компилятору.
Теперь соберем её.
arm-none-eabi-gcc -O2 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles main.c -o kernel.elf
arm-none-eabi-objcopy kernel.elf -O binary kernel.img

Полученный файл kernel.img кидаем на карту памяти. Готово!

GPIO

Вряд ли Вас устроит программа, которая не будет делать абсолютно ничего. Сейчас попробуем зажечь лампочку.
Для начала объявим адрес, по которому лежит GPIO(это можно прочитать в даташите).
#define GPIO_BASE 0x20200000UL

И объявим переменную, которая определяют, что порт настроен на выход (GPIO_GPFSEL1) и переменную, подающую низкий уровень(то есть лампочка горит) на порт (GPIO_GPCLR0).
#define GPIO_GPFSEL1 1
#define GPIO_GPCLR0 10

Ну и наконец модифицируем главную функцию для зажигания лампочки:
volatile unsigned int* gpio; int main(void) { gpio = (unsigned int*)GPIO_BASE; gpio |= (1 << 16); gpio = (1 << 16); while(1) { } }

Собираем, прошиваем и радуемся.

В следующей части попробуем поиграться с таймерами и прерываниями.

В 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 станет вашим верным спутником в программировании, какой бы путь вы ни выбрали.

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=1
hdmi_group=2
hdmi_mode=16

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

Поскольку не только я считаю, что за интернетом - будущее, на компьютере юного программиста должен быть установлен пакет программ, обеспечивающийх возможность обучения основам интернет-программирования, создания и администрирования вебсайтов. Общепризнанным стандартом среды интернет-разработчика в ОС Linux является комплект программ, стостояший из вебсервера Apache, СУДБ MySQL и языка программирования PHP (LAMP). Для удобства администрирования баз данных также рекомендуют установить ПО PHPMyAdmin (все программы распространяются бесплатно). Следуя пошаговым инструкциям с офсайта Raspberry Pi , за полчаса LAMP и самая популярная система управления сайтами (CMS) Wordpress были установлены на "малинку" и настроены для работы. Привожу пошаговую инструкцию с пояснениями, чтобы у вас этот процесс не занял больше времени, чем у меня.


1. Установка сервера Apache2 (<1 мин)
sudo apt-get install apache2 -y
Проверка работы Apache
links2 http://192.168.0.100
Просмотр папки сайта
cd /var/www/html
ls -al

2. Установка PHP 5 (1 мин)
sudo apt-get install php5 libapache2-mod-php5 -y
sudo service apache2 restart
Создание тестовой страницы
sudo rm index.html
sudo nano index.php

Проверка работы PHP
links2 http://192.168.0.100

3. Установка mysql 5 (3 мин)
sudo apt-get install mysql-server php5-mysql -y
sudo service apache2 restart

Присвоение прав пользователю Apache
sudo chown -R www-data: .

Создание базы MySQL
mysql -uroot -ppassword
mysql> create database wordpress;

Включение Apache mod rewrite
sudo a2enmod rewrite

Включение возможности указывать настройки в.htaccess
sudo nano /etc/apache2/sites-available/000-default.c onf

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

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

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

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

Скачивание Wordpress

cd /var/www/html/

Распаковка Wordpress

sudo tar xzf wordpress-4.7.2-ru_RU.tar.gz

sudo 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

Объектно-ориентированный интерпретируемый язык программирования Python появился в конце 80-начале 90х годов в центре математики и информатики в Нидерландах благодаря усилиям Гвидо ван Россума.
Изначально язык был ориентирован на повышение производительности разработчика и читаемости кода.
Python характеризуется минималистичным синтаксисом при высокой функциональности, поддерживает все основные парадигмы программирования, поддерживает динамическую типизацию, автоматическое управление памятью, обработку исключений, многопоточность вычислений, модульность.
В настоящее время Python активно используется как универсальная среда для научных расчётов. Во многих популярных программах трёхмерной графики, таких как Blender, язык Python используется для расширения стандартных возможностей программ.
Python используется во многих крупных компаниях, таких как Dropbox, Google, Facebook, Instagram.
Особенностью синтаксиса языка Python является выделение блоков кода с помощью отступов, поэтому в Python отсутствуют операторные скобки begin/end и фигурные скобки. Также в Python отсутствую явные завершающие символы конца строк, такие «;» как в Perl.
Одной из привлекательных сторон Python стала богатая библиотека стандартных модулей. Помимо стандартной библиотеки существует огромное множество прикладных библиотек для Python в самых разных областях. Для Python созданы программные каркасы для разработки веб-приложений, самым популярным из которых является Django.
С Python поставляется библиотека tkinter для создания кроссплатформенных программ с графическим интерфейсом. Также для Python существуют расширения для всех основных библиотек графических интерфейсов.
Существуют расширения Python для создания игр (Pygame), работы с мультимедиа, 3D-моделирования, обработки графики, построения графиков, астрономических вычислений (Astropy).
Установка и обновление пакетов для Python осуществляется через интерфейс PyPI (Python Package Index). Модули задействуются в начале программ командой import.
Изначально Python предполагался в качестве основного языка программирования на Raspberry Pi. Не случайно devboard имеет символическое окончание «Pi» в названии.
Для работы с внешними датчиками, подключаемыми к Raspberry Pi для Python написаны и предустановлены в Rasbian несколько библиотек, таких как RPi.GPIO.
Вместе с Python на Raspberry Pi предустанавливаются стандартный интерфейс разработки и тестирования приложений IDLE и удобный редактор Geany.
В Интернет имеется масса руководств по знакомству с языком Python и готовых примеров для создания IoT-приложений на Raspberry Pi, понятных даже школьникам младших классов.
Надо учитывать, что большинство примеров в Интернет написаны для версии Python 2.х, не совместимой с 3.Х Поэтому, на Raspberry Pi предустановлены обе версии Python. Также вместе с Python 3.Х поставляется программа (скрипт) «2to3», конвертирующая код с версии 2.х в 3.Х.

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

(Введение в основы языка Python см. и )

12. Работа с Python и GPIO, мигание светодиодом

После знакомства с основами синтаксиса и базового набора команд языка Python, решающим шагом на пути физического компьютинга является решение, вроде бы, простой задачи: «помигать светодиодом».
Именно с этого шага многие школьники, студенты и взрослые «гики» всего мира начинали свой путь в IoT-программировании.
Для этого мне в первую очередь потребовалось приобрести несколько радиодеталей: несколько пар резисторов от 100 до 300Ом (как предлагается в руководствах) и несколько светодиодов разного цвета (я взял красный, синий и белый). В ходе поиска подходящего радиоларька выяснилось, что радиодеталями в моем городе торгует только одна, конкретная точка. Стоимость деталей оказалась невысокой (3-5 рублей за штуку).
При сборе простенькой схемы, состоящей из светодиода и резистора, я обнаружил, что 40-пиновый кабель к моей монтажной плате (breadboard) не маркирован красной полосой по краю, а состоит из разноцветных кабелей. В интернете схемы подключения для такого кабеля к breadboard и Raspberry Pi 3 слету я не нашел. Пришлось открыть схему GPIO и прозванивать контакты кабеля цифровым тестером, чтобы понять, как его подсоединять.
Также оказалось, что «гребенка» для подключения кабеля к breadboard у меня не имеет отводов для вывода на линии питания breadboard, так что пришлось подключить Ground на гребенке к минусу на breadboard.
Собрав схему таким образом, чтобы длинный контакт (+) светодиода был подключен к 21 порту GPIO, а короткий — через резистор сопротивлением в 100 Ом — к «земле» (-), запустил Raspberry Pi 3 и подключился к нему по VNC.
Создал в IDLE3 программу мигания светодиодами flashpi.py, описанную на сайте http://edurobots.ru/ , и сохранил ее в папке /home/pi."
Запустил программу с помощью F5 в IDLE3 (можно также запустить программу командой "sudo python3 flashpi.py" в LXTerminal) и... светодиод не загорелся.
Проверив все контакты и правильность сборки схемы, понял, что дело не в аппаратной, а в программной части системы. Из примера в одной из электронных книжек по Raspberry Pi 3 выяснилось, что вместо команды
GPIO.setmode(GPIO.BOARD) надо инициализировать порты командой GPIO.setmode(GPIO.BCM). После правки кода и запуска программы, вслед за нажатием клавиши Enter светодиод, наконец, загорелся ярким светом!
Повторное нажатие клавиши Enter выключало светодиод. Нажатием любой другой клавиши осуществлялся выход из программы и корректное завершение работы с портами GPIO.
Вот код рабочей программы ("__" заменяем на пробелы - это необходимые отступы в Python):

Из цикла закрытие работы с GPIO

Никогда в жизни я так не радовался горящему светодиоду! Да и давно так не радовался вообще! Как это, надеюсь, рано или поздно сделали 10 миллионов покупателей Raspberry Pi, я таки "помигал светодиодом"! Причем, «помигал» программно!

Заключение - напутствие юным кибернетикам

Надеюсь, что мой долгий, но захватывающий путь длиной в 3 месяца, от решения купить одноплатный компьютер Raspberry Pi 3 до программного «мигания светодиодом», был пройден не зря.
Он познакомил меня с новым миром Unix и физического компьютинга, а заодно подготовил пошаговое руководство для всех, кто хочет войти в него (в первую очередь — для преподавателей школ и старшеклассников) и создал платформу для дальнейшего освоения физического компьютинга, веб-программирования и системного администрирования. На базе Raspberry Pi 3 стоимостью чуть больше 2 т.р. стало возможным создание домашнего вебсервера и мультимедиа-центра, интересных решений по автоматизации выполнения рутинных задач и более сложных IoT-систем, в том числе, решений для концепции «Умный дом».
Лично для меня в мои 43 года было занимательным и полезным приключением осваивать незнакомый мне язык программирования Python и новую, не похожую на распространенные у нас, операционную систему.
Компьютер Raspberry Pi 3, настроенный и проверенный в работе, вместе с breadboard, радиодеталями и комплектом из 16 датчиков я изначально планировал подарить дочке на День рождения для использования в качестве учебного ПК и перспективного исследовательского инструмента в кружке информатики местной гимназии. Договорился с учителем информатики о предоставлению помощи по приобретению и внедрению Raspberry Pi во внеурочных занятиях по информатике среди заинтересованных ребят и олимпиадников. Надеюсь, как и мне, Raspberry Pi даст моей дочери и ребятам в гимназии мощный импульс в учебе и развитии, раскроет новые возможности изменения себя и окружающего мира к лучшему при помощи современных технологий.

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



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


Язык C представляет собой C мощный язык программирования общего назначения. Он быстрый, довольно гибкий и доступен на всех платформах. Он очень эффективен. Это главная причина, почему он очень популярен, несмотря на то, что ему уже больше 40 лет. Данный язык был первоначально разработан Деннисом М. Ричи для разработки операционной системы UNIX в Bell Labs, а его первая реализация произошла в 1972 году на компьютере DEC PDP-11.


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


Чтобы продемонстрировать, как создать программу на C, скомпилировать ее и запустить на Raspberry Pi, мы напишем простую программу, которая будет печатать «hello world» в терминале. Процесс программирования на C состоит из четырех этапов: создание файла с исходным кодом, компиляция программы, создание исполняемого файла и выполнение программы.


Для начала откройте текстовый редактор Nano и создайте новый файл с расширением «.c», введя его в командной строке:


sudo nano hello-world.c

В этом файле вы напишете код на языке программирования C. Вы можете написать код в любом текстовом редакторе, просто удостоверьтесь, что файл имеет расширение «.c». Теперь введите этот код в Nano:


#include int main() { printf("Hello, World! \n"); return 0; }

После ввода кода нажмите Ctrl-X и Y, чтобы сохранить и выйти из Nano.


Код, написанный на C, необходимо будет скомпилировать, прежде чем он будет запущен на компьютере. Компиляция – это процесс преобразования кода, который вы написали, в машиносчитываемые инструкции, которые могут быть поняты процессором компьютера. Когда вы компилируете исходный файл, создается новый скомпилированный файл. Например, ввод команды ниже будет компилировать hello-world.c в новый файл под названием myfirstcprogram.


gcc hello-world.c -o myfirstcprogram

Теперь нам нужно сделать нашу программу исполняемой. Для этого нам просто нужно изменить права доступа к файлам. Введите это в командной строке:


chmod +x myfirstcprogram

Все, наша программа готова к выполнению. Чтобы запустить ее, в командной строке следует ввести:


./myfirstcprogram

Таким образом, программирование на языке C для Raspberry Pi является простым и достаточно быстрым.



Загрузка...