C) 라즈베리파이 DB 연동

Dora·2020년 12월 7일
0

조건

  1. mariadb에 lab10이라는 테이블을 만들고 측정 시간, 디지털 조도 센서 및 디지털 근접 센서값을 저장하도록 테이블을 구성한다.

  2. 측정시간, 조도 센서 및 근접 센서 값을 3초 간격으로 측정하여 lab10 테이블에 저장하도록 demodb.cpp 코드를 수정하여 실행한다. (demodb.cpp코드를 먼저 backup 받을 것)

  3. 실행 결과를 mariadb에서 확인한다.

과정

mariadb에 lab10이라는 테이블을 만들고 측정 시간, 디지털 조도 센서 및 디지털 근접 센서값을 저장하도록 테이블을 구성한다.

$ mysql -u root -p
Enter password : root

MariaDB> create database demofarmdb;
Query OK, 1 row affected (0.00sec)

MariaDB> use demofarmdb;
Database changed;

MariaDB> create table lab10(time char(19) primary key, lightsensor int, neardetect int);
Query OK, 0 rows affected (0.03sec)

측정시간, 조도 센서 및 근접 센서 값을 3초 간격으로 측정하여 lab10 테이블에 저장하도록 demodb.cpp 코드를 수정하여 실행한다. (demodb.cpp코드를 먼저 backup 받을 것)

#define LIGHTSEN_OUT 2  //gpio27 - J13 connect
#define COLLISION 3

int get_light_sensor();
int get_neardetect_sensor();

#define DBHOST "localhost"
#define DBUSER "root"
#define DBPASS "root"
#define DBNAME "demofarmdb"

MYSQL *connector;
MYSQL_RES *result;
MYSQL_ROW row;

int main (void)
{
  int adcChannel  = 0;
  int adcValue[8] = {0};

  if(wiringPiSetupGpio() == -1)
  {
    fprintf (stdout, "Unable to start wiringPi: %s\n", strerror(errno));
    return 1 ;
  }

  if(wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) //아날로그를 디지털로 변환하는 부분인데 실제로 이 코드에서는 사용하고 있지 않습니다
  {
    fprintf (stdout, "wiringPiSPISetup Failed: %s\n", strerror(errno));
    return 1 ;
  }

  pinMode(CS_MCP3208, OUTPUT);

  // MySQL connection				//db붙이는 기능은 이 밑에 두줄 복사
  connector = mysql_init(NULL);
  if (!mysql_real_connect(connector, DBHOST, DBUSER, DBPASS, DBNAME, 3306, NULL, 0))
  {
    fprintf(stderr, "%s\n", mysql_error(connector));
    return 0;
  }

  printf("MySQL(rpidb) opened.\n");

  while(1) //sensor값을 수집하는 부분
  {
    char query[1024];
    adcValue[0] = get_light_sensor(); // Illuminance Sensor
	adcValue[1] = get_neardetect_sensor(); // neardetect Sensor

    //adcValue[7] = 27*pow((double)(adcValue[7]*VCC/4095), -1.10);

    sprintf(query,"insert into lab10 values (now(),%d,%d)", adcValue[0],adcValue[1]);

    if(mysql_query(connector, query))
    {
      fprintf(stderr, "%s\n", mysql_error(connector));
      printf("Write DB error\n");
    }

    delay(3000);
  }

  mysql_close(connector);

  return 0;
}


int wiringPicheck(void)
{
	if (wiringPiSetup () == -1)
	{
		fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
		return 1 ;
	}
}

int get_light_sensor(void)
{
	// sets up the wiringPi library
	if (wiringPiSetup () < 0) 
	{
		fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno));
		return 1;
	}
	
	if(digitalRead(LIGHTSEN_OUT))	//day
		return 1;
	else //night
		return 0;
}

int get_neardetect_sensor(void)
{
    if (wiringPiSetup() < 0)
    {
        fprintf(stderr, "Unable to setup wiringPi: %s\n", strerror(errno));
        return 1;
    }

    if (digitalRead(COLLISION))
        retun 1;
    else
        return 0;
}

// 원본 demodb.cpp를 개조하긴 했는데 맞는진 모르겠다.
// 장비에 실행해보고 수정할 것.

실행 결과를 mariadb에서 확인한다.

http://192.168.1.7/phpmyadmin/에 접속하여 확인.

profile
Lv.1 개발자

0개의 댓글