Начало работы с WiringRP


Загрузка #

ПРЕДУПРЕЖДЕНИЕ

Библиотека собирается и предназначена только для одноплатных компьютеров Repka Pi.

Библиотека WiringPI доступна для загрузки из репозитория GitFlic. Для загрузки библиотеки выполните следующие команды в консоли RepkaOS:

# для установки СУВ Git
sudo apt-get install git

# для загрузки библиотеки из репозитория на локальный диск
# перед загрузкой перейдите в каталог, который вы планируете использовать для хранения проектов
git clone https://gitflic.ru/project/repka_pi/wiring-repka.git

После загрузки, в текущем каталоге появится папка wiring-repka содержащая следующие каталоги:

  1. driver - содержит исходные коды драйвера repka_gpio.

  2. example - содержит исходные коды примеров использования библиотеки.

  3. example/example_pi5 - содержит исходные коды примеров использования библиотеки для Repka Pi 5.

  4. wiringRP - содержит исходные коды библиотеки wiringRP.

Сборка проекта #

Для сборки библиотеки WiringRP необходимо сделать следующее:

cd wiring-repka
mkdir build
cd build
cmake ..
cmake --build .

После сборки, появятся следующие директории:

bin/ - директория содержит собранные примеры использования WiringRP

driver - содержит модуль ядра repka_gpio.ko (подробнее о нем в разделе ниже)

lib/ - статическая библиотека libwiringrp.a

Загрузка модуля ядра repka_gpio.ko #

Данный модуль используется wiringRP для получения безопасного доступа к контактам GPIO-разъема. После сборки проекта модуль ядра будет доступен в директории build/driver. Для его включения необходимо выполнить следующие команды в терминале (находиться при этом необходимо в корне репозитория wiring-repka/):

insmod build/driver/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, после каждого старта необходимо выполнять загрузку драйвера ручную или настроить его автозапуск.

Разработка программ #

Попробуем создать собственную программу, которая будет управлять напряжением GPIO-пина 360 на Repka Pi 4 (аналогичную программу можно сделать на Repka Pi 3 и Repka Pi5, но номера GPIO могут отличаться).

  1. Создаем директорию в любом удобном для вас месте:

    mkdir awesome-project
    cd awesome-project
    
  2. После того, как мы перешли в созданную директорию нам необходимо скопировать сюда заголовочный файл и уже собранную библиотеку (пути могут отличаться - будьте внимательны):

    cp ~/workspace/wiring-repka/build/lib/libwiringrp.a .
    cp ~/workspace/wiring-repka/wiringRP/wiringRP.h .
    
    1. Теперь создадим нашу программу. Пускай она будет называться 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();
      
  3. После чего попробуем собрать нашу программу и после этого запустим ее:

    gcc awesome-program.c -L./ -lwiringrp -o awesome-program
    ./awesome-program
    
  4. Наша программа работает!


5140 просмотров0 комментариев
0

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация