使用javascript和chart.js在

时间:2019-07-12 19:11:36

标签: javascript json chart.js

我目前无法同时显示两个图表。数据

我编写的代码可确保一次通过websocket发送传感器数据,即,一个传感器读数通过websocket发送,然后绘制图形,然后再将另一个传感器读数通过websocket发送并绘制图形。但是我的问题是,由于它们一次发送一次,所以两个读数都设置为一个变量,然后对该单个变量进行绘图。

由于我是JavaScript的新手,并且使用chart.js,所以我完全不知道如何解决此问题。

基本上,我想通过websocket发送两个传感器值,为每个传感器创建一个变量,然后在单个图表上绘制两个值。

因此,首先,下面的代码的第一段确保两个传感器值分别通过websocket发送:

void getData(){

  //Grabs data from sensor and formats it to json string
  String json;
  if(count%2==0)
  {
    Serial.println("Yes");
    json += "{\"value\":";
    json += Thermocouple->readCelsius();
    json += "}"; 
    count++;
  }
  else
  {
    Serial.println("No");
    json += "{\"value\":";
    json += thermocouple.readCelsius();
    json += "}"; 
    count++;
  }
    webSocket.broadcastTXT(json.c_str(), json.length());
  }

在此之后,将解析JSON字符串:

webSocket.onmessage = function(event)
{
      var data = JSON.parse(event.data);
      var today = new Date();
      var t = today.getHours()+ ":" + today.getMinutes() + ":" + ...
      addData(t, data.value)
 }

addData函数:

function addData(label, data)
 {
    dataPlot.data.labels.push(label);
    dataPlot.data.datasets[0].data.push(data);
    dataPlot.update();

  }

图表功能

function init(){
    webSocket = new WebSocket('ws://' + window.location.hostname + ':81/');
    dataPlot = new Chart(document.getElementById("line-chart"),{
      type: 'line',
      data: {
        datasets: [{
          data: [],
          label: "Thermocouple 1",
          borderColor: "#3e95cd",
          fill: true

          },
       {
          data: [],
          label: "Thermocouple 2",
          borderColor: "  #FF0000",
          fill: true

          }]
        }
      });

正如我说的那样,我对这一切都很陌生,所以请大方:D

基本上,我想通过websocket发送两个传感器值,为每个传感器创建一个变量,然后在单个图表上绘制两个值。

目前,以上代码的结果是两个传感器值都绘制在一条线上,在两个传感器值之间交替显示。

1 个答案:

答案 0 :(得分:0)

我设法使代码正常工作。首先通过网络套接字发送传感器值:

 String json = "{\"value\":";
  json +=  Thermocouple->readCelsius();
  json += ",";
  json += "\"value2\":";
  json += double(thermocouple.readCelsius());
  json += "}"; 

  webSocket.broadcastTXT(json.c_str(), json.length());

然后解析json字符串并“提取”值:

webSocket.onmessage = function(event){
      var data = JSON.parse(event.data);
      console.log(data.value);
      console.log(data.value2);
      var today = new Date();
      var t = today.getHours()+ ":" + today.getMinutes() + ":" + today.getSeconds();
      addData(t, data.value, data.value2)
    }

我将这些值记录到控制台中只是为了确保正确解析了这些值。最后将数据添加到图中:

function addData(label, data, data2){

    if(dataPlot.data.labels.length > maxDataPoints)removeData();
    dataPlot.data.labels.push(label);//x-values
    dataPlot.data.datasets[0].data.push(data);
    dataPlot.data.datasets[1].data.push(data2);

    dataPlot.update();

  }