'2018/08/05'에 해당되는 글 3건

  1. 2018.08.05 [Onion Omega2+] GPIO로 버튼 입력 체크하기(C++)
반응형


Onion Omega2+의 C/C++ Cross Compile 환경에서 GPIO를 이용하기 위해서는 libugpio가 있어야 한다. libugpio는 toolchain을 빌드할때 같이 빌드 되어야 한다. 툴체인 빌드는 http://alnova2.tistory.com/1216  에서 포스팅 하였는데, 기본적으로 libugpio는 포함되어 있지 않다. 다음과 같이 libugpio에 대한 Makefile을 툴체인에 포함시킨다.


$mkdir [ToolChain Source Dir]/package/libs/libugpio 

$cd  [ToolChain Source Dir]/package/libs/libugpio 

$wget https://raw.githubusercontent.com/openwrt/packages/master/libs/libugpio/Makefile

$cd [ToolChain Source Dir]

$make menuconfig


menuconfig에서 library를 선택해 들어가서 libugpio를 선택한다.

그리고 빌드한다.


$make -j4


빌드하고 나면 [ToolChain Source Dir]/staging_dir/target-mipsel_24kc_musl-1.1.16/usr/lib 에 libugpio라이브러리가 빌드되어 있다. 그리고 include 파일은 [ToolChain Source Dir]/staging_dir/target-mipsel_24kc_musl-1.1.16/usr/include/ugpio/ugpio.h 에 존재한다.


Eclipse에서 이용하려면 "Properties" -> "C/C++ Build" -> "Settings" 에서 "Cross G++ Compiler" 의 includes에  [ToolChain Source Dir]/staging_dir/target-mipsel_24kc_musl-1.1.16/usr/include/ 를 포함시켜야 하며, "Cross G++ Linker"의 "Library search path"에 [ToolChain Source Dir]/staging_dir/target-mipsel_24kc_musl-1.1.16/usr/lib  를 포함시켜 주고, "Libraries"에 ugpio를 설정해 준다.


GPIO C++ 예제는 다음의 사이트에서 구할 수 있다.


https://github.com/OnionIoT/c-cross-compile-example



다음은 main 함수에서 GPIO 0번에 대해서 입력을 체크하는 소스 코드이다. (#include <ugpio/ugpio.h>를 include 해줘야 함)

int main() {

int rq,rv,gpio,value,i;

gpio=0;

if((rq=gpio_is_requested(gpio))<0){

cout<<"GPIO is already Requested"<<endl;

exit(-1);

}

if(!rq){

if((rv=gpio_request(gpio,NULL))<0){

cout<<"GPIO Request Error:"<<rv<<endl;

exit(-1);

}

}

if ((rv = gpio_direction_input(gpio)) < 0)

{

cout<<"gpio_direction_input"<<endl;

exit(-1);

}

printf("> begin reading GPIO%d\n",gpio);

for (i = 0; i < 20; i++)

{

// read the gpio

value = gpio_get_value(gpio);

printf("  > Read GPIO%d: value '%d'\n", gpio, value);

// pause between each read

sleep(1);

}

// unexport the gpio

if (!rq) {

printf("> unexporting gpio\n");

if (gpio_free(gpio) < 0)

{

perror("gpio_free");

}

}

return 0;

}


버튼은 드음과 같이 A-C구간에 대해서 연결하거나 연결을 해제한다.

스위치는 다음과 같이 구성한다. button가 눌리지 않은 상태에서는 GND 가 입력되고, 눌리면 3.3 Voltage가 입력된다.


실제 구성한 사진이다.


반응형
Posted by alias
,