温湿度と大気圧をPCでグラフ表示

はじめに

  • Macに温湿度と気圧のデータを取り込んで、エクセルでグラフ表示しましたが、毎度エクセルを起動させてマクロボタンを押すのは面倒だと思いWebで表示させるようにしました。 -マイコンArduino開発環境を使用しています。サーバはWebサーバで、PHPJavaScriptを用いて構築しているため、MacでもWindowsでも動作します。マイコンからのデータをPHPサーバに取り込み、Web上でグラフとして表示できるようにしました

Web表示

  • 出来上がり

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <script src="http://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.3.0/Chart.min.js"></script>
      <script src="mychart.js"></script>

      <title>chart of results</title>
  </head>
  <body>
  <!--ここにグラフが挿入されます-->
  <div style="width: 100%; height: 100%;">
      <canvas id="myChart" style="width: 110%; height: auto;"></canvas>
  </div>
  </body>
  </html>
  • my chart.js
  // 2) CSVから2次元配列に変換
  function csv2Array(str) {
      var csvData = [];
      var lines = str.split("\n");
      for (var i = 0; i < lines.length; ++i) {
        var cells = lines[i].split(",");
        csvData.push(cells);
      }
      return csvData;
    }

    function drawBarChart(data) {
      // 3)chart.jsのdataset用の配列を用意
      var tmpLabels = [], tmpData1 = [], tmpData2 = [], tmpData3 = [], tmpData4 = [], tmpData5 = [];
      for (var row in data) {
        tmpLabels.push(data[row][0])
        tmpData4.push(data[row][2] - 1000 )
        tmpData3.push(data[row][3])
        tmpData1.push(data[row][4])
        tmpData2.push(data[row][5])
        tmpData5.push( -1 * data[row][6])

      };

      // 4)chart.jsで描画
      var ctx = document.getElementById("myChart").getContext("2d");
      var myChart = new Chart(ctx, {
        type: 'line',

        data: {
          labels: tmpLabels,
          datasets: [
              { label: "temp", data: tmpData1, fill: false, pointRadius: 0, borderWidth: 1.5, borderColor: "red" },
              { label: "humi", data: tmpData2, fill: false, pointRadius: 0, borderWidth: 1.5, borderColor: "blue" },
              { label: "volt", data: tmpData3, fill: false, pointRadius: 0, borderWidth: 1.0, borderColor: "green" },
              { label: "pres - 1000", data: tmpData4, fill: false, pointRadius: 0, borderWidth: 1.0, borderColor: "cyan" },
              { label: "abs(受信感度)", data: tmpData5, tension: 0.4,  fill: false, pointRadius: 0, borderWidth: 0.5, borderColor: "magenta" }
          ]
        },

        options: {
          title: {
              display: true,
              text: '温湿度と大気圧'
            },        
          scales: {
              yAxes: [
                  {
                      position: "left",        // 図の右側に配置
                      ticks: {           // Y軸目盛り        
                      min: -10,               // 最小値
                          max: 90,            // 最大値
                          stepSize: 5,        // 間隔
                          fontColor: "blue"   // 色
                      },
                      gridLines: {        // 水平補助線の定義
                          color: "rgba(0, 0, 255, 0.2)"
                      },
                      scaleLabel: {       // Y軸のラベル
                          display: true,
                          fontSize: 16,
                          fontColor: "blue",
                          labelString: " "
                      }
                  },
                  {
                      position: "right",      // 図の右側に配置
                      ticks: {                // Y軸目盛り        
                      min: -10,               // 最小値
                          max: 90,            // 最大値
                          stepSize: 5,        // 間隔
                          fontColor: "blue"   // 色
                      },
                      gridLines: {        // 水平補助線の定義
                          color: "rgba(0, 0, 255, 0.2)"
                      },
                      scaleLabel: {       // Y軸のラベル
                          display: true,
                          fontSize: 16,
                          fontColor: "blue",
                          labelString: " "
                      }
                  }            ],
              xAxes: [
                  {
                      gridLines: {        // 垂直補助線の定義
                          display: false     // 消す
                      }
                  }
              ]
          }
        }
      });
    }

    function main() {
      // 1) ajaxでCSVファイルをロード
      var req = new XMLHttpRequest();
      var filePath = './to/savedir/xiao.csv';
      req.open("GET", filePath, true);
      req.onload = function() {
        // 2) CSVデータ変換の呼び出し
        data = csv2Array(req.responseText);
        // 3) chart.jsデータ準備、4) chart.js描画の呼び出し
        drawBarChart(data);
      }
      req.send(null);
    }

    main();

最後に

ここまでご覧いただき、ありがとうございました。もし誤りがあれば、ご指摘いただけますと幸いです

プライバシーポリシー |ページトップへ

`