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

pi
Сообщения
-
GPIO для чайников (часть 1) -
GPIO для чайников (часть 1)При запуске ./GPIO-test выдается следующая ошибка bcm2835_init: Unable to open /dev/mem: Permission denied
в каталоге dev ни папки ни файла mem нету, куда копать?
Спасибо! -
GPIO для чайников (часть 1)Все, понял свою ошибку.
-
GPIO для чайников (часть 1)Правильно ли я понимаю, что для того чтобы включить светодиод аналогично тому как он включен в статье, но для ревизии 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
-
GPIO для чайников (часть 1)А у вас какая версия RPI?
Если V2, то читайте решение внизу у автора ASA. -
GPIO для чайников (часть 1)В общем, что бы исспользовать пин P1-03 в платах ревизии 2 надо дописывать V2 в объявлении пина
#define PIN RPI_GPIO_P1_03
должно быть так
#define PIN RPI_V2_GPIO_P1_03 -
GPIO для чайников (часть 1)похоже болезнь должна вылечиться обновлением библиотеки для работы с GPIO(по крайней мере в ченжлоге есть упоминания о изменениях для второй редакции платы)
http://www.open.com.au/mikem/bcm2835/bcm2835-1.14.tar.gz
не плохо было бы если статью подправили -
GPIO для чайников (часть 1)Было бы хорошо если бы автор поста пролил свет на эту тему. тоже новая малинка и тоже самое с этими пинами, может их надо как то переназначить? хотя признаюсь подозрение на то что мог их коротнуть на 5V имееются %) и на душе как то не спокойно
-
GPIO для чайников (часть 1)Я в этом GPIO чайник
... купил малину для CarPC ну и начал интересеваться им. Для начала собрал пример это и ни 01 ни 03 не горят.
хотя я его вольтметром счупаю взамест светодиода. Мобыть сгорело ? ан нет.
установил софтинку http://code.google.com/p/webiopi/ и оказывается эти 01 и 03 совсем не для того предназначены :=. Мобыть из за того что у меня версия малины не та, что у автора, а вот на 07 начал напрюжометр скакать яки положено.
спасибо автор - не зря писал -
GPIO для чайников (часть 1)Вот проделал тоже самое, и не работает. точнее установил библиотеку, код компиллится без ошибок, но когда запускаешь, на порт ничего... смотрел даже примеры из bcm2835 , не работает и все. сама программа точнее работает, а порты нет. Кто знает, в чем еще может быть дело?
-
GPIO для чайников (часть 1)Спасибо большое, за проделанную работу! Я про написание туториала.
-
GPIO для чайников (часть 1)Спасибо решено!
- длинные тире это зло программа отказывалась собираться с длинными тире
- при копировани добовляет лишнии строки и прочии не нужные пробелы их я поудалял
-
GPIO для чайников (часть 1)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
Помогите не хочет компилится
-
GPIO для чайников (часть 1)почему-то не хочет компилировать
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
-
GPIO для чайников (часть 1)А вот я в "железной микроэлектронике" - чайник. И меня это очень заинтересовало.
Спасибо! -
GPIO для чайников (часть 1)Ну я в своё время неплохо разобрался со всем этим на примере mini6410 http://www.friendlyarm.net/products/mini6410
Raspberry Pi пока до меня не дошла. Как придёт обязательно напишу, что-нибудь интересное -
GPIO для чайников (часть 1)Mike, ну вобще-то я это совсем для чайников писал. Раз уж вас интересуют uart,i2c,spi, то вы к этой категории вряд-ли относитесь. Но, как минимум, про UART я точно что-нить напишу, т.к. это для меня актуально (есть в наличии железки, которые просятся на это дело). Но это вряд-ли получится быстро. С начала я сам должен с юартом наиграться, чтобы достаточно уверенно с ним работать. Так что если вы сами уже обладаете какими то наработками- не стесняйтесь делиться ими со всеми
А в следующей части продолжим со светодиодом разбираться, т.к. он под управлением Raspberry способен на гораздо большее, чем просто гореть. -
GPIO для чайников (часть 1)В следующих частях про GPIO что планируется?
uart,i2c,spi? -
GPIO для чайников (часть 1)Отлично расписано.
Для ленивых тоже есть способ зажечь светодиод )echo 1 > /sys/class/gpio/gpioN/direction echo 1 > /sys/class/gpio/gpioN/value
-
Удаленное управление. Поймаем кнопку за событие.И снова вечер и снова делать нечего.
А вот например GPIO. Тут один товарищ описал что такое GPIO в серии статей GPIO для чайников. Из них мы знаем, что GPIO может работать как на вход, так и на выход. Грубо говоря, если я замкну 2 пина, один из которых будет IN, а второй OUT и поменяю значение второго, то значение первого так же изменится. Думаю, схему подобного приводить не стоит, потому что, фактически, это просто соединение прямым проводом двух пинов.
Теперь мысль дальше. Вместо прямого провода мы можем соединить 2 пина кнопкой. Нажимаем кнопку - пины замыкаются, значение IN меняется, отпускаем...ну и так далее. Я соединил кнопкой 2 пина: GPIO3 и GPIO4. Получилась вот такая вот схемка.
Другой, более удобной кнопки у меня, к сожалению нет. Ну да ладно. Осталось только понять когда кнопка нажата, а когда наоборот.
Теперь обратимся к ferro-remote, программке, которую я описывал тут. Можно, например, для нее написать скрипт, который покажет текущее состояние пина 4:
g = fr.client.gpio.export(4, "in") print(g:get( ))
Все. Данный скрипт запросит состояние пина и выведет его в консоль.
Малинка висит на 192.168.1.11:12345
сохраним файл как gpio.lua. Запускаем:
$ ./lua_client -s 192.168.1.11:12345 -e gpio.lua 0
Кнопка отжата. Нажимаем, и запускаем снова
$ ./lua_client -s 192.168.1.11:12345 -e gpio.lua 1
Ура! Работает!
Но как-то странно все это. Для того, чтоб понять, что сейчас в значении у GPIO4 я вынужден делать удаленный вызов (sick!) с довольно приличной частотой (sick! sick!), чтоб хоть как-то адекватно среагировать на событие. А если клиентов штук 50?
Но, у нас же есть система Linux на raspberry, которая ЗНАЕТ, когда изменилось состояние пина. У GPIO есть такое свойство, имя которому
EDGE.
EDGE может принимать 4 значения:- none: не реагировать на изменения
- rising: реагировать только на "подъем" пина
- falling: реагировать только на "сброс" пина
- both: реагировать на оба события
Тут стоит сделать примечание, что не все пины поддерживают данное свойство. Пишу к тому, что у меня есть аналог малинки, на котором из 30 GPIO edge поддерживают только 7.
В lua_client есть возможность подписаться на данное событие. В контексте самого клиента оно называется on_changed.
подписка происходит методом subscribe объекта gpio. Например:
gpio = fr.client.gpio -- алиас для удобства function value_changed( data ) -- функция-обработчик события print( "Value 3 -> 4 has changed to", data.value ) -- текущее состояние выведем end function main( ) local gin, erri = gpio.export( 4, "in" ) -- получим 4 для ввода local gout, erro = gpio.export( 3, "out" ) -- получим 3 для вывода if gin and gout then fr.run( ) -- специальная функция, которая говорит клиенту -- не завершать работу после функции main, а ждать событий assert(gout:set(0)) -- установим значение пина 3 на 0 assert(gin:set( "edge", "both" )) -- установим значение edge пина 4 на both assert(gin:subscribe("on_changed", value_changed, gin )) -- подпишемся, -- "запомним" gin, чтоб он не был прибит GC else print( erri, erro ) -- что-то пошло не так, просто выведем ошибки end end
Сохраним, выполним:
$ ./lua_client -s 192.168.1.11:12345 -e gpio.lua Value 3 -> 4 has changed to 0 Value 3 -> 4 has changed to 1 Value 3 -> 4 has changed to 1 Value 3 -> 4 has changed to 1 Value 3 -> 4 has changed to 0 Value 3 -> 4 has changed to 0
Ну прям песня! Теперь я не закидываю малинку запросами с вопросом о состоянии, система сама генерирует событие и присылает мне новое! Процессор на 0, трафик на 0. События.
Кстати, если посмотреть внимательно, то можно заметить, что подряд идут одинаковые значения. Я точно не помню как подобный эффект называется, но суть его в том, что пока я нажимаю на кнопку, она в реальности успевает несколько раз законтачиться и расконтачиться. Система на это все реагирует генерацией события. Чем качественнее кнопка, тем меньше таких вот косяков. У меня - очень некачественная.
Теперь, чтоб было еще интереснее, повесим на GPIO2 диод, как было описано в GPIO для чайников (часть 1) и переделаем немного скрипт, чтоб он устанавливал пину 2 состоние пина 4, когда то изменится.
Итого. Тот же самый скрипт, только добавил открытие GPIO2 и изменение его состояние по изменению GPIO4
gpio = fr.client.gpio function value_changed( data, diod ) print( "Value 3 -> 4 has changed to", data.value, data.interval ) diod:set( data.value ) -- установим состояние диода. end function main( ) local gin, erri = gpio.export( 4, "in" ) local gout, erro = gpio.export( 3, "out" ) local diod, errd = gpio.export( 2, "out" ) -- откроем диод if gin and gout and diod then fr.run( ) assert(gout:set(0)) assert(gin:set( "edge", "both" )) assert(gin:subscribe("on_changed", value_changed, diod, gin )) else print( erri, erro, errd ) end end
Теперь скрипт включает и выключает диод, когда я нажимаю или отжимаю кнопку.
PS: Где-то у меня инкрементный енкодер валялся. Думаю, если я его найду, то добавлю пример работы с ним.