HTTP で LED を点消灯
Posted on Mon 18 March 2019 in misc
Shonan.pyもくもく会で書いたプログラムです。 Raspberry Pi にサーバを立てて、Web API 越しに LED を点消灯させます。動作するものは作れました。
サーバのコードです。Raspberry Pi に置きます。LED は GPIO 17 につなぎます。
PUT メソッドで、{サーバのIPアドレス}/led?status=on などとリクエストすると動きます。on / off 以外がリクエストされると 400 を返します。
#!/usr/bin/python3
import bottle
from bottle import HTTPResponse
import gpiozero as gpio
@bottle.put('/led')
def update_led_status():
status = bottle.request.params.status
if status == 'on':
led.on()
print('on')
return HTTPResponse(status=200, body=('LED: ' + status))
elif status == 'off':
led.off()
print('off')
return HTTPResponse(status=200, body=('LED: ' + status))
else:
print('Unknown status')
return HTTPResponse(status=400, body='LED: Unkown status')
if __name__ == '__main__':
led = gpio.LED(17)
bottle.run(host='raspberrypi.local', port=8000)
そしてクライアントのコード。PC に置いてコマンドラインで実行します。引数で on / off を指定します。
#!/usr/bin/python3
import argparse
import sys
import requests
def main():
parser = argparse.ArgumentParser(description='')
parser.add_argument('status', type=str, help='led status')
args = parser.parse_args()
response = requests.put('http://raspberrypi.local:8000/led',
params={'status': args.status})
print(response.status_code, response.text)
if __name__ == '__main__':
main()
いろいろ不足なところはあるでしょうけど、とりあえず動きます。
相変わらず docstring が全然書いてない。