Про GPIO на OrangePi

Не все наверное знают про WiringOtherPi This is a GPIO access library for OrangePi форк original WiringPi for Raspberry Pi

Для проверки, как заработает на OrangePi код для Raspberry Pi использующий прерывания и библиотеку Wiring ,
скомпилируем программу для определения направления вращения вала энкодера .
Reading a Rotary Encoder from a Raspberry Pi

ставим WiringOtherPi :

git clone https://github.com/lanefu/WiringOtherPi.git
cd WiringOtherPi
sudo ./build
cd ..

затем:

git clone https://github.com/astine/rotaryencoder
cd rotaryencoder
nano test.c

вставляем:


#include "stdio.h"
#include "rotaryencoder.h"
int main()
{
printf("Hello!\n");
wiringPiSetup () ;
/*using pins 3/7*/
struct encoder *encoder = setupencoder(7,8);
long value;
while (1)
 {
 updateEncoders();
 long l = encoder->value;
   if(l!=value)
   {
     printf("value: %d\n", (void *)l);
     value = l;
   }
 }
return(0);
}

Save and compile it:

gcc -lwiringPi test.c rotaryencoder.c -o test

энкодер подключаем к контактам 3 и 7 гребенки, общий вывод к 6 контакту.

./test

value: 0
value: 1
value: 2
value: 3
value: 4


работает!

Share
Send
Pin
2017   armbian   GPIO   OrangePI PC   Wiring
11 comments
vash_sa

Чем эта библиотека отличается от https://github.com/zhaolei/WiringOP? Названием?

admin

Привет!
Не только названием отличается, она совместима с Orange Pi Zero на H2, ну и претендует на включение в релиз Armbian. Как и WiringOP, это всего лишь прослойка.

vash_sa

В рекомендуемой библиотеке (как и в других) не переделан кусок текста из оригинально библиотеки для Малины. В частности,
if (sysFds [bcmGpioPin] == -1)
{
sprintf (fName, “/sys/class/gpio/gpio%d/value”, bcmGpioPin) ;
if [bcmGpioPin] = open (fName, O_RDWR < 0)
return wiringPiFailure (WPI_FATAL, “wiringPiISR: unable to open %s: %s\n”, fName, strerror (errno)) ;
}
Понятно, что каталога по пути /sys/class/gpio/gpio%d/value никогда не найдется в OPI там названия совсем другие.
Это вызывает ошибку в программах, например работы с 433 приемником.
Что можно сделать?

admin

Функция wiringPiISR нормально работает с библиотекой WiringOtherPi, дайте ссылку на програмку.

vash_sa

http://www.princetronics.com/how-to-read-433-mhz-codes-w-raspberry-pi-433-mhz-receiver/
в ней git clone git://github.com/ninjablocks/433Utils.git, но по этой ссылки она не полностью скачивается. Нужно
скачать еще каталог rc-switch по ссылке https://github.com/sui77/rc-switch.git. А то в этом каталоге пусто.
После компиляции появляется RFSniffer. Если его запустить, то он и ругается на кусок библиотеки WiringPI.c, который я привел выше.
Посмотрите, пожалуйста, что можно сделать?

admin

в файле RCSwitch.h поменяйте PIN на 29, это 40 нога гребёнки. make clean && make

vash_sa

Не понял, можно поподробнее, что на что поменять?

vash_sa

бросьте мне на почту измененный файл, пожалуйста

admin

Ошибся с расширением файл: RFSniffer.cpp
433Utils/RPi_utils/RFSniffer.cpp
строка 25 заменить на int PIN = 29;

Konstantin

проверил энкодер работает, а как дальше эти его значения прикрутить к громкости squeezelite???
curl “http://192.168.1.36:9000/status.txt?p0=mixer&p1=volume&p2=%2B5&player=192.168.1.38
или к громкости alsamixer?
спасибо)

ua3nbw

прикрутить энкодер к squeezelite очевидно в функции updateEncoders();
если используете один плеер управляйте громкостью с помощью alsamixer
Управление LMS on the OrangePI при помощи энкодера 

Сергей

Здравствуйте! Вы не могли бы создать топик по настройки исходных установок на MainLine по аналогии со старым ядром. Интересует настройка GPIO. В старом ядре был fex файл
[gpio_para]
gpio_used = 1
gpio_num = 24
gpio_pin_1 = port:PA12<1><default><default><0>
gpio_pin_2 = port:PA11<1><default><default><0>
gpio_pin_3 = port:PA06<0><default><default><1>
и порты port:PA12 становился выходом с исходным значением 0, а port:PA06 – входом с исходным высоким уровнем.
А в новом ядре как это сделать? Может ссылка есть с объяснением.
В доке Армбиана https://docs.armbian.com/Hardware_Allwinner_overlays есть даже пример, но нет описания.
Помогите. пожалуйста, разобраться.

ua3nbw

Здравствуйте! Указывать GPIO в Device Tree необходимо для настройки GPIO для работы в режиме программного SPI, I2C, для использования GPIO в качестве источника прерываний и т.д.
проще установить WiringOtherPi :

gpio mode 8 out     // port:PA12 
gpio mode 8 down

gpio mode 7 in     //port:PA06
gpio mode 7 up
Popular