본문으로 바로가기
반응형

LED가 1초단위로 10번 깜빡거리는 코드를 작성해보자.

# 파일이름 : LEDonesec.py

import RPi.GPIO as GPIO
import time

Led = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(Led, GPIO.OUT)
num = 10

 try:
   while(num > 0):
      GPIO.output(Led, 1)
      print("켜집니다 : %d" %num)
      time.sleep(0.5)

      GPIO.output(Led, 0)
      print("꺼집니다")
      time.sleep(0.5)
      num = num - 1

except KeyboardInterrupt:
   GPIO.cleanup()

총 10번만 실행되게 코드 작성

 

 

 

 

크론탭

크론과 크론탭은 리눅스 모든 패키지에 거의 기본으로 포함되어있다.(라즈베리파이에도 포함되어있다)

cron은 크론탭에 특정 명령어나 스크립트를 작성한 파일을 등록해주면 정해진 시간대에 자동으로 프로세스가 실행하게해주는 프로그램이다.

 

 

크론 주기

*      *      *      *      * 
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7) 
순서대로 분-시간-일-월-요일 순이다. 그리고 괄호 안의 숫자 범위 내로 별 대신 숫자를 입력해주면 된다.
요일에서 0과 7은 일요일, 1부터 월요일이고 6이 토요일이다.

 

 

라즈베리파이에서 Crontab 설정 방법

cron에 스케줄 작업을 등록하려면 crontab 명령어를 사용하면된다.

파일이 있는 경로를 해당 코드로 작성해보자.

위의 예제처럼 Cron탭을 작성해서 저장해두면 1분후에 LED가 1초마다 10번 깜빡거리는 것을 볼 수 있다.

 

 

 

이번에는 백그라운드형태로 실행해보자.

 

참고로

키보드, 모니터를통해 프로그램을 실행하는것이 포그라운드,

는 키보드, 모니터없이 그냥 돌아가는 것이 백그라운드이다.

 

 

재부팅했을때도 무한반복으로 LED를 깜빡이는 코드를 구현해보자.

1. 무한반복문 코드 작성

2. 권한 수정

3. rc.local 파일 수정       순으로 진행한다.

 

 

1. 무한반복문 코드 작성

#! /usr/bin/env python3.7
# 파일이름 : LEDonesec_infi.py

import RPi.GPIO as GPIO
import time

Led = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(Led, GPIO.OUT)
num = 10

try:
   while(1):                # 무한반복
      GPIO.output(Led, 1)
      print("켜집니다")
      time.sleep(0.5)

      GPIO.output(Led, 0)
      print("꺼집니다")
      time.sleep(0.5)

except KeyboardInterrupt:   # 무한반복하다가 컨트롤 + C 누르면 꺼짐
   print()
   GPIO.cleanup()

실행파일 맨 위에 해당 코드를 추가하는 것에 주의

 

2. 권한 변경

부팅했을때 권한이 막혀있을 수 있으므로 해당 파일의 권한을 전부 오픈해서 바꿔주자.

chmod에서 숫자는

읽기 : 4

쓰기 : 2

실행 : 1   을 의미한다.

3자리 숫자가있는데 첫번째는 소유자, 두번째는 그룹, 세번째는 에브리원이다.

 

7은 읽기, 쓰기, 실행을 전부 더한 값으로, 모든 권한을 풀어주는 것을 의미한다고 생각하면된다.

ls -l을통해 권한이 바뀐것을 확인해보자

 

 

3. rc.local 파일 수정

부팅했을때 프로그램을 실행하는 설정은 rc.local 파일을 설정하면 된다.

rc.local 파일은 라즈베리파이가 부팅될때 실행될 스크립트를 지정할 수 있는 파일이다. 

따라서 부팅했을때 스크립트 경로를 설정해 놓으면 라즈베리파이가 부팅할 때 이 스크립트를 자동으로 실행하게 된다.

 

rc.local 파일을 실행해서 위에서 입력했던 무한반복.py 파일을 경로와 함께 입력해주자.

그리고 마지막에 "&"를 입력해주면 백그라운드 실행으로 해준다.

 

위와 같이 작성하고 저장한다음에 재부팅을 해보면 LED가 무한반복으로 깜빡이는 것을 확인할 수 있다.

이때 LED를 끄고싶으면 무한반복코드를 python으로 실행해서 cleanup을 해주면된다.

 

 

 

 

 

 

 

 

 

라즈베리파이로 Sqlite3 연동

 

Sqlite는 임베디드 시스템에 걸맞게 아주 가볍게 경량화된 DB 시스템이다.

 

우선 sudo 권한으로 sqlite를 설치해보자.

sudo apt-get install sqlite3

설치과정

설치가 완료되었으면 해당 코드를 작성해서 sqlite에 들어가보자

sqlite3 testdb.db

 

 

테이블을 하나 생성해보자.

 

테이블 생성

 

