GPIO

GPIO для чайников (часть 1)

Что делать, когда нечего делать? Попробовать что-нибудь новое!

Если вы приобрели Raspberry Pi просто ради любопытства, не отдавая себе отчёта в том, для чего он конкретно вам нужен, то наверняка с каждым днём вам становится всё труднее найти для него применение.  Вы уже с ним вдоволь наигрались. Попробовали установку разных операционных систем, послушали музыку, посмотрели видео, попробовали поиграть и порисовать…  И наверняка с огорчением для себя сделали вывод - «Всё ж таки Raspberry Pi мало годится для использования в качестве настольного компьютера».  Слишком он уж медленный и задумчивый, по сравнению с обычным компьютером. И вроде бы ничего серьезного с ним сделать нельзя. Остаётся лишь найти ему применение в качестве либо медиацентра, либо простенького интернет-сервера, который не страшно оставлять включённым круглые сутки…         

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

Чтобы общаться с любыми внешними устройствами и управлять ими, Raspberry Pi имеет на борту интерфейс, называемый GPIO. Это аббревиатура от General Purpose Input Output. А по-русски, это низкоуровневый интерфейс ввода-вывода прямого управления. На плате Raspberry он находится в углу, в виде гребёнки из 26 штырьков, рядом с видеовыходом. Т.е. через этот интерфейс Raspberry может слушать и отдавать команды любому внешнему устройству, например беспилотнику. Но сегодня мы беспилотник строить не будем, начнём с обычной лампочки, а точнее светодиода, который и исполнит роль подопытной лампочки. Наша задача - заставить светодиод, подключённый к Raspberry включаться и выключаться по его команде. Кроме того, дабы убедиться, что эти включения происходят вполне осознано и так, как мы этого хотим, а не благодаря каким-то глюкам в недрах процессора, мы привнесём в нашу программу элемент общения с нами. Т.е. отстроим чёткую иерархию- Raspberry управляет светодиодом, а самим Raspberry управляем мы. Теперь надо подготовиться и раздобыть где-то несколько вещей.  

Во-первых, нужно найти светодиод:

Его можно достать из старой сломанной игрушки, из зажигалки с фонариком, попросить у знакомого радиоэлектронщика, в конце концов, просто купить.      

Во-вторых,  понадобятся проводочки любые и парочка коннекторов BLS:

Такие коннекторы можно вытащить из старого системного блока вместе с проводами, или попросить у знакомого компьютерщика, или тоже купить. Они прекрасно подходят для подключения к разъёму на Raspberry.          

Начнём с планирования используемых портов. Порт- это грубо говоря штырёк на разъёме. Так, как штырьков там много (26), то и портов тоже много. А чтобы в них не запутаться, то каждому порту присвоен свой номер и обозначение. Следует заметить, что не все штырьки в этом разъёме являются портами. Некоторые штырьки подключены к источникам напряжения, а некоторые вообще никуда не подключены (По секрету, на самом деле они всё-же подключены, но ими пользоваться нельзя, можно убить свою Малинку. Поэтому лучше вобще их не трогайте).         

Вот собственно как эти порты расположены на плате:

          Чтобы светодиод зажёгся, нам нужно его подключить к источнику питания. Выбираем для питания светодиода Р1-01, верхний по рисунку штырёк, на котором присутствуетнапряжение 3,3в. Для управления светодиодом нам понадобится один порт GPIO. Можно выбрать любой. Но если у вас есть разъём BLS, то удобнее в данном случае использовать порт, который выведен на штырёк  P1-03 и называется GPIO 0. В таком случае мы, воспользовавшись одним разъёмом, сможем подключить наш светодиод. И так, мы будем подключать светодиод между ножками разъёма P1-01 и Р1-03.  С вывода Р1-01 мы берём +3,3в для питания светодиода, а вывод Р1-03 будет тем самым управляющим выводом порта GPIO. Все эти порты физически находятся внутри центрального процессора Raspberry Pi, который называется BCM2835. Этот процессор может подключать любой порт к источнику напряжения 3,3в, а может подключить порт к 0 питания (а может вообще никуда не подключать, но об этом позже). Эти переключения он делает в соответствии с поданной командой. Значит, когда порт будет подключён к  напряжению +3,3в, наш светодиод гореть не будет, т.к. току некуда идти. А когда процессор подключит порт к 0, то наш светодиод загорится, т.к. ток побежит от +3,3в к 0 через светодиод. Значит наша программа должна будет отдавать соответствующие команды процессору в соответствии с нашим желанием.              

