<?php
$servername = "localhost";
$username = "userid";
$password = "password";
$dbname = "dbname";
$conn = mysqli_connect($servername, $username, $password, $dbname);
$temperature = null;
$humidity = null;
$soil_moisture = null;
$micro_dust = $_GET['micro_dust'];
$temperature = $_GET['temperature'];
$humidity = $_GET['humidity'];
$soil_moisture = $_GET['soil_moisture'];
if(strlen($micro_dust)<=0){
$micro_dust = '';
}
if(strlen($temperature)<=0){
$temperature = '';
}
if(strlen($humidity)<=0){
$humidity = '';
}
if(strlen($soil_moisture)<=0){
$soil_moisture = '';
}
$sql = "INSERT INTO senier_project_sensor(micro_dust, temperature,humidity,soil_moisture) VALUES('$micro_dust', '$temperature','$humidity','$soil_moisture')";
echo $sql;
mysqli_query($conn, $sql);
mysqli_close($conn);
?>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN D1
#define DHTTYPE DHT22
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
const char* ssid = "Android_DEBTOLEE";
const char* password = "201562054";
String host = "http://debtolee.pe.kr/senier_project/sensor_getter.php";
const long interval = 5000;
unsigned long previousMillis = 0;
WiFiServer server(80);
WiFiClient client;
HTTPClient http;
void setup() {
dht.begin();
sensor_t sensor;
dht.temperature().getSensor(&sensor);
dht.humidity().getSensor(&sensor);
delayMS = sensor.min_delay / 1000;
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connecting to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("Server started");
}
void loop() {
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
float humidity = event.relative_humidity;
dht.humidity().getEvent(&event);
float temp = event.temperature;
// 센서값 DB 전송 부분
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
dht.humidity().getEvent(&event);
String phpHost = host+"/?temperature="+String(temp)+"&humidity="+String(humidity);
Serial.print("Connect to ");
Serial.println(phpHost);
http.begin(client, phpHost);
http.setTimeout(1000);
int httpCode = http.GET();
if(httpCode > 0) {
Serial.printf("GET code : %d\n\n", httpCode);
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
}
else {
Serial.printf("GET failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
// 웹서버 부분
client = server.available();
if(!client) return;
Serial.println("새로운 클라이언트");
client.setTimeout(5000);
String request = client.readStringUntil('\r');
Serial.println("request: ");
Serial.println(request);
while(client.available()) {
client.read();
}
client.print("HTTP/1.1 200 OK");
client.print("Content-Type: text/html\r\n\r\n");
client.print("<!DOCTYPE HTML>");
client.print("<html>");
client.print("<head>");
client.print("<meta charset=\"UTF-8\" http-equiv=\"refresh\" content=\"1\">");
client.print("<title>DHT senrsor test Webpage</title>");
client.print("</head>");
client.print("<body>");
client.print("<h2>DHT senrsor test Webpage</h2>");
client.print("<br>");
client.print("Temperature : ");
client.print(temp);
client.print(" °C");
client.print("<br>");
client.print("Humidity : ");
client.print(humidity);
client.print(" %");
client.print("</body>");
client.print("</html>");
Serial.println("클라이언트 연결 해제");
}
host 변수를 수정하면 서버 주소를 수정할 수 있다.
phpHost 변수에 들어가는 파라미터를 수정하면 데이터 전송하는 값과 파라미터명을 수정할 수 있다.