마이크로비트와 Firebase 데이터베이스 이용

문지원·2022년 11월 9일
0

이번 글에서는 마이크로비트가 컴퓨터에 연결이 된 채로 Firebase 데이터베이스를 이용하는 방법에 대해 설명합니다.

1. Firebase 데이터베이스 접근하기

해당 예제는 Firebase 서비스의 일부인 RealTime Database 서비스를 이용합니다

필요 프로그램 : Visual Studio Code

관계형 데이터베이스와 비관계형 데이터베이스에 대한 이해를 하고 진행합니다.

RealTime Database는 대중적인 방식인 SQL(Structured Query Language: 관계형 데이터베이스)을 사용하지 않고 NoSQL(Not Only SQL) 종류 중 하나인 Document(문서형)의 JSON(Javascript Object Notation) 방식을 사용하여 저장합니다. 따라서 관계형 데이터베이스와 다르기 때문에 이해가 관계형 데이터베이스가 익숙한 사람에게는 RealTime Database를 이해하는데 시간이 걸릴 수 있습니다.

RealTime Database를 사용하기 위해서는 여기를 클릭해서 아래의 사이트로 이동 후 프로젝트 추가 버튼을 클릭합니다

첫 번째로 프로젝트 이름을 입력하라고 합니다.

아무 이름이나 작성 후 계속을 클릭하고 애널리틱스에 대한 내용도 확인을 하고 계속을 클릭하고 애널리틱스 구성 화면에서 Default Account for Firebase 버튼을 클릭하고 프로젝트 만들기 버튼을 클릭합니다

새 프로젝트가 생성이 되었다면 좌측에 빌드 항목으로 들어가서 RealTime Database 버튼을 클릭합니다
클릭하여 데이터베이스 만들기 버튼을 클릭하고 데이터베이스가 위치할 지역을 선택하고 다음을 클릭합니다
잠금 모드로 시작을 선택하고 사용 설정을 클릭합니다.

위와 같은 화면이 데이터베이스가 저장되는 부분의 화면입니다
데이터베이스가 저장되는 항목의 상단에는 데이터베이스 링크가 있습니다

좌측 상단의 톱니바퀴 설정 버튼을 클릭하고 서비스 계정으로 이동합니다

Firebase Admin SDK가 기본적으로 선택이 되면 Admin SDK 구성 스니펫에서 Python 항목을 선택합니다
그리고 새 비공개 키 생성을 클릭합니다
키 생성을 누르면 새로운 키가 생성이 되고 다운로드가 됩니다

이제 Visual Studio Code를 실행하고 상단 메뉴에서 터미널(T) 메뉴를 누르고 새 터미널 버튼을 클릭합니다.
그럼 새 터미널이 하단에 생성됩니다.
아래의 Firebase SDK 설치 과정을 진행해주세요
(pip3 라는 명령어를 인식하지 못할경우 윈도우 환경변수를 추가해주세요 Python버전\Scripts)

pip3 install --upgrade pip #파이프를 업그레이드 합니다
pip3 install firebase_admin #firebase admin 라이브러리를 설치합니다
pip3 install pyserial # 시리얼 통신을 위한 라이브러리 설치

새로운 파일을 만들고 이름은 원하는 이름으로 하되 확장자를 .py로 지정해주세요
이전에 받은 키 파일을 코드파일과 같은 폴더로 이동시켜주세요
아래의 코드를 입력해주세요

[ 예제1 마이크로비트와 통신하기 ]

1. 파이썬 코드

COM12 부분을 장치 관리자 -> USB 직렬 장치(COMXX) 의 번호로 변경해야 합니다

import serial
# 시리얼 통신 설정
serial1 = serial.Serial("COM12",9600,timeout=1) # 마이크로비트의 포트 번호와 보드 통신 속도를 통해 포트를 열기

# 무한반복
while True:
    microbitData = str(serial1.readline().decode('utf-8')) # 시리얼에서 한줄을 읽고 utf-8로 디코딩을 진행 (디코딩을 하지 않으면 b''와 같은 형식으로 출력됨)
    if microbitData != "": # microbitData 변수에 문자가 있는지 확인
        print(microbitData) # 받은 문자열을 출력

serial1.close()

2. 마이크로비트 코드

<div style="position:relative;height:calc(300px + 5em);width:100%;overflow:hidden;"><iframe style="position:absolute;top:0;left:0;width:100%;height:100%;" src="https://makecode.microbit.org/---codeembed#pub:_9J9XdD873Fgo" allowfullscreen="allowfullscreen" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe></div>

위 코드를 실행하면 마이크로비트에서 A버튼을 눌렀을때 파이썬 터미널에 Hello World가 출력되는 걸 볼 수 있습니다.
(코드는 python 또는 python3 파일명.py로 실행합니다)

2. 결과

[ 예제2 마이크로비트의 데이터를 저장하기 ]
데이터베이스의 저장은 Key-Value(키-값) 형식입니다.
따라서 아래의 코드를 실행하면 Python(키) 아래에 Hello World(값) 라는 값이 저장됩니다

1. 파이썬 코드

import serial
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

# Firebase RealTime Datebase 설정
cred = credentials.Certificate('serviceAccount.json') # 이전에 받은 키의 저장 위치(/path/serviceAccount.json)
firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://--.rtdb.firebaseio.com' # 이전에 본 데이터베이스 주소
})
ref = db.reference('') # 데이터베이스 위치

# 시리얼 통신 설정
serial1 = serial.Serial("COM12",9600,timeout=1) # 마이크로비트의 포트 번호와 보드 통신 속도를 통해 포트를 열기

# 무한반복
while True:
    microbitData = str(serial1.readline().decode('utf-8')) # 시리얼에서 한줄을 읽고 utf-8로 디코딩을 진행 (디코딩을 하지 않으면 b''와 같은 형식으로 출력됨)
    if microbitData != "": # microbitData 변수에 문자가 있는지 확인
        ref.set({
            'Python':microbitData
        })
        print("데이터 저장완료") # 받은 문자열을 출력
    
serial1.close()

2. 마이크로비트 코드

<div style="position:relative;height:calc(300px + 5em);width:100%;overflow:hidden;"><iframe style="position:absolute;top:0;left:0;width:100%;height:100%;" src="https://makecode.microbit.org/---codeembed#pub:_9J9XdD873Fgo" allowfullscreen="allowfullscreen" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe></div>

3. 결과

마치며

이렇게 해서 마이크로비트와 시리얼 통신을 이용해서 Firebase의 RealTime Database 서비스를 이용하는 방법에 대해서 알아보았습니다.

결론으로 마이크로비트에서는 시리얼 통신 값을 통해서 데이터를 입력받고 데이터를 가공해서 실시간 데이터베이스에 업로드하는 방식이었습니다.

profile
인문계 고등학교에서 코딩하는 학생입니다 👋

0개의 댓글