Загрузка #
ПРЕДУПРЕЖДЕНИЕ
Библиотека собирается и предназначена только для одноплатных компьютеров Repka Pi.
Библиотека WiringPI доступна для загрузки из репозитория GitFlic. Для загрузки библиотеки выполните следующие команды в консоли RepkaOS:
# для установки СУВ Git
sudo apt-get install git
# для загрузки библиотеки из репозитория на локальный диск
# перед загрузкой перейдите в каталог, который вы планируете использовать для хранения проектов
git clone https://gitflic.ru/project/repka_pi/wiring-repka.git
После загрузки, в текущем каталоге появится папка wiring-repka содержащая следующие каталоги:
-
driver- содержит исходные коды драйвера repka_gpio. -
example- содержит исходные коды примеров использования библиотеки. -
example/pi4 - содержит исходные коды примеров использования библиотеки для Repka Pi 4.
-
example/pi5 - содержит исходные коды примеров использования библиотеки для Repka Pi 5.
-
wiringRP- содержит исходные коды библиотеки wiringRP. -
.build/pi5- содержит скрипт для сборки драйвера repka_gpio.
Сборка проекта #
Для сборки библиотеки WiringRP необходимо сделать следующее:
cd wiring-repka
mkdir build
cd build
cmake ..
cmake --build .
После сборки, появятся следующие директории:
bin/ - директория содержит собранные примеры использования WiringRP
lib/ - статическая библиотека libwiringrp.a
Загрузка модуля ядра repka_gpio.ko #
Для версии платы Repka Pi 5, данный модуль используется wiringRP для получения безопасного доступа к контактам GPIO-разъема. Он собирается отдельно в директории driver с помощью cmake. Для его включения необходимо выполнить следующие команды в терминале (находиться при этом необходимо локально с собранным драйвером):
insmod repka_gpio.ko
chmod 666 /dev/repka_gpio*
chmod 666 /dev/gpiochip*
chmod 666 /dev/ttyS0
chmod 666 /dev/ttyS2
chmod 666 /dev/ttyS3
chmod 666 /dev/i2c-1
chmod 666 /dev/i2c-2
chmod 666 /dev/spidev0.0
chmod 666 /dev/spidev1.0
После чего убедимся, что модуль ядра загрузился:
lsmod | grep repka_gpio
В случае удачной загрузки после выполнения данной команды мы увидим примерно следующее:
root@Repka-Pi:~/workspace/wiring-repka# lsmod | grep repka_gpio
repka_gpio 12288 0
Также в директории /dev будут созданы символьные устройства repka_gpio0 и repka_gpio1. А в Repka Pi5 еще и repka_gpio2.
После завершения работы ОС драйвер repka_gpio.ko выгрузится автоматически. При запуске ОС автоматическая загрузка драйвера не осуществляется! Для работы с библиотекой WiringRP, после каждого старта необходимо выполнять загрузку драйвера вручную или настроить его автозапуск.
Также есть возможность собрать dep-пакет для драйвера repka_gpio. Для этого надо перейти в директорию .build/pi5 и запустить скрипт prepare-deb.sh с параметром пути до места, где вы хотите получить dep-пакет. В случае если вы опустите данный параметр, то dep-пакет будет находиться в директории build. При установке данного dep-пакета, в автозагрузку он установиться самостоятельно.
Разработка программ #
Попробуем создать собственную программу, которая будет управлять напряжением GPIO-пина 360 на Repka Pi 4 (аналогичную программу можно сделать на Repka Pi 3 и Repka Pi5, но номера GPIO могут отличаться).
-
Создаем директорию в любом удобном для вас месте:
mkdir awesome-project cd awesome-project -
После того, как мы перешли в созданную директорию нам необходимо скопировать сюда заголовочный файл и уже собранную библиотеку (пути могут отличаться - будьте внимательны):
cp ~/workspace/wiring-repka/build/lib/libwiringrp.a . cp ~/workspace/wiring-repka/wiringRP/wiringRP.h .-
Теперь создадим нашу программу. Пускай она будет называться awesome-program.c и будет содержать следующее:
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include "wiringRP.h" // Глобальные переменные и константы const int LED_1 = 360; // для Repka Pi5 присвойте значение 63 void setup() { // Инициализация библиотек wiringRP if(setupWiringRP(WRP_MODE_SUNXI) < 0) exit(EXIT_FAILURE); // Инициализация пользовательских объектов if(pinMode(LED_1, OUTPUT) < 0) { releaseWiringRP(); exit(EXIT_FAILURE); } } void loop() { // Основной цикл программы digitalWrite(LED_1, HIGH); //вывод на GPIO логической "1" delay(1000); digitalWrite(LED_1, LOW); //вывод на GPIO логического "0" delay(500); } ONDESTROY(){ // Освобождение занятых ресурсов, выключение напряжения на пинах digitalWrite(LED_1, LOW); pinMode(LED_1, DISABLE); // Завершение работы библиотек releaseWiringRP(); exit(0); // выход из программы } MAIN_WIRINGRP();
-
-
После чего попробуем собрать нашу программу и после этого запустим ее:
gcc awesome-program.c -L./ -lwiringrp -o awesome-program ./awesome-program
Наша программа работает!
Также можно воспользоваться шаблоном для упрощения написания утилиты в случае создания стандартной программы examples/template.c или examples/template_adv.c, если программа несколько не стандартна и не укладывается в парадигму используемой в template.c.