1. 개요NodeMCU 개발보드를 웹서버로 사용함으로써 온습도센서(DHT11)의 센서값을 웹페이지에 출력해보았고 웹클라이언트로 HTTP 웹페이지에 접속하는 작업을 해보았다. 이 글에서는 온습도 센서값을 웹페이지에 출력하며 또한 일정 시간마다 센서값을 PHP로 구현된 웹서버에 넘겨주어 데이터베이스(MySQL DB)에 값을 저장시키는 작업을 해볼 것이다. 1.1 요약 정리7번 이후부터 병렬로 동작됩니다.
1. 웹서버 구축(라즈베리파이) 1.2 준비물
2. 라즈베리파이 웹서버 만들기(옵션)2.1 웹서버 구축이 글에서 데이터베이스와 연동되는 PHP 웹서버는 라즈베리파이로 구현합니다. 라즈베리파이 라즈비안 APM(Apache, PHP, MySql, phpMyAdmin) 설치하기 글에서 기본적인 웹서버를 구현할 수 있습니다. 2.2 데이터 베이스 및 테이블 만들기데이터베이스에 접속한 것을 기준으로 진행합니다. 아래 명령어로 nodemcu 라는 이름의 데이터베이스를 생성합니다.
nodemcu 데이터베이스를 사용합니다. temp int(10), humidity int(10) 필드를 가지는 dht 이름의 테이블을 생성합니다.
3. 웹페이지 구성(PHP)라즈베리파이 라즈비안 OS 기준으로 설명합니다. 라즈베리파이가 아니라면 아래 PHP 코드만 자신의 웹서버가 구동하는 위치에 insert.php 이름으로 만들어주면 됩니다. (윈도우 기준 C:\wamp64\www\ 또는 C:\xampp\htdocs 등의 경로) 다음 명령어로 insert.php 파일을 만든 후 그 아래 코드를 작성합니다. 계정ID 와 계정암호는 사용하는 SQL 유저 ID, 암호를 입력해줍니다. PHP 코드는 SQL 에 접속 후 $_GET[''] 로부터 받은 온습도 값을 dht 테이블에 삽입해주는 PHP 코드입니다. 이 글은 PHP 또는 SQL 를 설명하는 글이 아니므로 자세한 설명은 추후 PHP, SQL 글에서 설명하겠습니다. "Ctrl + X", "Y", "Enter" 를 순서대로 눌러줘서 저장해주고 나옵니다.
4. 소스코드4.1 전체 소스코드
4.2 소스코드 설명코드에 대한 자세한 설명은 NodeMCU - 웹서버 웹페이지에서 서보모터 제어하기, NodeMCU - 웹서버 웹페이지에서 NodeMCU LED 제어하기 글에서 확인하시길 바랍니다.
인터럽트 타이머를 위한 변수 및 상수 선언 부분이며 아래서 추가로 설명합니다.
NodeMCU - NodeMCU 웹클라이언트 HTTP 접속하기 글을 보면 delay() 함수를 사용하여 5초마다 접속시도를 해주었습니다. 하지만 이 글에서는 delay() 함수를 사용할 수 없습니다. 왜냐하면 NodeMCU 보드가 웹서버로도 사용되기 때문입니다. 무슨말이냐 하면 delay() 함수는 일정 시간동안 아무것도 안하고 마냥 멈춰있습니다. 멈춰있는 동안 웹브라우저(웹클라이언트)가 NodeMCU 보드로 요청을한다면? NodeMCU 보드는 아무것도 못하고 일단 delay() 함수가 끝날 때까지 기다려야합니다. 이런경우 좋은 코드가 아니기 때문에 계속 웹클라이언트의 요청을 확인하되 일정시간마다 온습도를 측정, 데이터베이스로 저장할 수 있도록 millis() 함수를 사용하였습니다. 아래 그림은 loop() 함수에서 좋은 코드(millis 함수 사용)와 나쁜 코드(delay 함수 사용)의 알고리즘입니다. 좋은 코드나쁜 코드
이전 글에서 단지 http 페이지를 요청하였다면 이 글에서는 온습도 센서값을 데이터베이스로 넘겨주는 작업도 해야합니다. 그에 따른 PHP 문법은 다음과 같습니다. 5. 동작 결과웹브라우저로 온습도 값이 1초마다 바뀌며 잘 출력되는 것을 확인할 수 있으며 "http://192.168.1.100/insert.php?temp=온도값&humidity=습도값" 위 주소로 온습도값이 잘 전달되는 것도 확인할 수 있습니다. (192.168.1.100 : 필자의 라즈베리파이 IP 주소) phpMyAdmin 을 통해 NodeMCU 로 부터 전달받은 데이터가 잘 저장되는지 확인도 가능합니다. 6. 참조- |