Маленькое, но важное. На самом деле, мы не должны подключать светодиод напрямую между источником питания +3,3в и выводом порта. Это нельзя делать по двум причинам. Причина первая: любой светодиод нормально работает при определённом токе. Если через светодиод потечёт большой ток (а выход +3,3в способен отдать до 50мА), то светодиод сгорит. Если маленький ток, то светодиод будет гореть слишком слабо, либо вообще не будет светиться. Для большинства обычных светодиодов рабочий ток находится в пределах 10-20мА. Отсюда вытекает и вторая причина (хотя в данном случае она несущественна). Если мы пропустим большой ток через порт GPIO, то этим самым мы уничтожим процессор и Raspberry- умрёт.  Поэтому, мы должны следить, чтобы через порт не протекал ток больше допустимого.  Примем для себя ограничение в 16мА, так мы точно не сожжем процессор. Как этого добиться? Очень просто! Нам нужно последовательно со светодиодомвключить токоограничивающий резистор. И сейчас мы его рассчитаем.             

Примем для светодиода рабочий ток в 10мА. Убеждаемся в том, что выбранный нами ток не превышает предельно допустимый ток для порта в 16мА. Теперь зная напряжение питания 3,3в и рабочий ток 10мА, мы можем по закону Ома рассчитать необходимое нам сопротивление. R=U/I=3,3/0,01=330Ом. Значит нам нужно найти резистор с сопротивлением 330Ом. А точнее- сопротивлением не менее 330Ом. Больше- можно. Светодиод будет заметно светиться и при сопротивлении 1000 Ом, или 1кОм.  В общем наша задача- найти резистор с сопротивлением от 330 Ом до 1кОм. Если вы его нашли, то можно собрать вот такую схему:

Схему лучше собрать на макетной плате. Лично мне, для экспериментов, мой сын дал на прокат свой конструктор «Знаток».

Так выглядит схема в сборе:

Так мы подключаемся к Raspberry:

А вот общий план всей конструкции:

В крайнем случае, можно просто скрутить выводы элементов. Но в этом случае нужно следить за тем, чтобы оголённые ножки элементов случайно не попали на контактные площадки Raspberry. Это может убить его. Так же стоит обратить внимание на то, что светодиод должен подключаться Анодом к + источника питания, т.е. в нашем случае это Р1-01. Как найти на светодиоде Анод? Очень просто! Достаньте из любого ДУ батарейку на 1,5В и подключите к ней ваш светодиод. Если он не зажёгся, поменяйте выводы местами. Если зажёгся- то на + батарейки и будет Анод светодиода.

 Если вы собрали схему, то отложите пока её в сторонку. Теперь мы займёмся второй частью задачи - написанием программы управления светодиодом.   Писать эту программу мы будем на языке Си.

Почему на именно на Си? Просто по тому, что я других языков не знаю, а раз вы читаете эту статью, то скорее всего вы тоже немного знаете о программировании и радиоэлектронике, а значит, вам всё равно с какого языка начинать.         

Обычно изучение языков программирования начинают с написания программы «Hello World!», но мы же круче «тех» чайников, поэтому мы начнём сразу с низкоуровневой работы с периферией. Тем более, что это не намного сложнее ХеллоуВорлда. ;) Что для этого нужно? Нужен любой текстовый редактор, в котором мы будем набирать программу. В Raspbian есть отлично подходящий для этого редактор “nano”. Ещё нужен компилятор, это программа, которая осуществляет перевод написанной нами программы с человечески понятного языка на язык, понятный компьютеру. Т.е. делает из нашей программы исполняемый файл, который мы впоследствии и запустим на Raspberry. Эта штука тоже у нас есть, называется gcc. Этот компилятор поставляется в комплекте со всеми Линуксами и уже готов к работе.       

