Extra Form
PHP PHP 7.4

"기진곰"님 덕분에 POST 방식도 공부해서 앞으로 추가될 변수 생각해 기존 GET방식을 POST 방식으로 잘 바꿨습니다.

질문좀 드리고자 합니다. 시간 괜찮으시다면 해결 방안을 말씀해 주시면 고맙겠습니다.

 

현재 PHP에서는 POST 값을 받아서 테이블이름이 value 인 db에 삽입하고 그와 동시에  테이블이름이 setup 인 db에서 0이 아닌 값만 찾아 echo로 출력하여 아두이노로 받는 방식으로

아두이노에서 서버기능을 제거할 생각입니다. 사유는 while 문 딜레이 제거?

 

그런데, 아무리 해봐도 php에서 echo를 아두이노에서 받지 못합니다...

header도 추가했는데 사진처럼 ? 뒤집힌 모양만 println이 아닌 print 로 출력되구요..

 

아래는 각 파일별 소스코드 입니다.

communication.php (PHP)

<?php
$connect = new mysqli(<hidden>);

$datetime = $_POST['datetime'];

$room_t = $_POST['room_t'];$room_h = $_POST['room_h'];$room_hic = $_POST['room_hic'];$room_index = $_POST['room_index'];$room_lux = $_POST['room_lux'];
$roomtemp = $_POST['roomtemp'];$roomhumi = $_POST['roomhumi'];$roomhic = $_POST['roomhic'];$roomindex = $_POST['roomindex'];$roomlux = $_POST['roomlux'];

$window_l = $_POST['window_l'];$window_s = $_POST['window_s'];$window_v = $_POST['window_v'];$window_ov = $_POST['window_ov'];$window_e = $_POST['window_e'];

$outdoor_t = $_POST['outdoor_t'];$outdoor_h = $_POST['outdoor_h'];$outdoor_hic = $_POST['outdoor_hic'];$outdoor_index = $_POST['outdoor_index'];
$outdoortemp = $_POST['outdoortemp'];$outdoorhumi = $_POST['outdoorhumi'];$outdoorhic = $_POST['outdoorhic'];$outdoorindex = $_POST['outdoorindex'];

$pad_t = $_POST['pad_t'];$pad_h = $_POST['pad_h'];$pad_hic = $_POST['pad_hic'];$pad_s = $_POST['pad_s'];$pad_r = $_POST['pad_r'];$pad_low = $_POST['pad_low'];$pad_high = $_POST['pad_high'];
$padtemp = $_POST['padtemp'];$padhumi = $_POST['padhumi'];$padhic = $_POST['padhic'];

$boiler_t = $_POST['boiler_t'];$boiler_h = $_POST['boiler_h'];$boiler_s = $_POST['boiler_s'];$boiler_r = $_POST['boiler_r'];$boiler_low = $_POST['boiler_low'];$boiler_high = $_POST['boiler_high'];
$boilertemp = $_POST['boilertemp'];$boilerhumi = $_POST['boilerhumi'];

$gas5 = $_POST['gas5'];$boiler5 = $_POST['boiler5'];$gas7 = $_POST['gas7'];$boiler7 = $_POST['boiler7'];

$detectflag = $_POST['detectflag'];

$connect->query("insert into value(datetime, room_t, roomtemp, room_h, roomhumi, room_hic, roomhic, room_index, roomindex, room_lux, roomlux, detectflag, window_s, window_l, window_v, window_ov, window_e, outdoor_t, outdoortemp, outdoor_h, outdoorhumi, outdoor_hic, outdoorhic, outdoor_index, outdoorindex, pad_s, pad_r, pad_t, padtemp, pad_h, padhumi, pad_hic, padhic, pad_low, pad_high, boiler_s, boiler_r, boiler_t, boilertemp, boiler_h, boilerhumi, boiler_low, boiler_high, gas5, boiler5, gas7, boiler7) values('$datetime', '$room_t', '$roomtemp', '$room_h', '$roomhumi', '$room_hic', '$roomhic', '$room_index', '$roomindex', '$room_lux', '$roomlux', '$detectflag', '$window_s', '$window_l', '$window_v', '$window_ov', '$window_e', '$outdoor_t', '$outdoortemp', '$outdoor_h', '$outdoorhumi', '$outdoor_hic', '$outdoorhic', '$outdoor_index', '$outdoorindex', '$pad_s', '$pad_r', '$pad_t', '$padtemp', '$pad_h', '$padhumi', '$pad_hic', '$padhic', '$pad_low', '$pad_high', '$boiler_s', '$boiler_r', '$boiler_t', '$boilertemp', '$boiler_h', '$boilerhumi', '$boiler_low', '$boiler_high', '$gas5', '$boiler5', '$gas7', '$boiler7')");

