Skocz do zawartości

Wysyłanie danych na serwer za pomocą metody POST


Pawelitto

Pomocna odpowiedź

 

Siema, mój pierwszy post.

Mam problem, ponieważ moje NodeMcuEsp8266 nie wysyła danych na serwer najprawdopodobniej to 23 linijka const char* serverName ale nie jestem pewien. Dorzucam jeszcze 2 skrypty PHP i styl(CSS).

Taki błąd mi się pokazuje w Arduino(Na porcie szeregowym) "HTTP Response code: 200"

#ifdef ESP32
  #include <WiFi.h>
  #include <HTTPClient.h>
#else
  #include <ESP8266WiFi.h>
  #include <ESP8266HTTPClient.h>
  #include <WiFiClient.h>
  #include "DHTesp.h"
#endif

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define DHT11_PIN 2


DHTesp dht;

const char* ssid     = "mojaNazwaSieci";
const char* password = "hasłoSieci";

const char* serverName = "http://arduinobazydanych.usite.pl/post-esp-data.php";

String apiKeyValue = "mojeApi";

String sensorName = "DHT11";
String sensorLocation = "Pokój";

void setup() {
  Serial.begin(115200);
  dht.setup(2, DHTesp::DHT11); 
  
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());

}

void loop() {
  
  if(WiFi.status()== WL_CONNECTED){
    HTTPClient http;

    int gleba = analogRead(A0);
    gleba = map(gleba, 0, 1023, 100, 0);
    
    http.begin(serverName);
    
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    
    String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName
                          + "&location=" + sensorLocation + "&value1=" + String(dht.getTemperature())
                          + "&value2=" + String(dht.getHumidity()) + "&value3=" + String(gleba) + "";
    Serial.print("httpRequestData: ");
    Serial.println(httpRequestData);
    
    int httpResponseCode = http.POST(httpRequestData);
        
    if (httpResponseCode>0) {
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
    }
    else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
    
    http.end();
  }
  else {
    Serial.println("WiFi Disconnected");
  }
  
  delay(15000);  
}
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="refresh" content="5" >
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="style.css" media="screen"/>

	<title> Dane czujników </title>

</head>

<body>

    <h1>Dane czujników</h1>
<?php
$servername = "localhost";
$username = "mojanazwa";
$password = "hasełko";
$dbname = "nazwamojejbazydanych";

// Create connection
//$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM sensordata ORDER BY id DESC"; /*select items to display from the sensordata table in the data base*/

echo '<table cellspacing="5" cellpadding="5">
      <tr> 
        <th>ID</th> 
        <th>Data $ Czas</th> 
        <th>Czujnik</thh> 
        <th>Położenie</th> 
        <th>Temperatura &deg;C</th> 
        <th>Zawilgocenie(powietrza) &#37;</th>
        <th>Zawilgocenie(gleby)&#37;</th>       
      </tr>';
 
if ($result = $conn->query($sql)) {
    while ($row = $result->fetch_assoc()) {
        $row_id = $row["id"];
        $row_reading_time = $row["reading_time"];
        $row_sensor = $row["sensor"];
        $row_location = $row["location"];
        $row_value1 = $row["value1"];
        $row_value2 = $row["value2"]; 
        $row_value3 = $row["value3"]; 
        
        // Uncomment to set timezone to - 1 hour (you can change 1 to any number)
       // $row_reading_time = date("Y-m-d H:i:s", strtotime("$row_reading_time - 1 hours"));
      
        // Uncomment to set timezone to + 4 hours (you can change 4 to any number)
        //$row_reading_time = date("Y-m-d H:i:s", strtotime("$row_reading_time + 4 hours"));
      
        echo '<tr> 
                <td>' . $row_id . '</td> 
                <td>' . $row_reading_time . '</td> 
                <td>' . $row_sensor . '</td> 
                <td>' . $row_location . '</td> 
                <td>' . $row_value1 . '</td> 
                <td>' . $row_value2 . '</td>
                <td>' . $row_value3 . '</td> 
                
              </tr>';
    }
    $result->free();
}

$conn->close();
?> 
</table>

</body>
</html>

	</body>
</html>
<?php
$servername = "localhost"; 
$username = "mojanazwa"; 
$password = "hasełko"; 
$dbname = "nazwamojejbazydanych";

$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);

$api_key_value = "api";

$api_key= $sensor = $location = $value1 = $value2 = $value3 = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $api_key = test_input($_POST["api_key"]);
    if($api_key == $api_key_value) {
        $sensor = test_input($_POST["sensor"]);
        $location = test_input($_POST["location"]);
        $value1 = test_input($_POST["value1"]);
        $value2 = test_input($_POST["value2"]);
        $value3 = test_input($_POST["value3"]);
        
        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        } 
        
        $sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3)
        VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
        
        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        } 
        else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    
        $conn->close();
    }
    else {
        echo "Wrong API Key provided.";
    }

}
else {
    echo "No data posted with HTTP POST.";
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

 


body {
    background: #f5efe0;
    box-sizing: border-box;
    color: #000;
    font-size: 1.8rem;
    letter-spacing: -0.015em;
    text-align: center;
}
table {
margin-left: auto;
margin-right: auto;
width: 80%;
}

th {
font-family: Arial, Helvetica, sans-serif;
font-size: 20px;
background: #666;
color: #FFF;
padding: 2px 6px;
border-collapse: separate;
border: 1px solid #000;
}

td {
font-family: Arial, Helvetica, sans-serif;
font-size: 15px;
text-align: center;
border: 1px solid #DDD;
}

Z góry dziękuje za rady 😉

Link do komentarza
Share on other sites

11 godzin temu, Pawelitto napisał:

Taki błąd mi się pokazuje w Arduino(Na porcie szeregowym) "HTTP Response code: 200"

Jaki znowu błąd? Przecież kod 200 oznacza "nie ma błędu"... może zamiast wypisywać numerki zrozumiałe dla przeglądarek wypisałbyś na serialu to co zwraca serwer? Na przykład używając http.getString()...

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.