Как видите,всё необходимое у нас уже есть. Хотя нет. Одной вещи все-таки у нас не хватает. Её мы возьмем из интернета. Речь идёт о библиотеке функций управления портами GPIO на Raspberry,  специально написанно добрым человеком для того, чтобы наша программа по своей простоте могла бы соперничать с «Хеллоуворлдом» и нам самим бы не пришлось ломать голову, изучая техническую документацию на процессор и протоколы работы с его внутренностями. Сама библиотека состоит из заголовочного файла, в котором обозначены все имена функций со структурами переменных и файла библиотеки самих функций. Эту библиотеку нужно скачать и установить, чтобы компилятор мог с ней работать. Библиотека называется bcm2835-1.17. Последние цифры в названии библиотеки, обозначают её версию. А так, как библиотека постоянно обновляется автором, то версии будут меняться. на сегодняшний день доступна версия 1.17. Узнать о номере последней версии можно по адресу: http://www.open.com.au/mikem/bcm2835/index.html По этой же ссылке вы можете ознакомиться со всеми функциями, которые присутствуют в этой библиотеке. 

Мы же пока установим версию 1.17. Запускаем окно терминала и вводим туда команду: wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.17.tar.gz 

Библиотека быстренько скачивается. Чтобы её установить, нужно сначала её разархивировать. Это делается следующей командой: 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 
  
#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 не только отдавать команды другим устройством, но и слушать их.А пока можете начинать изучать язык Си. А так же попробуйте изменить эту программу так, чтобы светдиод управлялся бы другим портом и испытайте её.

Тэги:

 

Автор:

