본문 바로가기

라즈베리파이/왕초보

라즈베리파이[9] - 아두이노로부터 읽어들인 센서값 라즈베리파이의 데이터베이스에 저장하기

반응형

안녕하세요.

오늘은 아두이노에 연결된 센서에서 읽어들인 데이터를 라즈베리파이의 데이터베이스에 저장해보겠습니다.

 

 

1. 통신환경

아두이노와 라즈베리파이는 다양한 방법으로 통신할 수 있지만 여기서는 USB를 통해 시리얼 통신을 하는 환경에서 데이터를 읽어들이겠습니다.

시리얼 통신포트는 파이썬 코드로 데이터를 DB에 입력시킬때 필요합니다.

이때 통신포트가 본인의 환경에 따라서 달라질 수 있는데 라즈베리파이에 아두이노를 연결하고 코드를 업로드 할때 사용하는 포트를 기억해두시면 됩니다.

아래 사진을 참고해주세요.

저의 경우는 /dev/ttyACM0

 

 

 

2. 데이터베이스

데이터베이스 프로그램은 오픈소스인 마리아DB를 사용하겠습니다.

오늘 사용할 데이터베이스의 정보는 다음과 같습니다.

-db계정은 root

-db명은 test

-테이블 명은 sensor

-열 이름은 sensor

입니다.

 

데이터베이스를 사용하는 방법에 대해서는 아래 링크를 참조해주세요.

2020/04/16 - [IT/라즈베리파이] - 라즈베리파이[6] - LAMP설치하기

 

 

3. 소스코드

(1) 라즈베리파이에서 파이썬 파일을 만들어줍니다.

아래 명령어를 입력하여 test라는 이름의 파이썬 파일을 생성해주세요.

sudo nano test.py		//라즈베리파이에서 test라는 이름의 파이썬 파일을 생성해줍니다.

(2) 아래의 파이썬 코드를 입력하고, 저장해줍니다.

import serial		//파이썬으로 시리얼 통신을 조작하기 위한 모듈입니다.
import MySQLdb		//파이썬으로 DB를 조작하기 위한 모듈입니다.

//시리얼 통신환경을 설정해줍니다. 
//"/dev/ttyACM0"는 아두이노와의 통신포트를 의미하며, 저와 다를 수 있으니 본인의 포트를 확인해주세요.
port = serial.Serial("/dev/ttyACM0", "9600")

//데이터베이스 접속환경을 설정해줍니다.
db = MySQLdb.connect("localhost", "root", "비밀번호", "db명")
curs = db.cursor()
 
while True:
        try:
            data = port.readline()	//시리얼 포트에서 읽어들인 값을 data라는 변수에 저장합니다.
 
            print("Temperature: ")
            print(data)  
 			
            //데이터베이스에 읽어들인 값을 저장합니다.
            //"""INSERT INTO 테이블명 (열 이름) VALUES (데이터의 형태)""", (저장할 값) 형태입니다.
            curs.execute("""INSERT INTO sensor (sensor) VALUES (%s)""", (data))
            db.commit()
 
        except KeyboardInterrupt:
                break
                
port.close()
db.close()

(3) 저장한 파이썬 파일을 실행시켜줍니다.

아래 명령어를 입력하여 저장해둔 파이썬 프로그램을 실행시켜주세요.

sudo python test.py

 

정상적으로 프로그램이 실행되면 다음과 같이 시리얼 포트를 통해서 읽어들인 데이터가 터미널에 표시됩니다.

 

(4) 데이터베이스에 접속해서 센서값이 정상적으로 입력되었는지 확인합니다.

아래 명령어를 입력하여 데이터베이스에 접속해주세요.

mysql -u root -p

다음 명령어를 통해 test 데이터베이스를 사용합니다.

use test;

다음 명령어를 입력해 원하는 테이블을 조회해주세요.

select * from sensor;

+) 위 사진에는 1이라는 값이 들어있는 id라는 열도 포함되어있는데 제가 테스트하기 위해 만든 열이므로 여러분이 사용한 코드에는 나타나지 않는 값입니다.

반응형