スクリーンショット_2019-03-01_1

Python-OBDを使ってバイクのデジタルメーターを作成

前回、上海の会社から円形ディスプレイを輸入した話 で取り寄せた円形ディスプレイを車体に組み込んでみました。

基本的に実装は変わっておらず、
PythonからEelライブラリ経由でChromeブラウザに表示させるWebアプリです。

ソース

main.py

import eel
import obd

obd.logger.setLevel(obd.logging.DEBUG) #Terminalにデバッグ情報を表示させる
connection = obd.OBD()

c_spd = obd.commands.SPEED
c_rpm = obd.commands.RPM

@eel.expose #Eel用
def python_function2():
    response_s = connection.query(c_spd) #速度
    response_r = connection.query(c_rpm) #回転数
    speed = response_s.value.magnitude #magnitudeで数値のみ返すようになります
    rpm = response_r.value.magnitude
    ind_values = {'speed': speed, 'rpm': rpm}
    return ind_values #車速と回転数をJSへ返します

eel.init("web")
eel.start("main.html")

main.html

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Eel</title>
<script type="text/javascript" src="assets/js/jquery-3.3.1.min.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>
	<div class="wrapper">
		<div class="tacho">
		    <span class="rpm_num">99999</span>
		</div>
		<div id="speed">
		    299
		</div>
	</div>
    <script type="text/javascript" src="/eel.js"></script>
    <script type="text/javascript">
	var val = 0;
	var speed = 0;

	async function run() {
		vals = await eel.python_function2()();

		speed = vals.speed;
		rpm = vals.rpm;

		$('#speed').text(speed);
		$('.rpm_num').text(rpm);
	}
	setInterval('run()',100);
	</script>
</body>
</html>

なお、macOS側でpython-OBDを使って開発しようとしましたが、なぜかmacでは"no connection"になってしまいました(デュアルブートUbuntuでも同じでした)。

追記:上記コード、めちゃくちゃアンチパターンですがもう修正はしません。最近はNode.jsとQt for embedded Linuxでメーターの開発を行っています。

いいなと思ったら応援しよう!