mariadb에 lab10이라는 테이블을 만들고 측정 시간, 디지털 조도 센서 및 디지털 근접 센서값을 저장하도록 테이블을 구성한다.
측정시간, 조도 센서 및 근접 센서 값을 3초 간격으로 측정하여 lab10 테이블에 저장하도록 demodb.cpp 코드를 수정하여 실행한다. (demodb.cpp코드를 먼저 backup 받을 것)
실행 결과를 mariadb에서 확인한다.
$ 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)
#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를 개조하긴 했는데 맞는진 모르겠다.
// 장비에 실행해보고 수정할 것.
http://192.168.1.7/phpmyadmin/에 접속하여 확인.