$sql = "SELECT window_s, pad_s, boiler_s, pad_low, pad_high, boiler_low, boiler_high FROM setup ORDER BY datetime DESC LIMIT 1";
$result = mysqli_query($connect, $sql);

while ($row = mysqli_fetch_array($result)) {
    if ($row['window_s'] > 0) echo "ws=".$row['window_s'];
if ($row['pad_s'] > 0) echo "ps=".$row['pad_s'];
if ($row['boiler_s'] > 0) echo "bs=".$row['boiler_s'];
if ($row['pad_low'] > 0) echo "pl=".$row['pad_low'];
if ($row['pad_high'] > 0) echo "ph=".$row['pad_high'];
if ($row['boiler_low'] > 0) echo "bl=".$row['boiler_low'];
if ($row['boiler_high'] > 0) echo "bh=".$row['boiler_high'];
}
header("HTTP/1.1 200 OK");
header("Content-Type: text/html; charset=UTF-8");
?>

 

 

communication.ino (아두이노)

if (millis() - senddelay >= 2999) {
    client.stop();
    if (client.connect(domain, 80)) {
      String sendvalue = "datetime=20";
      sendvalue += int(year);
      sendvalue += ".";
      sendvalue += int(month);
      sendvalue += ".";
      sendvalue += int(date);
      sendvalue += ".";
      sendvalue += int(hours);
      sendvalue += ":";
      sendvalue += int(minutes);
      sendvalue += ":";
      sendvalue += int(seconds);
      sendvalue += "&room_t=";
      sendvalue += int(floor(room_t));
      sendvalue += ".";
      sendvalue += int((room_t - int(floor(room_t))) * 100);
      sendvalue += "&room_h=";
      sendvalue += int(floor(room_h));
      sendvalue += ".";
      sendvalue += int((room_h - int(floor(room_h))) * 100);
      sendvalue += "&room_hic=";
      sendvalue += int(floor(room_hic));
      sendvalue += ".";
      sendvalue += int((room_hic - int(floor(room_hic))) * 100);
      sendvalue += "&room_index=";
      sendvalue += int(floor(room_index));
      sendvalue += ".";
      sendvalue += int((room_index - int(floor(room_index))) * 100);
      sendvalue += "&room_lux=";
      sendvalue += int(floor(room_lux));
      sendvalue += ".";
      sendvalue += int((room_lux - int(floor(room_lux))) * 100);
      sendvalue += "&detectflag=";
      sendvalue += detectflag;
      sendvalue += "&window_s=";
      sendvalue += EEPROM.read(6);
      sendvalue += "&window_l=";
      sendvalue += window_l;
      sendvalue += "&window_e=";
      sendvalue += EEPROM.read(7);
      sendvalue += "&window_v=";
      sendvalue += int(floor(window_v));
      sendvalue += ".";
      sendvalue += int((window_v - int(floor(window_v))) * 100);
      sendvalue += "&window_ov=";
      sendvalue += EEPROM.read(8);
      sendvalue += ".";
      sendvalue += EEPROM.read(9);
      sendvalue += "&outdoor_t=";
      sendvalue += int(floor(outdoor_t));
      sendvalue += ".";
      sendvalue += int((outdoor_t - int(floor(outdoor_t))) * 100);
      sendvalue += "&outdoor_h=";
      sendvalue += int(floor(outdoor_h));
      sendvalue += ".";
      sendvalue += int((outdoor_h - int(floor(outdoor_h))) * 100);
      sendvalue += "&outdoor_hic=";
      sendvalue += int(floor(outdoor_hic));
      sendvalue += ".";
      sendvalue += int((outdoor_hic - int(floor(outdoor_hic))) * 100);
      sendvalue += "&outdoor_index=";
      sendvalue += int(floor(outdoor_index));
      sendvalue += ".";
      sendvalue += int((outdoor_index - int(floor(outdoor_index))) * 100);
      sendvalue += "&pad_s=";
      sendvalue += EEPROM.read(2);
      sendvalue += "&pad_r=";
      sendvalue += digitalRead(heatrelay);
      sendvalue += "&pad_t=";
      sendvalue += int(floor(pad_t));
      sendvalue += ".";
      sendvalue += int((pad_t - int(floor(pad_t))) * 100);
      sendvalue += "&pad_h=";
      sendvalue += int(floor(pad_h));
      sendvalue += ".";
      sendvalue += int((pad_h - int(floor(pad_h))) * 100);
      sendvalue += "&pad_hic=";
      sendvalue += int(floor(pad_hic));
      sendvalue += ".";
      sendvalue += int((pad_hic - int(floor(pad_hic))) * 100);
      sendvalue += "&pad_low=";
      sendvalue += EEPROM.read(0);
      sendvalue += "&pad_high=";
      sendvalue += EEPROM.read(1);
      sendvalue += "&boiler_s=";
      sendvalue += EEPROM.read(5);
      sendvalue += "&boiler_r=";
      sendvalue += digitalRead(boilerrelay);
      sendvalue += "&boiler_t=";
      sendvalue += int(floor(boiler_t));
      sendvalue += ".";
      sendvalue += int((boiler_t - int(floor(boiler_t))) * 100);
      sendvalue += "&boiler_h=";
      sendvalue += int(floor(boiler_h));
      sendvalue += ".";
      sendvalue += int((boiler_h - int(floor(boiler_h))) * 100);
      sendvalue += "&boiler_low=";
      sendvalue += EEPROM.read(3);
      sendvalue += "&boiler_high=";
      sendvalue += EEPROM.read(4);
      sendvalue += "&gas5=";
      sendvalue += int(floor(gas5.readSensor()));
      sendvalue += ".";
      sendvalue += int((gas5.readSensor() - int(floor(gas5.readSensor()))) * 100);
      sendvalue += "&boiler5=";
      sendvalue += int(floor(boiler5.readSensor()));
      sendvalue += ".";
      sendvalue += int((boiler5.readSensor() - int(floor(boiler5.readSensor()))) * 100);
      sendvalue += "&gas7=";
      sendvalue += int(floor(gas7.readSensor()));
      sendvalue += ".";
      sendvalue += int((gas7.readSensor() - int(floor(gas7.readSensor()))) * 100);
      sendvalue += "&boiler7=";
      sendvalue += int(floor(boiler7.readSensor()));
      sendvalue += ".";
      sendvalue += int((boiler7.readSensor() - int(floor(boiler7.readSensor()))) * 100);
      sendvalue += "&roomtemp=";
      sendvalue += roomtemp;
      sendvalue += "&roomhumi=";
      sendvalue += roomhumi;
      sendvalue += "&roomhic=";
      sendvalue += roomhic;
      sendvalue += "&roomindex=";
      sendvalue += roomindex;
      sendvalue += "&roomlux=";
      sendvalue += roomlux;
      sendvalue += "&outdoortemp=";
      sendvalue += outdoortemp;
      sendvalue += "&outdoorhumi=";
      sendvalue += outdoorhumi;
      sendvalue += "&outdoorhic=";
      sendvalue += outdoorhic;
      sendvalue += "&outdoorindex=";
      sendvalue += outdoorindex;
      sendvalue += "&padtemp=";
      sendvalue += padtemp;
      sendvalue += "&padhumi=";
      sendvalue += padhumi;
      sendvalue += "&padhic=";
      sendvalue += padhic;
      sendvalue += "&boilertemp=";
      sendvalue += boilertemp;
      sendvalue += "&boilerhumi=";
      sendvalue += boilerhumi;
      client.println F("POST /communication.php HTTP/1.1");
      client.println F("Host: <HIDDEN>");
      client.println F("Content-Type: application/x-www-form-urlencoded");
      client.print F("Content-Length: ");
      client.println(sendvalue.length());
      client.println();
      client.println(sendvalue);
      char c = client.read();
      Serial.write(c);
    }
    senddelay = millis();
  }

 

 

감사합니다.

 

방금 예제의 client_repeating 에서 돌려봤는데 정상출력이 됩니다..?

그럼 더더욱 이해가 되질 않습니다..

202301021672632568.png.jpg

.....

  • profile
    오류가 발생해야 하는데 발생하지 않는 그 불안감, 저도 잘 알지요.
  • profile
    질문 내용이 안되어서 되게 하고 싶다는 것인가요, 아니면 되어서 이상하다는 뜻인가요? 하드웨어와 연관된 프로그램이 되다 안되다 한다면, 동기화의 문제가 있을수 있습니다.