- 文/曹永忠
本篇是「物聯網開發系列」系列中的第七篇:視覺化資料呈現(Google Chart篇),主要告訴讀者,如何利用Google Chart雲端服務,使用視覺化方式即時顯示單筆資訊。前文在此:1、2、3、4、5、6。
之前的文章:【物聯網開發系列】雲端主機資料表建置與權限設定篇、【物聯網開發系列】感測裝置上傳雲端主機篇,作者使用 DHT22 溫濕度感測器,配合Wifi開發版,將溫濕度資料上傳到雲端資料庫,如下圖所示:
可以參考筆者:【物聯網開發系列】溫溼度裝置連線篇:傳送溫溼度資料到雲端,如下圖所示:我們可以看到透過網頁瀏覽器工具,可以呈現條列式資訊:
本文中,作者將應用 Google 雲端資源:Chart Gallery 的雲端服務功能,介紹 google GUAGE 來呈現溫濕度資源。
Chart Gallery 網址:https://developers.google.com/chart/interactive/docs/gallery?hl=zh-TW
Chart Gallery 介紹
我們進到 Google 雲端資源:Chart Gallery 的雲端服務功能中,我們可以看到下圖:Google Developer Chart 雲端服務功能。
Visualization: Gauge 介紹
我們進到Google 雲端資源:Chart Gallery 之 Gauge,網址:https://developers.google.com/chart/interactive/docs/gallery/gauge 的雲端服務功能中,我們可以看到下圖:Visualization: Gauge 雲端服務功能。
如下表所示,我們先看看原來 HTML 程式碼,這樣的程式碼可以轉化成下圖所示之視覺化元件:Gauge。
單一元件之視覺化 Gauge 之 HTML 程式碼
<html>
<head>
<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’],
[‘Memory’, 80],
[‘CPU’, 55],
[‘Network’, 68]
]);var options = {
width: 400, height: 120,
redFrom: 90, redTo: 100,
yellowFrom:75, yellowTo: 90,
minorTicks: 5
};var chart = new google.visualization.Gauge(document.getElementById(‘chart_div’));
chart.draw(data, options);
setInterval(function() {
data.setValue(0, 1, 40 + Math.round(60 * Math.random()));
chart.draw(data, options);
}, 13000);
setInterval(function() {
data.setValue(1, 1, 40 + Math.round(60 * Math.random()));
chart.draw(data, options);
}, 5000);
setInterval(function() {
data.setValue(2, 1, 60 + Math.round(20 * Math.random()));
chart.draw(data, options);
}, 26000);
}
</script>
</head>
<body>
<div id=”chart_div” style=”width: 400px; height: 120px;”></div>
</body>
</html>
- 程式下載:https://developers.google.com/chart/interactive/docs/gallery/gauge(Developers, 2016)
由上表之 HTML 程式碼,透過網站與瀏覽器轉譯之後,如下圖所示,我們可以看到視覺化 Gauge 之 HTML 程式碼之網頁畫面。
逐一解說 HTML 碼
如下表所示,載入 Google Chart 資源。
<html>
<head>
<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’],
[‘Memory’, 80],
[‘CPU’, 55],
[‘Network’, 68]
]);
如下表所示,載入 Chart 繪圖參數。參數資料定義如下:
- width、height 為 每一個 Chart 的寬與高
- redFrom:紅色區域開始,redTo:紅色區域結束
- yellowFrom:黃色區域開始,yellowTo:黃色區域結束
- minorTicks:5 最小刻度
var options = {
width: 400, height: 120,
redFrom: 90,redTo: 100,
yellowFrom:75, yellowTo: 90,
minorTicks: 5
};
如下表所示,繪出視覺化儀表板。指令如下:
- var chart = new google.visualization.Gauge(document.getElementById(‘chart_div’))→產生儀表板
- draw(data, options)→畫出儀表板
var chart = new
google.visualization.Gauge(document.getElementById(‘chart_div’));
chart.draw(data, options);
如下表所示,在網頁上繪出圖型。指令如下:
- <div id=”chart_div” style=”width: 400px; height: 120px;”></div>→產生叫” chart_div”的 繪圖空間
- width: 400px 繪圖空間寬度
- height: 120px繪圖空間高度
<body>
<div id=”chart_div” style=”width: 400px; height: 120px;”></div>
</body>
建立 php 程式碼
如下表所示,我們將抓詢資料的程式,與 Guage 的 HTML 進行整合,產生下列程式碼:
<?php require_once(‘../Connections/iotcnn.php’);
$link=Connection(); //產生mySQL 連線物件
$str1 = “select * from dhttbl order by sysdatetime desc limit 0,1″;
//組成新增到dhtdata資料表的 SQL 語法//echo $query ;
$result1=mysql_query($str1,$link);
?><html>
<head>
<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’],
<?php
if($result1 !==FALSE){
while($row = mysql_fetch_array($result1)) {
printf(” [‘溫度’, %f],[‘濕度’, %f]]);”,
$row[“temperature”], $row[“humidity”]);
}
mysql_free_result($result1);
}
?>var options = {
width: 500, height: 500,
redFrom: 35, redTo: 100,
yellowFrom:28, yellowTo: 35,
minorTicks: 10
};var chart = new google.visualization.Gauge(document.getElementById(‘chart_div’));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id=”chart_div” style=”width: 400px; height: 120px;”></div>
</body>
</html>
將這支程式,命名『dht_guage.php』,上傳到網頁中間之/dht22/目錄下,開啟瀏覽器之後,我們在網址列,輸入『http://192.168.88.88:8888/dht22/dht_guage.php』(本雲端主機『http://192.168.88.88:8888/』),我們可以看到下圖:
到此,我們已經完成介紹 Google Chart 雲端服務的介紹,相信上述一步一步的設定步驟,讀者可以開始使用 Google Chart 雲端服務。
至於其他第三方軟體的 Chart 雲端服務也都是大同小異, 相信讀者可以融會貫通。
後續
本篇是「物聯網開發系列」系列中的第七篇:視覺化資料呈現(Google Chart篇),主要告訴讀者,如何利用 Google Chart 雲端服務,使用視覺化方式即時顯示單筆資訊,下篇將介紹使用多筆資料之視覺化圖示顯示連續資料的方式逐一著墨,請讀者拭目以待。
後續筆者還會繼續發表「物聯網開發」系列的文章,在未來我們可以創造出更優質,更具未來性的物聯網 (Internet of Thing:IOT) 產品開發相關技術。
敬請期待更多的文章。
作者介紹
曹永忠 (Yung-Chung Tsao):目前為自由作家,專注於軟體工程、軟體開發與設計、物件導向程式設計、物聯網系統開發、Arduino 開發、嵌入式系統開發,商品攝影及人像攝影。長期投入資訊系統設計與開發、企業應用系統開發、軟體工程、物聯網系統開發、軟硬體技術整合等領域,並持續發表作品及相關專業著作。
Email:prgbruce@gmail.com/Line ID:dr.brucetsao/作者網頁/臉書社群(Arduino.Taiwan)/Github 網站/Youtub
參考文獻
- Developers, G. (2016, 2017/1/1). Visualization: Gauge. Retrieved from https://developers.google.com/chart/interactive/docs/gallery/gauge
- 曹永忠. (2016). 智慧家庭:如何安裝各類感測器的函式庫. 智慧家庭. Retrieved from https://vmaker.tw/archives/3730
- 曹永忠. (2017a). 【Tutorial】溫濕度感測模組與大型顯示裝置的整合應用. Retrieved from https://makerpro.cc/2017/11/integration-of-temperature-and-humidity-sensing-module-and-large-display/
- 曹永忠. (2017b). 如何使用Linkit 7697建立智慧溫度監控平台(上). Retrieved from http://makerpro.cc/2017/07/make-a-smart-temperature-monitor-platform-by-linkit7697-part-one/
- 曹永忠. (2017c). 如何使用LinkIt 7697建立智慧溫度監控平台(下). Retrieved from http://makerpro.cc/2017/08/make-a-smart-temperature-monitor-platform-by-linkit7697-part-two/
- 曹永忠. (2018a). 【物聯網開發系列】雲端主機資料表建置與權限設定篇. 智慧家庭. Retrieved from https://vmaker.tw/archives/29281
- 曹永忠. (2018b). 【物聯網開發系列】感測裝置上傳雲端主機篇. 智慧家庭. Retrieved from https://vmaker.tw/archives/29327
- 曹永忠. (2018c). 語音連接技巧大探索-語音播放溫溼度感測資料設計實務. Circuit Cellar嵌入式科技(國際中文版 NO.9), 90-103.
- 曹永忠, 許智誠, & 蔡英德. (2015a). Maker物聯網實作:用DHx溫濕度感測模組回傳天氣溫溼度. 物聯網. Retrieved from http://www.techbang.com/posts/26208-the-internet-of-things-daily-life-how-to-know-the-temperature-and-humidity
- 曹永忠, 許智誠, & 蔡英德. (2015b). 『物聯網』的生活應用實作:用DS18B20溫度感測器偵測天氣溫度. Retrieved from http://www.techbang.com/posts/26208-the-internet-of-things-daily-life-how-to-know-the-temperature-and-humidity
- 曹永忠, 許智誠, & 蔡英德. (2017a). 【物聯網開發系列】溫溼度裝置連線篇:傳送溫溼度資料到雲端. 智慧家庭. Retrieved from https://vmaker.tw/archives/25613
- 曹永忠, 許智誠, & 蔡英德. (2017b). 【物聯網開發系列】溫溼度裝置開發篇:讀取溫溼度資料. 智慧家庭. Retrieved from https://vmaker.tw/archives/25153