본문 바로가기
Coding/Raspberry pi - node.js

Raspberrypi에 MySQL연동하기

by hyun-am 2019. 11. 18.

MySQL(Maria DB)설치하기

 

1. $sudo raspi-config

2. $sudo apt-get install mariadb-server

3. $sudo systemctl restart mariadb.service

4. $sudo mysqladmin -u root password '비밀번호'

 

실습 초음파센서와 mysql 연결하기

 

database 설정하기

 

table 생성

create database sensordb;
use sensordb;
create table sonic(stamp DATETIME(3) NOT NULL, distance INT);

 

node.js 에서의 MySQL 연동모듈 설치

 

$npm install mysql

 

하드웨어 구성

 

초음파 측정센서

 

5v - 물리적 2번

GND - 물리적 6번

ECHO - 물리적 38번 wpi-28

GND - 물리적 40번 wpi-29

 

코드구현

 

선언 및 디비 연결 부분

 

const gpio = require('node-wiring-pi');
const mysql = require('mysql');
const TRIG = 29;
const ECHO = 28;

var startTime;	// 초음파 송출시간
var travelTime;	// 초음파 수신까지 경과시간

const client = mysql.createConnection({
    host:'localhost',	//DB서버 IP주소
    port:port번호,	// DB서버 Port주소
    user:'ID',	// DB접속 아이디
    password:'password',	// 암호
    database:'DB이름'	// 사용할 DB명
});
    

 

함수구현 부분

 

const Triggering = function(){
    gpio.digitalWrite(TRIG,gpio.LOW);
    gpio.delaymicroseconds(2);
    gpio.digitalWrite(TRIG,gpio.HIGH);
    gpio.delaymicroseconds(20);
    gpio.digitalWRite(TRIG,gpio.LOW);
    
    while(gpio.digitalRead(ECHO)==gpio.LOW);
    startTime = gpio.micros();
    while(gpio.digitalRead(ECHO)==gpio.HIGH);
    travelTime = gpio.micros()-startTime;
    
    distance = travelTime/58;
    if(distance<400){
        console.log("Distance : %d cm",distance);
        if(distance <=20){	//20cm이내 근접거리
            let stamptime = new Data();
            client.query('INSERT INTO sonic VALUES (?,?)',[stamptime,distance],(err,result)=>{
                if(err){
                    console.log("DB저장실패!");
                    console.log(err);
                }
                else console.log("DB저장완료!");
            });
        }
    }
    setTimeout(Triggering,700);
}

 

테이블 값 조회 부분

 

const Retrieve = function(){
    let stamp_distance;
    client.query('SELECT * FROM `sonic`',function(error,results,fields){
        console.log("-----------------------------------");
            results.forEach(function(element,i){
                stamp_distance = '';
                stamp_distance += element.stamp.toLocaleString('ko-KR',{hour12:false}) + '.';
                stamp_distance += element.stamp.getMilliseconds() + ' ';
                stamp_distance += element.distance;	// 거리(distance)추가
                console.log(stamp_distance);
            });
        console.log("------------------------------------");
        setTimeout(Retrieve,5000);	// 5초마다 DB조회 (저장확인)
    });
}
    
gpio.wiringPiSetup();
gpio.pinMode(TRIG,gpio.OUTPUT);
gpio.pinMode(ECHO,gpio.INPUT);
setImmediate(Triggering);
setImmediate(Retrieve);

댓글