sqlite에서 데이터의 자료형은

INTERGER : 정수

TEXT        : 문자열

REAL        : 실수

BLOB        : 바이너리

NULL        : 빈 값               임을 참고하자.

 

 

.tables  를 통해 지금 생성된 테이블을 확인할 수 있다. (ls 와 비슷한 역할)

.tables

테이블 생성 확인

.exit로 현재 sqlite를 빠져나갈 수 있다.

.exit

 

빠져나온 후에 DB 디렉터리를 확인해보면 방금 만든 db 파일을 확인할 수 있다.

testdb.db 생성된 것을 확인

 

 

 

sqlite는 파이썬코드로 쿼리문을 작성하고 .py 파일을 실행함으로써 연동할 수 있다.

.py 파일로 쿼리문을 작성해보자.

# 파일이름 : sqlitePy.py

import sqlite3

dbconn = sqlite3.connect('./testdb.db') # 파일과 연동시키는 코드
cursor = dbconn.cursor()

try:
   # 테이블이 없으면 테이블생성
   cursor.execute("CREATE TABLE if not exists user(id INTEGER, name text, phone text, sex text)")
   cursor.execute("INSERT INTO user(id, name, phone, sex) VALUES(1, 'SEO', '000-111-2222', 'M')")
   cursor.execute("INSERT INTO user(id, name, phone, sex) VALUES(2, 'DONG', '333-444-5555', 'M')")
   cursor.executemany("INSERT INTO user(id, name, phone, sex) VALUES(?, ?, ?, ?)",\
      [(3, 'kim', '010-123-4567', 'f'), (4,'choi', '010-444-4444', 'f'),
       (5, 'WOO', '011-555-6666', 'f')])

   dbconn.commit()

except KeyboardInterrupt:
   dbconn.close()

파이썬코드로 쿼리문 작성

 

위의 코드를 살짝 훑어 보자면,

sqlite3.connect("./testdb.db')

testdb.db가 없으면 새로 생성해서 연결해주고, 이미 있으면 해당 db로 연결시켜준다.

 

conn.cursor()

파이썬에서 파일을 읽고 쓰려면 conn.cursor()로 커서를 생성하여 가져와야한다.

 

conn.execute()

DB 쿼리를 작성할때 사용한다. (해당 파일에는 테이블생성, 데이터삽입에 사용했다)

 

dbconn.commit()

dbconn.commit()을 통해 쿼리문을 실행했을때 DB에 즉시 반영되게 해준다.

커밋은 변경사항을 DB에 반영한다는 뜻으로, 커밋을 하지않으면 수정(추가/갱신/삭제 등) 작업에 대한 기록을 메모리에만 임시로 가지고있고 실제로는 DB에 반영되지 않는다.

 

 

 

 

쿼리문을 작성했으면 python으로 해당 파일을 실행해보자.

 

파이썬으로 실행했을때 아무 에러코드가 없으면 잘 실행된것임
select 쿼리문으로 데이터 입력이 잘 되었는지 확인

 

 

 

 

 

 

 

 

 

Qt 디자이너 사용

 

Qt 설치

Qt 를 사용하기위한 패키지 설치

 

 

vnc 가상서버에 접속하면 산딸기 클릭 -> 개발 메뉴에 들어가보면 Qt가 설치된것을 확인할 수 있다.

vnc 가상서버에서 설치된것을 확인

 

설치가 완료되었다면 Qt 5 Designer 를 클릭하여 ui 디자인을 시작할 수 있다.

 

우선 새폼 -> 템플릿 선택 -> 생성 버튼을 클릭해서 메인 ui를 생성할 수 있다.

 

컴포넌트를 ui에 깔아줌

 

 

파일 -> 다른 이름 으로 저장을 해주는데 pi/Work에서 Qt라는 디렉터리를 만들고 여기에다 test.ui 라는 이름으로 저장해주자.

저장했으면 test.ui 파일이 생성되어있을 것이다.

 

 

 

이 파일을 파이썬과 연동하기위해 파이썬코드로 변화를 시켜주어야한다.

해당 코드를 실행해서 nano 편집기로 확인해보자.

pyuic5 -x test.ui -o testPy.py

얼추 자체적으로 번역되서 코드로 적혀있는것을 확인

 

 

VNC에서 이 파일을 실행해보자.

실행하면 디자이너에서 작업했던 화면이 뜨는 것을 확인할 수 있다

 

 

pyQt는 디자이너를통해 LED나 모터를 제어하는 것이 목표인데, 시그널/슬롯 편집기를 통해 이벤트를 설정하는 것이 매우 불편하다. 파이썬으로 사용하는 Qt는 위젯을 불러와서 ui의 틀을 보여주는 것까지하는것이 정신건강에 이로울듯 싶다...

(윈폼같이 비쥬얼 스튜디오를보다가 Qt를보니 없던 암도 생기는 느낌이었다)

 

반응형