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でメーターの開発を行っています。