Получать доступ к массиву Json из HTTP. Получать запрос и обновлять страницу каждые 1 с, используя AJAX или JQUERY. - PullRequest
1 голос
/ 29 апреля 2020

Итак, я работаю над проектом, который включает в себя передачу данных с моего сайта в ESP32. Я сталкивался с созданием массива Json и периодически обновлял информацию, но теперь мне нужно получить специфическую c информацию из моего массива Json, чтобы я мог использовать ее с моим ESP. По какой-то причине, когда я пытаюсь получить доступ к данным со своей страницы, я получаю 0 вместо числа, которое находится в этом месте, в случае текста я ничего не получаю в качестве ответа.

Я исправил отсутствие получения ответа от файла, мне пришлось создать отдельный файл PHP, в котором получить информацию о базе данных и преобразовать эту информацию в файл данных json. json, поэтому код, который у меня работает, но мне нужно будет обновлять файл PHP каждую 1 секунду, я увидел, что Ajax - это путь к go, так как мне не нужно каждый раз обновлять sh страницу, только содержимое

код ESP32:

void loop() {

if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status

HTTPClient http;

http.begin("https://nps-tech.com.br/receive.php"); //Specify the URL and certificate
int httpCode = http.GET();                                                 

if (httpCode > 0)//Check for the returning code 
{ 
    String payload = http.getString();
    Serial.println("\nStatuscode: "+ String(httpCode));
    Serial.println(payload);

    char json[500];
    payload.replace(" ", "");
    payload.replace("\n", "");
    payload.trim();
    payload.remove(0,1);
    payload.toCharArray(json, 500);

    StaticJsonDocument<200> doc;
    deserializeJson(doc, json);

    int id = doc["AutoIncrement"];
    const char* nome = doc["Nome Aparelho"];
    int stat = doc["Status"];

    Serial.println(id);
    Serial.println(nome);
    Serial.println(stat);
}
else 
{
  Serial.println("Error on HTTP request");
}

http.end(); //Free the resources
}

delay(10000);
}

Новый ответ от ESP32:

Statuscode: 200
[{"AutoIncrement":"1","Aparelho":"LED","Status":"0"}]
1
LED
0

PHP Код. Как установить SetInterval для обновления функции get_data с php каждую 1 секунду, без перезагрузки страницы:

<!DOCTYPE html>
<html lang="pt-br">
<head>
</head>
<body>
<?php
    function get_data()
    {
        $servername = "stuuf";
        $dBUsername = "stuuf";
        $dBPassword = "stuuf";
        $dBname = "stuuf";

        $conn = mysqli_connect($servername, $dBUsername, $dBPassword, $dBname);

        if ($conn->connect_error){
        die ("Connection failed". $conn->connect_error);
        }

        $sql = "SELECT * FROM dados;";
        $result = mysqli_query($conn, $sql);
        $json_array = array();
        while($row = mysqli_fetch_assoc($result))
        {
            $json_array[] = array(
                'AutoIncrement'         =>       $row["AutoIncrement"],
                'Aparelho'         =>       $row["aparelho"],
                'Status'         =>       $row["Status"],
            );
        }
        return json_encode($json_array);
    }
    $file_name = 'dadosjson' . '.json';

    if (file_put_contents($file_name, get_data()))
    {
        echo $file_name. ' file created';
    }
    else 
    {
        echo 'There is some error';
    }
?>
<script>
    setInterval(1000);
//ajax to update every 1s
</script>

...