連載
温度測定を題材にラズパイIoTシステムの「収集」「蓄積」「活用」を理解する:ラズパイで製造業のお手軽IoT活用(2)(4/4 ページ)
小型ボードコンピュータ「Raspberry Pi(ラズパイ)」を使って低コストかつ現場レベルで導入できる手法について解説する本連載。第2回は、温度測定ツールを題材に、データの「収集」から「蓄積」、「活用(可視化)」までを行う流れについて具体的に解説します。
※本記事はアフィリエイトプログラムによる収益を得ています
記事に使用したサンプルソースのテキスト
import glob
import time
import subprocess
import sqlite3
import threading
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
db_file = '/home/pi/MTS/temperature.sqlite3'
def read_temp_raw():
catdata = subprocess.Popen(['cat',device_file], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
out, err = catdata.communicate()
out_decode = out.decode('utf-8')
lines = out_decode.split('\n')
return lines
def read_temp():
lines = read_temp_raw()
if lines[0].strip()[-3:] != 'YES':
return False
equals_pos = lines[1].find('t=')
temp_string = lines[1][equals_pos + 2:]
temp_c = float(temp_string) / 1000.0
return temp_c
def save_temp():
try:
connection = sqlite3.connect(db_file)
cursor = connection.cursor()
temp = read_temp()
if temp:
cursor.execute("INSERT INTO DATE_TEMPERATURE VALUES (strftime('%Y/%m/%d', date('now', 'localtime')), strftime('%H:%M:%S',time('now', 'localtime')), ?);", (temp,))
connection.commit()
except:
connection.rollback()
finally:
connection.close()
while True:
th = threading.Thread(target=save_temp)
th.start()
time.sleep(3)
リスト1 「mt.py」のサンプルソースコード
<?php
$dataNum = 180;
$check = false;
while ($check == false) {
try {
$db = new SQLite3("/home/pi/MTS/temperature.sqlite3", SQLITE3_OPEN_READONLY);
$date = date("Y/m/d");
$sql = "select * from DATE_TEMPERATURE where DATE = '" . $date . "' order by TIME desc limit " . $dataNum . ";";
$res = $db->query($sql);
$i = 0;
while ($t = $res->fetchArray(SQLITE3_NUM)) {
$b[$i] = $t;
$i += 1;
}
for ($k = 0; $k < $dataNum - $i; $k++) {
$a[$k][0] = $a[$k][1] = "";
$a[$k][2] = "null";
}
for ($k = 0; $k < $i; $k++) {
$a[$dataNum - $i + $k] = $b[$i - $k - 1];
}
$check = true;
} catch (Exception $e) {
$i = 0;
$check = false;
usleep(10000);
} finally {
$db->close();
$db = null;
}
}
$str = "[";
for ($k = 0; $k < $dataNum; $k++) {
$str .= "'" . $a[$k][1] . "'," . $a[$k][2] . ",";
}
$str .= "]";
echo $str;
?>
リスト2 「jsonTemps.php」のサンプルソースコード
<script>
var today = new Date();
var date = '' + today.getFullYear() + ('00' + (today.getMonth() + 1)).substr(-2) + ('00' + today.getDate()).substr(-2);
var xhr
var xhr2;
var times = new Array();
var temps = new Array();
var ctx;
var chart;
var color;
onload = function(){
ctx = document.getElementById('temp').getContext('2d');
updateGraph();
setInterval(updateGraph, 1000);
}
function updateGraph(){
xhr = new XMLHttpRequest();
xhr.onreadystatechange = myupdate;
xhr.open("GET", "jsonTemps.php?date=" + date);
xhr.send(null);
}
function myupdate(){
if (xhr.readyState == 4 && xhr.status == 200) {
list = eval('(' + xhr.responseText + ')');
for (var i = 0; i < list.length / 2; i++) {
times[i] = list[2 * i];
temps[i] = list[2 * i + 1];
}
drawChart();
}
}
function startMt(){
xhr2 = new XMLHttpRequest();
xhr2.open("GET", "startMt.php");
xhr2.send(null);
}
function stopMt(){
xhr2 = new XMLHttpRequest();
xhr2.open("GET", "stopMt.php");
xhr2.send(null);
}
</script>
<script>
function drawChart() {
if (typeof chart != 'undefined') chart.destroy();
color = "rgb(100, 200, 200)";
chart = new Chart(ctx, {
type: "line",
data: {
labels: times,
datasets: [{
label: "温度",
lineTension: 0,
fill: false,
backgroundColor: color,
borderColor: color,
data: temps,
}]
},
options: {
responsive: false,
animation: false,
scales: {
xAxes: [{
scaleLabel: {
display: true,
labelString: date
}
}],
yAxes: [{
scaleLabel: {
display: true,
labelString: "温度(℃)"
},
ticks: {
min: -20,
max: 120
}
}]
}
}
});
}
</script>
リスト3 「latest.html」のサンプルソースコード
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「ラズパイで製造業のお手軽IoT活用」バックナンバー
- ≫連載「品質保証の本質とIoTの融合」バックナンバー
- ≫連載「いまさら聞けないISO22400入門」バックナンバー
- ≫連載「鈴村道場」バックナンバー
- ≫連載「トヨタ生産方式で考えるIoT活用【実践編】」バックナンバー
- ≫連載「トヨタ生産方式で考えるIoT活用」バックナンバー
ラズパイで設備稼働情報を「見える化」するための5ステップ
生産現場が特に効率化したいテーマを中心に、小型ボードコンピュータ「Raspberry Pi(ラズパイ)」を使った、低コストかつ現場レベルで導入できる手法について解説する本連載。第1回は、設備稼働情報を収集、蓄積、可視化して現場の改善につなげる、いわゆる「見える化」の方法を紹介します。
なぜIoTなのか、トヨタ生産方式の課題から考える
日本型モノづくりの象徴ともいうべき「トヨタ生産方式」。日本的な“人の力”に頼った手法に見られがちですが、実はトヨタ生産方式にもIoT(Internet of Things、モノのインターネット)は適用可能です。本連載では多くの製造業が取り入れるトヨタ生産方式の利点を生かしつつ、IoTを活用してモノづくりを強化するポイントについて解説します。
生産情報管理のIoT活用はどのように実践すべきか
日本型モノづくりの象徴ともいうべき「トヨタ生産方式」の利点を生かしたIoT活用について、実践編として、より具体的な「導入のポイント」や「活用する手段」を説明する本連載。第1回は、生産情報管理におけるIoT活用について解説します。
日本製造業の品質保証が抱える問題、解決の方向性を示す
2017年後半から検査不正問題や製造不良による事故の発生が相次ぎ、高品質をウリとする日本製造業ブランドを揺るがしかねない状況です。そこで本連載では、これまで日本製造業では品質保証をどう行ってきたのか、品質保証における問題は何かといった点に注目し、問題解決の方策について各種手法や最新技術の活用、組織マネジメント論の面から取り上げます。