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 が全然書いてない。