Я наконец-то дождался прибытия своего RPi! 🙂
Первым делом, после вскрытия коробочки, вставил sd карту с установленной системой openelec и подключил питание. Девайс радостно замигал своими индикаторами и был немедленно подключен к телевизору. На экране появился интерфейс XBMC. Таким образом получился медиа-плеер. 🙂
Но в этой статье нужно не развлекаться с медиа-плеером, а мигать светодиодом. Поэтому приступим к созданию окружения для компиляции программ под RPi (если на RPi стоит нормальный, т.е. полноценный linux, то можно просто поставить на него средства компиляции и сбрасывать исходники).
Создание окружения для компиляции
Первым делом необходимо стянуть tool-chain, который и предоставить возможность cross-compile. Стягивать его будем с github:
git clone git://github.com/raspberrypi/tools |
Теперь, когда у нас есть tool-chain, можно с его помощью собрать библиотеки wiringPi, которые помогут нам работать с GPIO как с пинами Arduino.
Скачиваем wiringPi:
git clone git://git.drogon.net/wiringPi |
И редактируем файл wiringPi/wiringPi/Makefile, заменяя компилятор и пути инсталляции, так чтобы компилятор был из tool-chain, а пути инсталляции ссылались в tool-chain, например:
Компилятор из tool-chain:
CC = /home/rozh/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-gcc |
Инсталяция в tool-chain:
install -m 0644 wiringPi.h /home/rozh/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/lib/gcc/arm-bcm2708hardfp-linux-gnueabi/4.7.1/includ |
А путь для конечного файла библиотеки libwiringPi.a должен быть вида:
/home/rozh/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/lib/gcc/arm-bcm2708hardfp-linux-gnueabi/4.7.1/ |
Вот с окружением и все, теперь можно компилить под arm 🙂
Приложение для мигания светодиодом
Тут ничего сложного. Это простой пример использования wiringPi.h. Полный список возможностей и документацию можно посмотреть на сайте разработчика: http://projects.drogon.net/raspberry-pi/wiringpi.
Собственно листинг программы
#include <wiringPi.h> #include <stdio.h> #include <stdlib.h> int main (void) { if (wiringPiSetup () == -1) //Инициализация wiringPi exit (1); pinMode (1, OUTPUT) ; //Установка 1 пина на выход for (;;) //бесконечный цикл мигания :-) { digitalWrite (1, 1) ; //подача высокого напряжения printf("light!\n"); delay(1000); //ждем 1 сек digitalWrite (1, 0) ; //подача низкого напряжения printf("no!\n"); delay(1000); //ждем 1 сек } } |
Подключенный к 1 пину светодиод будет мигать с интервалом в 1 секунду.
Компиляция приложения
Что бы из исходника получить бинарник нужно его скомпилировать tool-chain’ом. Для этого указываем в командной строке путь до компилятора и указываем параметры компиляции, например я использую вот такой скриптик:
CC_ARM="/home/rozh/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-gcc" FILE=$1 PROJECT="/home/rozh/RPi" PARAMS="-lwiringPi" $CC_ARM -o "$PROJECT/arm/$FILE.bin" "$PROJECT/source/$FILE.c" $PARAMS |
Где:
- CC_ARM — путь до компилятора в tool-chain
- FILE — имя файла для компиляции
- PROJECT — папка с проектом
- PARAMS — параметры для копиляции
Параметр -lwiringPI необходим для компиляции файла с wiringPi.h.
Запуск приложения
Прежде всего скопируем скомпиленный бинарник на RPi любым способом. Далее подключимся через ssh и запустим прогу командой:
./led.bin |
Если светодиод подключен правильно, то он начнет мигать. Вот и помигали светодиодом с помощью Raspberry Pi. 🙂
Ну и на закуску видео: