- Построение контроллеров на Raspberry Pi #1: обработка нажатия кнопки
- Что нам понадобится
- Установка библиотеки RPi.GPIO
- Почключение кнопки к Raspberry Pi
- Скрипт на Python для программируемой кнопки
- Программируем Raspberry Pi на голом железе
- В чем подвох?
- Что нам понадобится?
- Приготовления.
- Первая программа.
- GPIO
Построение контроллеров на Raspberry Pi #1: обработка нажатия кнопки
Raspberry Pi (RPi) – это мощный одноплатный компьютер, который позволяет создавать разнообразные программные проекты и электронные устройства. Это первая часть в серии статей о Raspberry Pi. Благодаря доступному разъему GPIO (входов/выходов общего назначения), к Raspberry Pi может быть подключен очень разнообразный ряд электрических, электронных и электромеханических компонентов и устройств. Кроме того, RPi поддерживает такие возможности, как аудио, HDMI, композитное видео, камера, USB и LCD устройства, используя стандартные разъемы, аудио и RCA разъемы. Подключение к сети легко осуществляется посредством стандартного Ethernet разъема. Чтобы помочь вам начать создавать какие-либо устройства, RPi использует язык программирования Python, который идет в составе стандартного дистрибутива операционной системы Debian, установленной на SD карту. В данном вступительном проекте по созданию электронных контроллеров на Raspberry Pi мы узнаем, как подключить в программе кнопку к Raspberry Pi, и как прочитать ее состояние, используя простой скрипт на Python.
Программируемая кнопка не требует каких-либо дополнительных электронных компонентов, и схему довольно легко собрать. Перечень элементов для программируемой кнопки показан ниже.
Что нам понадобится
Установка библиотеки RPi.GPIO
Чтобы прочитать состояние кнопки, необходимо установить на Raspberry Pi библиотеку RPi.GPIO. RPi.GPIO представляет собой программный модуль, который позволяет удобно использовать выводы GPIO Raspberry Pi для управления электронными устройствами. Чтобы установить библиотеку RPi.GPIO на Raspberry Pi откройте LXTerminal и наберите следующую команду:
pi@raspberrypi ~ $ sudo apt-get install python-dev python~rpi.gpio
После ввода команды установки вы увидите на мониторе ряд устанавливаемых файлов библиотеки RPi.GPIO, как показано ниже:
Как только сборка завершится, RPi будет готов к чтению состояния кнопки.
Почключение кнопки к Raspberry Pi
Подключение кнопки к RPi выполняется довольно просто. Важная вещь, о которой стоит помнить, это то, что выводы GPIO Raspberry Pi работают с постоянным напряжением 3,3 вольта. Подача на них напряжений более 3,3 В может вывести RPi из строя. Электрическая схема подключения кнопки показана на рисунке ниже.
Дополнительно ниже показана принципиальная схема подключения.
Несмотря на то, что схема подключения к RPi довольно проста, перепроверьте соединения перед программированием Raspberry Pi. Этот важный шаг гарантирует успех вашему проекту, когда скрипт на Python будет написан и запущен на RPi.
Скрипт на Python для программируемой кнопки
Следующий этап сборки проекта – это создание скрипта на питоне для чтения состояния кнопки, подключенной к GPIO выводу Raspberry Pi. Скрипт Phyton показан ниже:
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.IN,pull_up_down=GPIO.PUD_UP) while True: inputValue = GPIO.input(18) if (inputValue == False): print("Button press ") time.sleep(0.3)
Вы можете напечатать этот скрипт с помощью текстового редактора nano в терминале LXTerminal или в Python IDLE (Integrated Development and Learning Environment, интегрированная среда разработки и изучения Python). Сохраните скрипт, как pbbutton.py в каталоге home/pi на Raspberry Pi. Затем введите в LXTerminal следующую команду, чтобы запустить скрипт на RPi, как показано ниже:
pi@raspberrypi ~ $ sudo python pbbutton.py
Затем нажмите кнопку. Если скрипт напечатан правильно, вы увидите сообщение « button press », показанное на экране монитора. Поздравляем с созданием программируемой кнопки!
Также вы можете посмотреть видео, приведенное ниже.
Кнопку можно легко запрограммировать для вывода сообщений и откликов на нажатие. Попробуйте изменить сообщение « Button Press » на отображение вашего имени или любого другого слова при нажатии кнопки. В следующей статье проекта мы рассмотрим, как запрограммировать Raspberry Pi для включения и выключения светодиода вашей программируемой кнопкой.
Программируем 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, а оно нам не нужно.
Первая программа.
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( это можно прочитать в даташите).
И объявим переменную, которая определяют, что порт настроен на выход (GPIO_GPFSEL1) и переменную, подающую низкий уровень(то есть лампочка горит) на порт (GPIO_GPCLR0).
volatile unsigned int* gpio; int main(void) < gpio = (unsigned int*)GPIO_BASE; gpio[GPIO_GPFSEL1] |= (1 >
Собираем, прошиваем и радуемся.
В следующей части попробуем поиграться с таймерами и прерываниями.