ESP8266 DHT22 HTTP 통신으로 데이터 저장하기

<?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 변수에 들어가는 파라미터를 수정하면 데이터 전송하는 값과 파라미터명을 수정할 수 있다.

Leave a Comment