dinist하나의 보드에서 DHT11 센서와 MQ-5센서를 모두 사용하여 업로드할 것이다. 그럼 하나 소스코드에 DHT11작업과 MQ-5 작업을 모두 해야한다. 또한 DB에 업로드할때 DATETIME도 같이 올려야하므로 NTP를 통하여 시간데이터를 받아와 Time컬럼의 데이터로 활용하도록 한다. 이전에 DHT11 데이터를 수집하기 위한 테이블을 만들었었다. 하지만 지금 생각해보니 만들당시에는 Value를 저장할 컬럼이 하나밖에 없었다. 값을 저장하는 컬럼을 3가지로 늘렸다. (온도,습도,열 지수) 그러면 DHT11 테이블에는 5개의 컬럼이 존재한다. (Seq, Temperature, Humidity, Heat Index, Time) 테이블의 구조를 변경해야하므로 다음 쿼리를 mariadb 콘솔(root로 로그인)에서 입력한다.
온도를 저장하는 컬럼 Temperature는 UNSIGNED TINYINT타입으로 정했다. DHT11센서는 0 ~ 50도 까지만 측정가능하므로 0~255까지 범위가 설정된 unsigend tinyint로 설정했다. Heat Index는 DHT11 센서 테스트당시 xx.xx 형식으로 출력되는것을 확인하여 DECIMAL(4,2)로 설정했다. 총 4자리에 소수점자리 2자리로 설정하는것이다. 이후 MQ-5센서의 값을 저장하기 위한 테이블을 생성한다. MQ-5센서로 부터 수집되는 값은 Rs/R0 값만 저장할 계획이다.
순서번호를 의미하는 Seq는 UNSIGNED MEDIUMINT으로 설정했다. 최대 값이 1600만이다. 레코드를 1600만개까지 저장할 것 같지는 않지만 이정도로 설정했다. Rs/R0 값을 저장하는 Value 컬럼은 아까 DHT11의 Heat Index 컬럼의 자료형과 마찬가지로 똑같이 설정했다. 역시 xx.xx형식으로 출력되었기 때문이다. 이제 웹서버에 저장된 post 요청 삽입 파일을 이에 맞게 수정해야한다.
이제 아두이노 코드를 작성하여 아두이노에 업로드한다.
결과는...? 시리얼 모니터에서 수집한 데이터의 값도 잘 나온다. HTTP 응답 코드가 200 OK 이고, 서버에서 데이터 삽입에 성공했을때 보내는 응답인 "데이터 입력이 완료되었습니다." 응답도 잘 보인다. 이제 MariaDB콘솔에서 직접 쿼리를 진행하여 값이 저장되었는지 확인해보자. DHT11 테이블과 MQ5 테이블을 조회해본 결과 위의 시리얼 모니터에 출력된 값과 시간이 모두 잘 나온다. 여기까지 센서를 통해 수집한 값을 아두이노를 통해 Compute Engine VM의 DB에 저장하는것 까지 모두 마쳤다. |