Комментариев: 51

  • Mike3
    15.09.2012 в 12:50 ответ

    Отлично расписано. Для ленивых тоже есть способ зажечь светодиод ) echo 1 > /sys/class/gpio/gpioN/direction echo 1 > /sys/class/gpio/gpioN/value

    • Chaosito3
      17.09.2013 в 17:50 ответ

      Дабы народ не парился, распишу что нужно сначала создать файл с номером гпио-порта для получения доступа к нему. Допустим цепляем светодиод на 4пин гпио, и землю. Создаем файл: echo 4 > /sys/class/gpio/export Устанавливаем его как выход: echo out > /sys/class/gpio/gpio4/direction Включаем: echo 1 > /sys/class/gpio/gpio4/value Отключаем: echo 0 > /sys/class/gpio/gpio4/value Грохаем файл: echo 4 > /sys/class/gpio/unexport

  • Mike3
    15.09.2012 в 12:54 ответ

    В следующих частях про GPIO что планируется? uart,i2c,spi?

    • RomanNV5
      15.09.2012 в 13:18 ответ

      Mike, ну вобще-то я это совсем для чайников писал. Раз уж вас интересуют uart,i2c,spi, то вы к этой категории вряд-ли относитесь. Но, как минимум, про UART я точно что-нить напишу, т.к. это для меня актуально (есть в наличии железки, которые просятся на это дело). Но это вряд-ли получится быстро. С начала я сам должен с юартом наиграться, чтобы достаточно уверенно с ним работать. Так что если вы сами уже обладаете какими то наработками- не стесняйтесь делиться ими со всеми ;) А в следующей части продолжим со светодиодом разбираться, т.к. он под управлением Raspberry способен на гораздо большее, чем просто гореть. :)

      • Mike3
        15.09.2012 в 13:53 ответ

        Ну я в своё время неплохо разобрался со всем этим на примере mini6410 http://www.friendlyarm.net/products/mini6410 Raspberry Pi пока до меня не дошла. Как придёт обязательно напишу, что-нибудь интересное

  • RomanNV5
    15.09.2012 в 12:58 ответ

    Вот блин, оказывается есть ограничения по длине поста. Окончание пропало :(

  • ludoed5
    22.09.2012 в 11:07 ответ

    А вот я в "железной микроэлектронике" - чайник. И меня это очень заинтересовало. Спасибо!

  • Egor3
    24.10.2012 в 14:47 ответ

    почему-то не хочет компилировать gcc -o GPIO-test GPIO-test.c -l bcm2835 /usr/local/lib/libbcm2835.a(bcm2835.o): In function `bcm2835_delayMicroseconds': /home/pi/bcm2835-1.11/src/bcm2835.c:342: undefined reference to `clock_gettime' /home/pi/bcm2835-1.11/src/bcm2835.c:352: undefined reference to `clock_gettime' collect2: ld returned 1 exit status

    • SNEZH5
      27.05.2013 в 22:52 ответ

      Таже проблема при компиляции: gcc -o GPIO-test gpio-test.c -lrt -lbcm2835 /tmp/ccE0RVRK.o: In function `main': gpio-test.c:(.text+0x3c): undefined reference to `bcm2835_gpio_delay' collect2: ld returned 1 exit status Что делать? Egor решил?

      • SNEZH5
        29.05.2013 в 01:24 ответ

        я извиняюсь за глупый вопрос (лично я ошибся в коде). все исправил.все работает

    • vladik_tip
      31.03.2017 в 17:10 ответ

      откройте его с помощью не консоли а с помощью Text Editor. И увидите что он пустой. Нано сохранять не хочет, используйте встроенный в Raspbian Text Editor.

  • dev0
    31.10.2012 в 12:27 ответ

    pi@raspberrypi ~/bcm2835-1.8/myprog $ sudo gcc –o GPIO-test GPIO-test.c –l bcm2835 gcc: error: –o: No such file or directory gcc: error: GPIO-test: No such file or directory gcc: error: –l: No such file or directory gcc: error: bcm2835: No such file or directory Помогите не хочет компилится

    • dev0
      10.11.2012 в 18:39 ответ

      Спасибо решено! 1) длинные тире это зло программа отказывалась собираться с длинными тире 2) при копировани добовляет лишнии строки и прочии не нужные пробелы их я поудалял

    • vladik_tip
      02.04.2017 в 08:59 ответ

      перейди в папку с помощью cd [название_папки]

  • zhora55
    17.11.2012 в 21:27 ответ

    Спасибо большое, за проделанную работу! Я про написание туториала.

  • polubencev11
    03.12.2012 в 09:13 ответ

    Вот проделал тоже самое, и не работает. точнее установил библиотеку, код компиллится без ошибок, но когда запускаешь, на порт ничего... смотрел даже примеры из bcm2835 , не работает и все. сама программа точнее работает, а порты нет. Кто знает, в чем еще может быть дело?

    • RomanNV5
      28.12.2012 в 14:45 ответ

      А у вас какая версия RPI? Если V2, то читайте решение внизу у автора ASA.

    • Wargos
      16.10.2017 в 17:50 ответ

      Такая же проблема

  • ma-Gavet11
    12.12.2012 в 22:52 ответ

    Я в этом GPIO чайник :) ... купил малину для CarPC ну и начал интересеваться им. Для начала собрал пример это и ни 01 ни 03 не горят. :) хотя я его вольтметром счупаю взамест светодиода. Мобыть сгорело ? ан нет. установил софтинку http://code.google.com/p/webiopi/ и оказывается эти 01 и 03 совсем не для того предназначены :=\. Мобыть из за того что у меня версия малины не та, что у автора, а вот на 07 начал напрюжометр скакать яки положено. спасибо автор - не зря писал :)

    • ASA8
      19.12.2012 в 22:27 ответ

      Было бы хорошо если бы автор поста пролил свет на эту тему. тоже новая малинка и тоже самое с этими пинами, может их надо как то переназначить? хотя признаюсь подозрение на то что мог их коротнуть на 5V имееются %) и на душе как то не спокойно :)

      • ASA8
        20.12.2012 в 21:31 ответ

        похоже болезнь должна вылечиться обновлением библиотеки для работы с GPIO(по крайней мере в ченжлоге есть упоминания о изменениях для второй редакции платы) http://www.open.com.au/mikem/bcm2835/bcm2835-1.14.tar.gz не плохо было бы если статью подправили

        • ASA8
          24.12.2012 в 23:37 ответ

          В общем, что бы исспользовать пин P1-03 в платах ревизии 2 надо дописывать V2 в объявлении пина #define PIN RPI_GPIO_P1_03 должно быть так #define PIN RPI_V2_GPIO_P1_03

        • vladik_tip
          02.04.2017 в 09:04 ответ

          там и 1.52 есть а для V3 нету

  • Sl0n1k9115
    09.04.2013 в 21:10 ответ

    Правильно ли я понимаю, что для того чтобы включить светодиод аналогично тому как он включен в статье, но для ревизии 2.0, необходимо использовать не третий пин, а второй? #define PIN RPI_V2_GPIO_P1_02 Ну если верить вот этой распиновке: http://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/09/Raspberry-Pi-GPIO-Layout-Revision-2.png

    • Sl0n1k9115
      09.04.2013 в 21:13 ответ

      Все, понял свою ошибку.

  • duchara5
    21.04.2013 в 07:04 ответ

    При запуске ./GPIO-test выдается следующая ошибка bcm2835_init: Unable to open /dev/mem: Permission denied в каталоге dev ни папки ни файла mem нету, куда копать? Спасибо!

    • makaa8
      23.04.2013 в 14:29 ответ

      попробуйте перед ./GPIO-test добавить sudo, должно помочь

  • dimonoid9
    08.05.2013 в 22:30 ответ

    Это ненормально писать,как определить полярность диода!!! У всех диодов большая ножка + ,меньшая - .

    • Vitorrio10
      16.05.2013 в 03:05 ответ

      У всех диодов длинная ножка это анод(минус) диода, меньшая катод(плюс), НО, Именно АНОД нужно соединять с катодом источника, в нашем случае PIN_01 чтобы ток пошел, Для лучшего понимания, присмотритеть в картинку с диодом и батарейкой выше, все поймете :)

      • dimonoid9
        23.05.2013 в 21:14 ответ

        Я читал в википедии ,что в америке и европе понимания под словами КАТОД И АНОД разные , и противоречат друг другу, поэтому вы тут правы на половину)

        • dimonoid9
          23.05.2013 в 21:17 ответ

          https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BE%D0%B4 - тут анод минус.

  • dimonoid9
    23.05.2013 в 21:09 ответ

    Кстати ,рекомендую эти уроки - как раз для чайников!) - (шучу). http://kpolyakov.narod.ru/school/c.htm

  • asia9
    04.07.2013 в 19:19 ответ

    Помогите бедной студентке!!! Работаю как с малинкой так и в общем с линуксом не так давно вернее сказать дня три. Решила начать с чего то простого. Прочла инструкции вроде все было понятно. Но на первой же строчке возникли проблемы. У меня не скачивается эта библиотека. Подскажите что делать?

  • asia9
    04.07.2013 в 19:38 ответ

    Помогите бедной студентке!!! Работаю как с малинкой так и в общем с линуксом не так давно вернее сказать дня три. Решила начать с чего то простого. Прочла инструкции вроде все было понятно. Но на первой же строчке возникли проблемы. У меня не скачивается эта библиотека. Подскажите что делать?

  • asia9
    05.07.2013 в 14:39 ответ

    Ладно с библиотекой кое как разобралась не используя интернет, но скажите почему не работает ./ configure make. Мне пишет нет прав но когда я делаю через sudo ./configure make мне пишет что command not found. Я так понимаю что мне надо использовать su чтоб установить библиотеку, но воют беда малинка универе всякая и пароля для su я не знаю

  • Gasinskiy12
    29.07.2013 в 20:17 ответ

    Спасибо за статью!!! Действительно для чайников, все подробно расписано и интересно! Все работает с новой библиотекой и на второй ревизии!

  • tema30111
    14.08.2013 в 21:24 ответ

    bcdm2835_unit: unable to open /dev/mem: permission denied (неспособен открыть, разрешение отклонено) при запуске программы выдает вот это, больше ни на что не ругается, сделал 2 проги одну под V2 и одну под V1 и обе говорят это подскажите пожалуйста что можно сделать. заранее благодарен

    • vladik_tip
      31.03.2017 в 17:11 ответ

      Если у вас Raspberry pi 3 B+, то скорее всего ничего не получится.

      • vladik_tip
        31.03.2017 в 17:13 ответ

        У меня тоже не получилось)

  • Шурик4
    18.09.2013 в 23:28 ответ

    В статье есть такие предложения: В Raspbian есть отлично подходящий для этого редактор “”. Библиотека называется . Почему-то отсутствует название указанных вещей

  • h1ma6
    12.10.2013 в 16:12 ответ

    It works! :o)

  • andersss10
    26.02.2014 в 09:46 ответ

    Добрый день, я тоже приобрел себе rasberry, Хочу поиграться с GPIO начал с подключения светодиода, но к сожалению я чайник в электронных компонентах, приобрел набор светодиодов (тип (3014YD;3014GD;3014HD) макс (ток 20мА); напряжение падения (1,6...2,4В;1,8...2,3В;2,0...2,5В))и резисторов от 100КОм до 910КОм. Собирал по схеме : http://webhamster.ru/mytetrashare/index/mtb0/1377882002o4ah1ykdcn, но светодиод в паре с резистором не горит пробовал просто от тел. зарядки тоже самое без резистора горит(от зарядки к малинке не пробовал подключать напрямую), Вопрос я не правильные светодиоды взял там описано что они должны быть на 10мА а у меня на 20 или резисторы? И может кто инфу посоветует, что почитать что бы понять, или расскажите принцип как подбирать компоненты так же интересно и про двигатели, кнопки и тд

    • fntzm
      05.01.2015 в 14:03 ответ

      Резисторы послабее надо, посчитай по закону Ома

  • vasilich
    30.03.2015 в 18:43 ответ

    чт не понятно со светодиодом, откуда 16мА взялось? Какое падение напряжения светодиода у автора? Мой СД имеет рабочий ток 20мА рабочее напряжение 2В, напряжение питания 3.3В эт понятно. Получается R=(3.3-2)/0.02А т.е. 65Ом, а 16мА тут как?

  • GreenPoo
    09.11.2015 в 17:25 ответ

    Добрый день. У меня появился Rpi 2 mod b v1.1 пытаюсь скомпилировать по инструкции пишет следующее root@raspberrypi:~# gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835 GPIO-test.c:6:21: fatal error: bcm2835.h: Нет такого файла или каталога compilation terminated. подскажите что искать, спасибо

  • dabster
    27.01.2016 в 02:42 ответ

    Спасибо за урок! я применил его к мотору . Подскажите, есть ли возможность добавить функцию времени? что-бы порт включался строго в заданное время суток? или проще в крон прописать, что-бы скрипт запускался в разное время?

  • ivan
    22.02.2017 в 19:11 ответ

    Всем привет. У меня такой вопрос. Может Raspberry, при загрузке необходимых программ, работая автономно без компьютера, интернета, wi-fi, работать как голосовое общение с Raspberry еще и подключить какиенибудь выходные устройства, да и чтобы общение было на русском языке.

  • Wargos
    16.10.2017 в 17:48 ответ

    Нужна помощь. Я скомпилил программу, подключил светодиод, но после запуска у меня ничего не мигает. У меня Raspberry Pi 2 Model B. Но получилось с помощью другого кода. Вот этот код, написал пользователь Chaosito3: Создаем файл:echo 4 > /sys/class/gpio/export Устанавливаем его как выход:echo out > /sys/class/gpio/gpio4/directionВключаем:echo 1 > /sys/class/gpio/gpio4/valueОтключаем:echo 0 > /sys/class/gpio/gpio4/valueГрохаем файл:echo 4 > /sys/class/gpio/unexport Почему так? Кто знает напишите пожалуйста!

  • ololosem
    05.10.2020 в 12:06 ответ

    Блин, откуда вы берётесь? Как у вас так получается рассчитывать токоограничивающий резистор для светодиода? Как так-то 3.3 В вы делите на 10 мА? Вам самим бы еще учится, а не учить других. У любого диода есть падение напряжения на p-n переходе. У светодиодов оно в районе 2 В, зависит от цвета и структуры, собственно. R = (3.3 - 2)/0,01 = 130 Ом. В реальности, 10 мА -- достаточно много для светодиода, поэтому ваши расчеты прокатывают. Но это может сыграть злую шутку с неопытными людьми, когда они будут рассчитывать резистор для чего-то другого, например оптрона или резистор в цепи базы транзистора.

  • Ирокез
    14.01.2021 в 17:39 ответ

    Как раз очевидно, что не знающие вообще никакого языка или знающие их плохо, будут искать не программирование расбери пай на конкретном языке, а программирование вообще или программирование на языке, про который слышали. Например, программирование на c++. В крайнем случае искать просто программирование расбери пай и тыкать на первую попавшуюся статью о питоне, так как именно он считается основным для данной платформы. Но уж никак не искать переход с сохранением привычного c++ с «обычных» машин на расбери пай.

  • Ирокез
    14.01.2021 в 17:44 ответ

    Пиши по-русски, ты в национальном домене, а не на коме.

Ваш комментарий

Авторизуйтесь для отправки комментария

© Сообщество пользователей RaspberryPi 2021