Программируем Raspberry Pi на голом железе. Установка и настройка Python и библиотек на Raspberry Pi

Вычислительных возможностей платы Raspberry Pi 3(далее по тексту Rpi3) более чем достаточно для разработки программ сразу в целевой системе. Однако процесс разработки можно ускорить и сделать более комфортным, если разрабатывать программное обеспечение для Rpi3 на своем персональном компьютере.

В данной статье я собираюсь описать процесс настройки кросс-компиляции в Eclipse под Windows. Также будет описана настройка Eclipse для работы с удаленной системой Raspbian на Rpi3.

Если вы впервые сталкиваетесь с Eclipse, то установить последнюю версию можно по ссылке Eclipse CDT .
Виртуальную машину Java, необходимую для работы Eclipse, можно загрузить по ссылке JRE .

После установки указанных выше компонентов интегрированная среда разработки Eclipse CDT сможет быть запущена на вашем компьютере. В качестве вспомогательных утилит будем использовать msys из пакета MinGW, поэтому необходимо также загрузить MinGW .

Осталось установить инструментальные средства для кросс-компиляции программ.
Для этого необходимо их загрузить по следующей ссылке toolchain .
На указанном сайте также имеется инструкция на английском языке по установке инструментария tutorial .

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

  • – утилита для записи образа операционной системы Rpi3 на карту памяти.
  • SmarTTY – консольный SSH – клиент, позволяющий установить соединение с платой по протоколу SSH. Помимо стандартных функций имеет возможность загрузки файлов на плату из меню утилиты.
  • UpdateSysroot командный файл Windows , запускающий процесс синхронизации файловой системы sysroot платы и инструментария.

Если вы только что приобрели плату Rpi3 и еще не успели установить операционную систему на карту памяти, то утилита WinFlashTool поможет вам это сделать.
Необходимо загрузить с официального источника образ операционной системы Raspbian .
Дальше распакуйте загруженный образ, установите карту памяти в кард-ридер и запишите на нее с помощью WinFlashTool образ операционной системы.

Настройка беспроводной сети WLAN на плате RPi3 описана в моей предыдущей статье.

С помощью утилиты SmarTTY установите соединение с платой. Это необходимо для исключения проблем во время настройки удаленного соединения в Eclipse.
Создайте новое соединение, указав IP -адрес платы, логин и пароль для входа (значения по-умолчанию для логина и пароля pi и raspberry соответственно).



Теперь нужно провести синхронизацию файловой системы sysroot. Для чего это нужно?
Представьте ситуацию, когда вы установили самую последнюю версию образа Raspbian и не выполнили синхронизацию.
В новой версии были добавлены или изменены заголовочные файлы и файлы библиотек. Работая с кросс-компилятором вы используете старые, не идентичные с последней версией системы, заголовочные и библиотечные файлы из каталога sysroot. Поэтому нет никакой гарантии, что успешно собранная на компьютере программа будет работать внутри платы RPi3.
Запускаем скрипт UpdateSysroot на выполнение и наблюдаем за обновлением файлов на компьютере (это может занять несколько десятков минут).

Настало время настроить удаленное соединение с платой Rpi3 в Eclipse . Запускаем Eclipse CDT , выбираем в главном меню пункт Window->Show View->Other… В открывшемся окне выбираем «remote systems».

После этого в нижней части экрана появиться новая вкладка «Remote Systems». В этой вкладке необходимо определить новое соединение, нажав на первую кнопку справа.

В открывшемся окне выбираем тип соединения «Linux».

После проделанных манипуляций в закладке «Remote Systems» появится новое соединение, которое имеет подразделы:

  • Sftp Files – в этом разделе можно просматривать содержимое удаленной файловой системы. Также возможно выполнять копирование файлов с помощью перетаскивания (Drag and Drop) из локального проекта на удаленную машину и обратно.
  • Shell Processes – раздел позволяет просмотреть запущенные на удаленной машине процессы.
  • Ssh Shells – в этом разделе можно открыть новый SSH -терминал и вводить команды прямо из Eclipse. Надобность в отдельной утилите при этом отпадает.






Таким образом с помощью закладки «Remote Systems» мы сможем копировать собранные на компьютере программы в файловую систему Rpi3 , запускать их на выполнение через Ssh Shells и удалять ненужный процесс в разделе Shell Processes .
Настало время создать новый проект в Eclipse и написать простую демонстрационную программу.
Создаем новый проект из главного меню File->New->C Project.

Для сборки я использую собственный , поэтому тип проекта нужно выбрать Makefile project->Empty Project

Далее вы можете просто скопировать мой Makefile в буфер клавиатуры (Ctrl+C) и вставить его в пустой проект Rpi3_Project (Ctrl+V).

Открыв Makefile в первой его строке после комментария вы увидите список используемых целей:

.PHONY: test project all clean

  • test – проверяет установлен ли в системе кросс-компилятор arm-linux-gnueabi-gcc и утилита make.
  • project - создает структуру каталогов внутри проекта.
  • all — производит сборку проекта.
  • clean — производит очистку проекта от временных файлов(в том числе исполняемого).

Теперь нужно убедиться в наличии инструментальных средств. Для этого необходимо выполнить команду make test.
Но сначала нужно добавить все четыре цели в закладку Make Target в правой части экрана.

Двойным щелчком мыши по цели test запускаем ее на исполнение и видим в окне Console примерно следующее:

Если сообщение не было выведено в консоль не смотря на то, что инструментарии arm-linux-gnueabihf и MinGW были ранее установлены, то это может означать только то, что не прописаны пути к инструментам в системной переменной Path . Необходимо добавить в Path путь к каталогу MinGW/msys/1.0/bin и каталогу bin пакета arm-linux-gnueabihf.

Теперь создадим структуру каталогов внутри проекта двойным щелчком на цели project (make project).

Makefile организован таким образом, что для компиляции исходных файлов их названия должны быть добавлены в переменную SRC, все остальные исходники не будут компилироваться даже если они расположены внутри каталога /src.

Структура каталогов проекта такова:

  • bin – каталог, содержащий исполняемый файл после сборки.
  • Debug – каталог с отладочной версией программы, которая не содержит оптимизации кода и содержит отладочную информацию.
  • Release – каталог с финальной версией программы, которая содержит оптимизированный код и не содержит отладочной информации.
  • inc – каталог для заголовочных файлов.
  • obj – содержит временные файлы сборки проекта, имеет подкаталоги Debug и Release.
  • src – исходные файлы проекта.

С помощью данного Makefile можно компилировать исходные файлы, написанные на таких языках программирования как C , C++, Assembler. При этом можно использовать все доступные языки программирования для создания одной программы.

В каталоге /src создадим новый исходный файл main.c, добавим в него следующие строки:

#include int main(int argc, char **argv); int main(int argc, char **argv) { printf("Welcome to the Raspberry Pi 3 programming\n"); return 0; }/* main */

#include

int main (int argc , char * * argv ) ;

int main (int argc , char * * argv )

printf ("Welcome to the Raspberry Pi 3 programming\n" ) ;

return 0 ;

} /* main */

Проверим, чтобы переменная SRC содержала название исходного файла main.c .
Дальше выполним сборку проекта, запустив цель all .
Теперь можно скопировать полученный исполняемый файл в домашний каталог на целевой плате используя перетаскивание файла мышью.

Сделаем правый клик мышью на разделе Ssh Shells для открытия контекстного меню, в котором необходимо выбрать Launch Shell . Откроется новая вкладка Remote Shell , в поле Command которой можно вводить команды оболочки.

Установим права доступа для скопированного файла Rpi3_Project с помощью команды:

sudo chmod 777 Rpi3_Project

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

Самым популярным языком, используемым для программирования Raspberry Pi, является Python. Python считается интерпретируемым языком. Это означает, что вы можете написать программу или скрипт и выполнить его непосредственно, а не компилировать его в машинный код. Это обеспечивает некоторое удобство программирования и запуска кода для новичков, которые пока не слишком хотят лезть в такие сложности как компилирование, отладка и прочие моменты, так приятные опытным программистам.



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


Помимо быстрого исполнения кода Python обладает другими преимуществами, не свойственными большинству интерпретируемых языков. Например, в Python вам не нужно явно указывать тип переменной (число, строка, список). Интерпретатор определяет типы данных при выполнении скрипта. Интерпретатор Python может работать двумя способами: как интерактивная оболочка для выполнения отдельных команд или в качестве программы с командной строкой для выполнения автономных скриптов. Интегрированная среда разработки (IDE) Python для Raspberry Pi называется IDLE и с ней мы будем работать.


Для запуска этой среды кликните дважды на иконке IDLE 3 на рабочем столе, либо в нижнем левом углу нажмите на меню и выберете Programming→IDLE 3. Через несколько секунд появится оболочка Python Shell. Чтобы начать написание новой программы на Python, выберете File→New Window, после чего откроется новое окно редактора код.



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



Если вы знакомы с программированием на Arduino, то сможете заметить, что концепция написания программ в чем-то схожа. Здесь также есть раздел настроек (setup) и бесконечный цикл (loop), который в данном случае организуется через while True. Оператор % дает остаток от деления. При написании программы следите за отступами, поскольку Python является высокоструктурированным языком, и отступы здесь четко определяют структуру.


Чтобы запустить программу, выберете Run Module и придумайте название для вашего скрипта. Чтобы выйти из программы, закольцованной в бесконечный цикл, нажмите Ctrl-C. Также вы можете организовать не бесконечный цикл, а, скажем, цикл со счетом до 100. Для этого используйте код, приведенный ниже.



Для более функционального программирования на Python вам стоит научиться пользоваться функциями. Функции в Python определяются через оператор def. В примере, приведенном ниже, мы организуем функцию настройки setup() и функцию бесконечного цикла loop(), а затем вызовем их в основном теле нашей программы.



Как вы теперь видите, программировать на Python очень просто. Изучите этот язык программирования лучше и сможете создавать потрясающие программы на 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) { } }

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

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

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


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




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


2. Сделай свой собственный корпус для Pi




