I'm doing an IoT project where the temperature and humidity values from a DHT11 sensor is sent to a PHP server using HTTP post. When I run the Arduino, the Serial Monitor says "Bad request". The sensor values are not appearing on the webpage. Please, help me figure out the problem. I am using an Arduino Uno with and an ESP-01.
// Code to use SoftwareSerial
//The final sketch
#include "SoftwareSerial.h"
#include <dht.h>
#define dht_dpin 8
String data;
String ssid = "TRAK family";
String password = "rukman12345";
SoftwareSerial espSerial(6, 7); // RX, TX
dht DHT;
float t;
float h;
String server = "svce-ece-b.000webhostapp.com";
String uri = "esp.php";
boolean DEBUG = true;
void showResponse(int waitTime)
{
long t = millis();
char c;
while (t + waitTime > millis()) {
if (espSerial.available()) {
c = espSerial.read();
if (DEBUG)
Serial.print(c);
}
}
}
void setup()
{
DEBUG = true;
Serial.begin(115200);
delay(500);
espSerial.begin(115200);
espSerial.println("AT+RST");
showResponse(1000);
// espSerial.println("CIOBAUD=9600");
// showResponse(1000);
espSerial.println("AT+CWMODE=1");
showResponse(1000);
espSerial.println("AT+CWJAP=\"" + ssid + "\",\"" + password + "\"");
showResponse(5000);
if (DEBUG)
Serial.println("Setup completed");
}
void httppost()
{
espSerial.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");
if (espSerial.find("OK")) {
Serial.println("TCP connection ready");
}
delay(1000);
String postRequest =
"POST " + uri + " HTTP/1.0\r\n" +
"Host: " + server + "\r\n" +
"Accept: *" + "/" + "*\r\n" +
"Content-Length: " + data.length() + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
"\r\n" + data;
String sendCmd = "AT+CIPSEND=";
espSerial.print(sendCmd);
espSerial.println(postRequest.length());
delay(500);
if (espSerial.find(">")) {
Serial.println("Sending..");
espSerial.print(postRequest);
if (espSerial.find("SEND OK")) {
Serial.println("Packet sent");
while (espSerial.available()) {
String tmpResp = espSerial.readString();
Serial.println(tmpResp);
}
// close the connection
espSerial.println("AT+CIPCLOSE");
}
}
}
void loop()
{
// Read sensor values
DHT.read11(dht_dpin);
float t = DHT.temperature;
float h = DHT.humidity;
if (isnan(t) || isnan(h)) {
if (DEBUG)
Serial.println("Failed to read from DHT");
}
else {
if (DEBUG)
Serial.println("Temp=" + String(t) + " *C");
if (DEBUG)
Serial.println("Humidity=" + String(h) + " %");
data = "temperature=" + String(t) + "&humidity=" + String(h);
httppost();
}
delay(1000);
}
This is my PHP code:
<?php
global $Temp;
global $Humidity;
if(isset($_POST['temperature'])){
$Temp=$_POST["temperature"];
}
if(isset($_POST['humidity'])){
$Humidity=$_POST["humidity"];
}
$Write="<p>Temperature : " .$Temp . " Celcius </p>" . "<p>Humidity : " . $Humidity . " % </p>";
file_put_contents('sensor.html',$Write);
?>
the serial monitor says bad request
... the code that you posted does not contain the textbad request
... the message does not come from the code that you posteduri
should start with /.