АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

mkdir myprog

Читайте также:

    Tar zxvf bcm2835-1.17.tar.gz

    Теперь перейдём в директорию, куда эта библиотека развернулась:

    Cd bcm2835-1.17

    Ну и инсталлируем её:

    Configure make

    Sudo make check

    Sudo make install

    Всё, теперь эта библиотека у нас есть в наличии, она установлена, и мы, и компилятор можем ей пользоваться в своих интересах. Начинаем писать программу. Возвращаемся в домашнюю директорию: cd..

    Тут можно создать папочку для наших экспериментов с любым именем, например myprog:

    mkdir myprog

    Перейдём в эту папку:

    cd myprog И начинаем писать нашу программу: nanoGPIO-test.c

    Эта команда запускает текстовый редактор nano, который создаёт текстовый файл GPIO-test.c. Теперь можете набрать в нём следующую программу

    (можно просто скопировать и вставить):

     

    //GPIO-test.c

    // Программа включает на 1 секунду светодиод,

    // подключённый к порту Р1_03

    // Компиляция командой gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835

     

    #include <bcm2835.h>

     

    #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; // Выход из программы

    }

     

     

    Обратите внимание на строки #define. Их в программе 2 и одна из них закомментирована. Одна строка для ревизии RPi v1, вторая для RPi v2.

    Если у вас v1, то всё оставьте как есть. Если у вас RPi v2, то первую строку с #define удалите, а со второй уберите символ комментария //.В будущем, во всех остальных программах, просто добавляйте _V2_ между RPI и GPIO в определении портов, если ваша плата RPi v2.

    Сохраняем нашу программу ctrl-o и выходим из текстового редактора ctrl-x. Теперь, если вы введёте команду ls, то увидите только что созданный файл GPIO-test.c. Чтобы этот файл превратился в работающую программу, его нужно скомпилировать. Пишем: gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835 в этой строке: gcc- это имя компилятора; -o GPIO-test GPIO-test.c эта команда компилятору говорит о том, что требуется создать исполняемый файл с именем GPIO-test из текстового файла GPIO-test.c; -l (латинская л маленькая) bcm2835 говорит компилятору о том, что все неизвестные ему функции в нашей программе, он может найти в установленной библиотеке bcm2835. Если компилятор не выдал никаких сообщений, то значит, всё у нас получилось. Если сейчас дать команду ls, то мы увидим, что в директории появился ещё один файл GPIO-test, причём он отмечен зелёным цветом. Это говорит о том, что файл является

    исполняемой программой. Осталось нам его запустить, но перед этим ещё раз проверяем нашу схему со светодиодом, чтобы всё было собрано правильно и подключено к контактам Р1_01 и Р1_03 разъёма GPIO. Если ошибок не обнаружено, запускаем программу: sudo./GPIO-test После этого светодиод должен загореться

    ровно на 1 секунду и погаснуть. Если всё так и произошло, то я вас поздравляю! Вы только что при помощи Raspberry Pi передали через порт GPIO команды светодиоду: включиться, гореть 1 секунду и выключиться.

    Теперь о том, что делает каждая строка в нашей программе.

    Все надписи после двойного слеша // являются коментариями и никак не влияют на выполнение программы.

     

    #include <bcm2835.h> -эта строка говорит компилятору, что в программе используется заголовочный файл bcm2835.h. В этом файле находятся все описания функций и идентификаторы портов GPIO.

     

    > #define PIN RPI_GPIO_P1_03 — здесь мы говорим компилятору, что везде в программе, где он увидит идентификатор PIN, ему нужно выполнить замену его на идентификатор RPI_GPIO_P1_03. Это сделано для того, чтобы мы могли при желании быстро изменить номер подключаемого порта. Для этого достаточно изменить только эту строку, а не выискивать по всей программе, где мы этот идентификатор использовали.

     

    int main() это начало нашей программы, обозначение главной функции в Си.

     

    if (!bcm2835_init()) - эта часть пытается инициализировать GPIO и если это не получилось,

    return 1; то аварийно завершает программу и передаёт на выходе код 1.</

     

    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); — Эта функция устанавливает для нашего порта Р1_03 режим на вывод. Т.е. говорит процессору, что этот порт будет использован для управления внешним устройством. <

     

    bcm2835_gpio_write(PIN, LOW); — устанавливаем порт Р1_03 в низкое состояние, т.е. процессор его подключает к 0. После этого светодиод загорается.

     

    bcm2835_delay(1000); — Эта функция просто ждёт 1000 милисекунд, или ровно 1 секунду. Всё это время у нас горит светодиод.

     

    bcm2835_gpio_write(PIN, HIGH); — устанавливаем порт Р1_03 в высокое состояние, т.е. процессор его подключает к +3,3в. При этом светодиод гаснет.

     

    b>return 0; — Выход из программы с кодом 0.

     

    Т.е. алгоритм работы с портом GPIO в режиме записи, т.е. вывода, выглядит следующим образом:

    1. Инициализируем GPIO;2. Устанавливаем режим для выбранного порта на Вывод;

    3. Теперь можем управлять этим портом, устанавливая его в высокое, или низкое состояние. Соответственно на этом порте будет пристутствовать либо +3,3В, либо 0В. Что соответствует логической 1 и логическому 0 соответственно.

     

    На этом на сегодня закончим. В следующей части научим наш светодиод загораться более полезным образом, а так же научимся портами GPIO не только отдавать команды другим устройством, но и слушать их.А пока можете начинать изучать язык Си. А так же попробуйте изменить эту программу так, чтобы светдиод управлялся бы другим портом и испытайте её.


    Поиск по сайту:



    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)