Основы программирования на Raspberry Pi (Raspberry Pi programming basics)

Автор: | 22.02.2020

Введение
Комплектация Raspberry Pi
Инсталляция ОС Raspbian
«Hello world!» на Python
«Hello world!» на Си
Пример проекта: мигание светодиодов
Полезные ссылки

Введение

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

Под Raspberry Pi адаптированы почти все популярные языки программирования. Основные языки — Python и C/C++. Первый отличается простотой, второй — быстродействием.

На сайте приводятся ряд статей , в которых рассматривается программирование на языке Python(см. например, Быстрый старт с Python в Visual Studio)  и на языке C/C++ (см.  Язык Си в примерах и ООП на С++ примерах) в редакторе Visual Studio и операционной системе Windows, установленных на ноутбуке.

В этой статье прокладывается мостик к программированию на совершенно другой платформе —  в  операционной системе Raspbian, установленной на микрокомпьютере Raspberry Pi.

Комплектация Raspberry Pi

Приобретаю через интернет Raspberry Pi B4Gb и блок питания  к нему.

 

Корпус покупать не обязательно. Без него микропроцессор лучше охлаждается. Все остальное можно докупить в любом компьютерном магазине. Для установки ОС Raspbian  и дальнейшей работы  еще понадобятся:

    1. SD карта объемом >= 16 Gb, класса >= 10 (у меня 32 Gb).
    2. USB micro Reader (устройство для чтения SD-карт).
    3. Монитор (телевизор с HDMI разъемом).
    4. USB мышь и клавиатура. При необходимости можно еще приобрести USB hub (разветвитель).
    5. Микро HDMI шнур (с одной стороны обычный HDMI разъем, с другой — микро разъем).

Инсталляция ОС Raspbian

Создаю образ ОС Raspbian на SD карте  в Windows на ноутбуке. Для этого сначала скачиваю c  официального сайта Raspbian  файл 2020-02-13-raspbian-buster-full.zip (2.5G). Разархивирую его, получаю файл 2020-02-13-raspbian-buster-full.img  (6.8G).

Вставляю SD карту в USB micro Reader. Затем USB micro Reader вставляю в USB разъем ноутбука (в положении, как показано на рисунке справа). В проводнике Windows появляется диск F.

Скачиваю и запускаю программу Win32 Disk Imager и перенаправляю (кнопка Write) файл 2020-02-13-raspbian-buster-full.img  на диск F.

На диске F создается образ ОС Rasbian, представляющий собой множество входящих в него файлов.

Отмечу, что SD карта с образом Rasbian отображается в Windows некорректно — у меня с объемом всего 252 Мб и несуществующим реально диском G. Не обращайте на это внимания.

Перед созданием образа диск F с SD картой необходимо отформатировать (подробнее см. Как записать образ img на флешку). После форматирования или неправильного извлечения USB micro Reader возможно реальное уменьшение объема объема памяти SD карты (см. Восстановление объема флешки).

Извлекаю SD карту с образом Rasbian из USB micro Reader и вставляю ее в разъем Raspberry Pi.

Подсоединяю другие компоненты через соответствующие разъемы:

  • клавиатуру и мышку через USB разъемы;
  • шнур блока питания вставляю в Power port;
  • телевизор и Raspberry Pi соединяются микро HDMI шнуром через HDMI разъемы.

Необходимо заранее в настройках телевизора установить HDMI вместо обычного AV. Это выполняется через меню, которое открывается, например, в LG кнопкой на пульте INPUT. Подробнее см. Как подключить телевизор к компьютеру или ноутбуку.

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

Первая инсталляция была остановлена с ошибкой (Error 179.2). Создал заново образ ОС Rasbian. Перед этим очистил память SD карты (см. Восстановление объема флешки). Повторная инсталляция прошла успешно.

Даю ответы на вопросы системы (в основном — Next), подключаюсь к  интернету через Wi-Fi. Появляется рабочий стол ОС с пиктограммами стандартных программ. Использую браузер для запуска своего сайта:

Удивительно! Устройство, которое по объему меньше мышки, заменяет системный блок.

«Hello world!» на  Python

В верхнем левом углу рабочего стола выбираю пиктограмму с изображением малины, затем: Programming>Thorny Python IDE. Открывается редактор для написания программ.

Далее все как обычно:

  • Создаю файл (New)
  • Набираю текст программы:
print('Hello world!')
  • Сохраняю программу (Save>Create Folder(имя папки)>Name (имя файла)>Ok,
  • Запускаю программу (Run)
  • В окне консоли выводится сообщение: Hello world!


«Hello world!» на Си

В верхнем левом углу рабочего стола выбираю пиктограмму с изображением малины, затем: Programming>Geany Programmer’s Editor. Открывается редактор для написания программ на C/С++.

#include <stdio.h>
int main()
{
 printf("Hello, World! \n");
 return 0;
}

Если на языке Python код сразу запускается (интерпретируется), то на языке Си  код cначала компилируется Build>Build (F9), и лишь потом запускается     Build>Execute(F5).

В чем разница между компиляцией и интерпретацией? Разница в том, что компилятор преобразует код алгоритмического языка в исполняемый (байт-код либо нативный) код (в пределе — в машинные коды), в то время как интерпретатор самостоятельно распознаёт и выполняет построчно инструкции программного кода.

В чем разница между building и compiling? Compiling — это часть building. В свою очередь building может еще включать testing, packaging и другие действия.

Пример проекта: мигание светодиодов

Для работы понадобятся плата Raspberry Pi, светодиод, резистор на 200 Ом и соединительные провода (подробное описание проекта см. здесь и здесь).

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

Код на Python  (подробное описание кода см. здесь )

from RPi import GPIO
from time import sleep
GPIO.setmode(GPIO.BCM) &nbsp;
GPIO.setup(24, GPIO.OUT)
GPIO.output(24, True)
sleep(10)
GPIO.output(24, False)
GPIO.cleanup()

Код 1 на C/C++   (подробное описание кода см. здесь)

#include <wiringPi.h>
int main (void)
{
  wiringPiSetup () ;
  pinMode (0, OUTPUT) ;
  for (;;)
   {
    digitalWrite (0, HIGH) ; delay (500) ;
   digitalWrite (0, LOW) ; delay (500) ;
   }
return 0 ;
}

Код 2 на C/C++   (подробное описание кода см. здесь )

//GPIO-test.c
// Программа включает на 1 секунду светодиод,
// подключённый к порту Р1_03
// Компиляция командой gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835
#include 
#define PIN RPI_GPIO_P1_03 // Для RPi ревизии v1
//#define PIN RPI_V2_GPIO_P1_03 // Для RPi ревизии v2

int main()
{
 if (!bcm2835_init()) // Инициализация GPIO
 return 1; //Завершение программы, если инициализация не удалась

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //Устанавливаем порт Р1_03 на вывод
 bcm2835_gpio_write(PIN, LOW); // Устанавливаем порт в 0, светодиод горит
 bcm2835_delay(1000); // Ждём 1000 миллисекунд
 bcm2835_gpio_write(PIN, HIGH); // Устанавливаем порт в 1, светодиод не горит
 return 0; // Выход из программы 
}

Еще примеры кода на C/C++  см. здесь.

Полезные ссылки:

 

Автор: Николай Свирневский