先日までは『RPi.GPIO』を使って動かしていましたが、動きに違和感を感じていました。調べてみると、pigpioライブラリの方が高精度だそうなので載せ替える事にしました。
以前までのコードは以下の記事を参照してください。
早速コードを。
#!/usr/bin/env python3
from flask import Flask, render_template, request
import pigpio
import time
pig = pigpio.pi()
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
target = request.form['GPIO18']
pig.set_servo_pulsewidth(18, int(target))
return render_template('index.html', target=target)
else:
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
<DOCTYPE html>
<html>
<head>
<title>controller</title>
<meta name="viewport" content="width=240">
</head>
<body>
<form method="POST">
<!-- 変数targetに値があるとき -->
{% if target %}
<input type="range" name="GPIO18" min="500" max="2400" value="{{ target }}" onchange="submit(this.form)">
{% else %}
<input type="range" name="GPIO18" min="500" max="2400" value="1450" onchange="submit(this.form)">
{% endif %}
<!--
<input type="submit" value="送信">
-->
</form>
</body>
</html>
変更点の大きなポイントは、パルス幅をスライドバーのmin/maxに割り当ててそのまま送信していること。
あとは本題からそれるけど、ファイルを介した制御をやめて、Flaskで受け取ったPOSTデータをもとにそのままGPIOを制御しているところ。
元々動作が不安定だったから繰り返し構文の中でゆっくり動かしていたのだけど、pigpioだと投げっぱなしで終わってしまっても問題が起きないので、中間ファイルを廃止しました。結果的にコードがスッキリしました。