как заставить работать датчики google с базой данных mysql с сервера лампы pi3 - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю с ламповым сервером Raspberry Pi3 для отображения данных от двух датчиков температуры AM2302

Я следую учебному пособию для отображения данных в формате датчика, вот ссылка на видео https://www.youtube.com/watch?v=WyUM--RGLH0 (по-испански, я думаю, что специалист по этому материалу без проблем преуменьшит видео. Но я не слишком разбираюсь в этом, я любитель и действительно зациклен на кодировании.

Я использую два файла PHP, один для чтения данных и отображения в формате JSON, а другой - для отображения в датчиках. Сейчас я могу читать данные, но датчики не работают. Они остаютсяв ноль введите описание изображения здесь

Я думаю, это то, как данные json показывают это: мой результат:

{"temperature":"27.8","humidity":"61.2"}

, но в учебнике формат результата

[{"temperature":"27.8","humidity":"61.2"}]

Я предполагаю, что мой JSON не отображает квадратные скобки, как показано на видео: 1:07 мин от видео

вот мой файл index.php

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Medidor Temperatura, Humedad</title>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"> 
</script>

<script type="text/javascript" 
src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
  google.charts.load('current', {'packages':['gauge']});
  google.charts.setOnLoadCallback(drawChart);
  function drawChart() {

    var data = google.visualization.arrayToDataTable([
      ['Label', 'Value'],
      ['humidity', 0],
      ['temperature', 0]
    ]);

    var options = {
      width: 400, height: 400,
      redFrom: 90, redTo: 100,
      yellowFrom:75, yellowTo: 90,
      minorTicks: 5
    };

    var chart = new 
google.visualization.Gauge(document.getElementById("Medidores"));

    chart.draw(data, options);

    setInterval(function() {
        var JSON=$.ajax({
            url:"http:192.168.0.115/sensores.php",
dataType: 'json',
            async: false}).responseText;
        var Respuesta=jQuery.parseJSON(JSON);

      data.setValue(0, 1,Respuesta[0].humidity);
      data.setValue(1, 1,Respuesta[0].temperature);
      chart.draw(data, options);
    }, 1300);

  }
</script>
</head>
<body>
   <div id="Medidores" ></div>

вот файл, который читает данные, называется: sensores.php (тот, который собирает данные от датчиков).

<?php
// Settings
// host, user and password settings
$host = "localhost";
$user = "logger";
$password = "123456";
$database = "temperatures";

//how many hours backwards do you want results to be shown in web page.
$hours = 24;

// make connection to database
$connectdb = mysqli_connect($host,$user,$password)
or die ("Cannot reach database");

// select db
mysqli_select_db($connectdb,$database)
or die ("Cannot select database");

// sql command that selects all entires from current time and X hours backward
$sql="SELECT temperature, humidity FROM temperaturedata where sensor = 'Exterior' and dateandtime >= (NOW() - INTERVAL $hours HOUR) order by dateandtime desc LIMIT 1";

// set query to variable
$temperatures = mysqli_query($connectdb,$sql);

// create content to web page
?>

<?php
// loop all the results that were read from database and "draw" to web page

while($temperature=mysqli_fetch_assoc($temperatures))

$json=json_encode($temperature);
echo $json;

?>

Я хочу отобразить данные от двух датчиков в index.phpфайл но я даже с одним буду чувствовать себя нормально

1 Ответ

0 голосов
/ 13 февраля 2019

В цикле while создайте массив, с помощью которого индикаторы [] означают средний массив JSON.

Это имеет смысл также потому, что в любом случае вы можете получить более одного результата из запроса.

$temps = [];
while($temperature = mysqli_fetch_assoc($temperatures)) {
    $temps[] = $temperature;
}

echo json_encode($temps);;
...