6주차, 2022.10.12 임베디드 시스템 수업 보고서(DATABASE) - Teddysir/rasberrypi GitHub Wiki

DB 구축 / Node-red 서버와 DB연동

라즈베리파이에 데이터베이스를 구축하고 Node-RED와 DB를 연동하여 입력받은 데이터를 데이터베이스에 저장한다.

1. 라즈베리파이에 MariaDB 서버 설치

image

sudo apt-get install mariadb-server

image

위와 같이 계속 설치할건지 물어봅니다 y를 눌러 계속 진행해줍니다.

2. MariaDB 설치 확인 및 실행

image

위와 같이 DB를 구동시킨 후

sudo service mysql start

DB 상태를 체크한다.

sudo service mysql status

image

위와같은 화면이 나오면 잘 작동한다는 뜻입니다.

3. DB 접속

image

sudo mysql -u root -p

위 사진과같이 명령어를 입력후 비밀번호 입력이 나타난다면 공백상태로 엔터를 눌러 들어가줍니다

이때 초기 설정한 비밀번호가 없기에 공백으로 설정된것입니다.

위와같은 화면이 나타나면 터미널에서 MariaDB 명령어를 입력할 수 있습니다.

4. root 계정 비밀번호 변경

image

set password for 'root'@'localhost'=password('[패스워드]');

위와같은 명령어 입력후 위 화면과 같은 화면이 나타난다면 성공적으로 비밀번호를 바꾸었습니다.

5. 새 DB 계정 생성

image

CREATE user '[계정명]'@'%' IDENTIFIED BY '[패스워드]'

위 사진과 같이 명령어를 입력해주고 아이디와 패스워드를 입력해주어 새로운 계정을 만들어 줍니다.

6. 새로운 DB 생성

image

CREATE DATABASE [DB명] CHARACTER SET utf8 collate utf8_general_ci;

위와 같은 명령어를 입력하여 새로운 DB를 생성해 줍니다.

7.DB 계정에 권한 부여

생성한 계정에 관리자 권한을 부여하여 DB를 관리할 수 있도록 함

image

grant all privileges on [DB명].* to '[계정명]'@'%';

해당 명령어는 계정이 DB의 모든 테이블에 접근할 수 있게 해주는 명령어이다.

image

grant all privileges on *.* to [계정명]@'%' identified by '[패스워드]';

해당 명령어는 pi계정이 원격 클라이언트에서 패스워드를 통해 접근할 수 있도록 권한을 부여하는 명령어이다.

image

flush privileges;

마지막으로 위 명령어는 계정에 부여한 권한을 즉시 활성화 시키는 명령어이다.

8. 생성한 계정으로 DB 접속

image

exit 명령으로 나와준후

mysql -u [계정명] -p 명령어를 입력하여 생성한 계정에 들어가줍니다.

설정한 비밀번호를 입력한후 위 화면처럼 나타나면 성공입니다.

9. 데이터베이스 목록을 출력

image

show databases;

입력한후 위 사진과 같이 이전에 생성한 데이터베이스가 있는지 확인합니다.

10. 사용할 데이터베이스 선택

image

use [DB명]; 을 작성후 위와같은 화면이 나타나면 데이터베이스가 선택된것입니다.

11. 데이터베이스에 테이블 생성

image

CREATE TABLE [테이블명](sensor varchar(30) not null, collect_time datatime not null, temp_c float, temp_f float, humidity float);

위 사진과같이 새로운 테이블을 생성해줍니다.

12. 생성한 테이블 확인

image

show tables; 명령어를 입력하면 위 사진과 같이 생성한 테이블 목록이 나타납니다.

13. 테스트 데이터 입력

image

INSERT INTO [테이블명] VALUES('[센서 정보]','[시각 정보]',[섭씨 온도],[화씨 온도],[습도]);

14. 테이블 정보와 테스트 데이터 확인

image

describe collect_data;

11번에서 입력한 테이블의 필드와 속성이 잘 나타나는 것을 알 수 있다.

select * from collect_data;

실제 정보를 가져오기 위해 위 명령어를 입력해준다.

image

truncate collect_data;

임의로 저장된 데이터를 삭제해주기 위해 위 명령어를 수행해줍니다.

select * from collect_data;

위 명령어를 실행하여 데이터가 잘 삭제되었는지 확인해줍니다.

15. Node-red 실행

image

node-red-start

명령어를 실행한 후 node-red 사이트로 들어가줍니다.

16. 노드 구성

image

필요한 노드들을 입력해줍니다.

image

타임스탬프를 설정해줍니다.

image

위와같이 dht11도 설정해줍니다.

17. mysql노드 설치

image

팔렛트 관리로 들어가 mysql을 검색후 위 사진에 나타난 node-red-node-mysql 노드를 다운받아줍니다.

18. mysql노드로 DB와 Node-red 연동

image

mysql 노드를 가져옵니다.

image

위 버튼을 누른 후 설정으로 들어간 후

image

DB 설치시 설정했던 계정 아이디 패스워드 모두 입력해준후 완료버튼을 누른다. 이후 배포하기를 누른다.

이상이 없을경우엔 mysql 밑에 connected가 나타납니다.

19. 함수 노드 구성

dht11 센서에서 입력 받은 데이터를 DB에 저장하기 위해 DB 포맷에 맞게 데이터를 전처리하는 과정이 필요하다.

image

`var sensor = msg.topic;

var timezoneOffset = new Date().getTimezoneOffset() * 60000; var timezoneDate = new Date(Date.now() - timezoneOffset); var collect_time = timezoneDate.toISOString().slice(0, 19).replace('T', ' ');

var temp_c = msg.payload;

var temp_f = temp_c * (9/5) +32;

var humidity = msg.humidity;

msg.payload = [sensor, temp_c, temp_f, humidity, collect_time]

msg.topic="INSERT INTO collect_data (sensor,temp_c,temp_f,humidity,collect_time)"; msg.topic=msg.topic+"VALUES(?,?,?,?,?)";

return msg;`

위 코드를 입력해준다.

20. 최종 노드 구성

image

image

위와같이 각 노드들을 연결후 OK가 나타나면 데이터가 데이터베이스에 저장이 잘 되고 있다는 것 입니다.

21. 저장된 데이터 확인

image

mysql -u pi -p 를 입력하여 나의 mysql에 접속후

select * from collect_data; 를 입력하여 데이터들이 잘 저장되고있는지 확인한다.

image