Хотите сделать собственный корпус? В хранится чертеж корпуса, который можно распечатать. Этот шаблон можно вырезать и склеить.

3. Смотрим видео с Raspberry Pi




Теперь, когда ваш Pi находится в красивом корпусе, самое время подключить его к телевизору и смотреть медиа-контент с помощью ОС OpenELEC. Изучив инструкцию , вы сможете настроить всё в кратчайшие сроки.


4. Мини веб-браузер




Поскольку ваш Raspberry Pi подключен к телевизору, то почему бы не посерфить в сети на большом экране? Для этих целей вам нужно что-нибудь получше Midori, поэтому попробуйте Chromium. Просто зайдите в терминал, наберите sudo apt- get install chromium-browser и нажмите Enter.


5. ZX Spectrum Pi




ZX Spectrum получил вторую жизнь внутри Raspberry Pi. Для эмуляции этой 8-битной прелести напечатайте в терминале sudo apt-get install fuse-emulator-common и нажмите Enter. Введите «y» для подстверждения скачивания и установки.


После того, как Fuse будет установлен, и вы вернетесь к командной строке, напишите sudo apt-get install spectrum-roms fuse-emulator-utils и нажмите Enter. И затем, снова вернувшись к командной строке, напечатайте sudo amixer cset numid=3 2 и щелкнитеEnter.





Если Spectrum пробудил ваш аппетит к олдскулу, то оцените проект RetroPie. С помощью него вы можете эмулировать сокровища таких старых консолей, как SNES, Mega Drive и других подобных. Установка выполняется не слишком быстро, но результат того стоит. Следуйте этим инструкциям , и у вас все получится. можно бесплатно скачать классические игры.






8. Windows 3.0 на Pi




Раз уж мы начали говорить о ретро, то можно попробовать запустить DOS 6.22 и Windows 3.0 с помощью QEMU. Для начала посетите Kirsle и извлеките образ VirtualBox (VDI), затем, воспользовавшись VirtualBox, конвертируйте VDI в IMG, напечатав vboxmanage clonehd "image.vdi" "image.img" --format RAW (вместо image введите название вашего образа).


Далее инсталлируйте QEMU, прописав sudo apt-get install qemu . Затем конвертируйте исходный образ в образ QEMU qcow, напечатав qemu- img convert -f raw image.img -O qcow2 image.qcow . Наконец запустите образ, введя qemu image.qcow . Все это, конечно, далеко от совершенства и имеет тенденцию к подвисанию, но все же забавная штука!


9. Робототехника



Роботы — это прикольно, за исключением, наверно, тех, которые пытаются убить всех человеков. Существует множество проектов, связанных с робототехникой. В электронном журнале MagPi (со стр. 9) приводится описание, как сделать роборуку, приводимую в движение с помощью Raspberry Pi.


10. Еще про роботов



Поскольку мы затронули тему про роботов, то есть еще один замечательный проект , предполагающий совместное использование платформы Big Track и Raspberry Pi.


11. Обучение программированию


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





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





Хотя вы с помощью эмулятора можете играть в игры, предназначенные для Spectrum, программирование на языке BASIC через эмулятор не представляет собой то же самое. В таком случае воспользуйтесь SpecBAS , являющегося ремейком Sinclair BASIC.





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


15. Firefox OS на Pi





16. RISC OS для Pi




Если вы тоскуете по прошлому, тогда попробуйте запустить RISC OS на своемRaspberry Pi. Файлы и полная инструкция находятся .


17. Клавиатура из алюминиевых банок




Клавиатура из пивных банок? Есть и такая! Команда Robofun подключила плату Arduinoвместе 40 алюминиевыми банками к Raspberry Pi. Посмотреть на это можно .


18. Сервер BitTorrent




Если вы частый гость различных торрент-сайтов, так почему бы не создать специальную торрент-машину? Просто подключите ее к своему роутеру и оставьте ее делать свое дело. Документацию, скрипты и файлы можно найти на snapdragon:IT blog .


19. Облачный сервер




Хотите организовать свой облачный сервер? Благодаря OwnCloud вы сможете это сделать. Следуйте инструкциям и настройте скрипт с petRockBlog . И в кратчайшие сроки вы станете облачным провайдером.


20. Беспилотник на Raspberry Pi




Это блестящая концепция — БПЛА на Raspberry Pi. Только подумайте о возможностях! Данное творение Maggie представляет собой, возможно, первый квадрокоптер на основеRaspberry Pi.


21. Погодная станция




Позволит создать прекрасный школьный проект — погодную станцию на Raspberry Pi. Используя погодную станцию с USB компании Maplin этот миникомпьютер может регистрировать всю необходимую информацию.


22. 10-дюймовый сенсорный экран




Используя 10-дюймовый сенсорный экран и преобразователь HDMI-LVDS, вы можете сделать тачскрин с Raspberry Pi. Полный набор может быть куплен на Chalkboard Electronics и затем собран, как в ролике ниже.



23. Домашняя автоматика








Любители игры Minecraft, ликуйте! Она доступна и на Raspberry Pi .





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


Перевод сайт





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