2021年4月17日土曜日

Raspberry Pi ZeroとCDSとMCP3425で、明るさを返すREST APIを作成する

Raspberry Pi ZeroとCDSとMCP3425で、明るさを返すREST APIを作成するには、以下の手順を実行します。

※Raspberry Pi ZeroとCDSとMCP3425の接続は以下の記事を参照してください。
Raspberry Pi ZeroとCDSとMCP3425で明るさを測る
https://serverarekore.blogspot.com/2021/04/raspberry-pi-zerocdsmcp3425.html

開発手順

1. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. smbusモジュールとflaskがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、smbusとflask用の仮想環境を作成します。
mkdir -p ~/smbus_flask_mcp3425

cd ~/smbus_flask_mcp3425

pipenv --python 3

pipenv install flask smbus

pipenv shell

3. Flask REST APIアプリケーションの作成
/lightnessにアクセスされたとき、明るさを取得してJSONで返すコードを実装します。

app.py
from flask import Flask, jsonify, request
import smbus
import time

i2c = smbus.SMBus(1)
addr_mcp3425=0x68

FIELD_PGA_GAIN_1X = 0x00 # gain 1X
FIELD_SAMPLE_RATE_15SPS_16BIT = 0x08 # 15SPS 16bit sampling
FIELD_CONV_MODE = 0x00 # one-shot
FIELD_READY = 0x80

def read_cds():
  i2c.write_byte(addr_mcp3425, FIELD_PGA_GAIN_1X | FIELD_SAMPLE_RATE_15SPS_16BIT | FIELD_CONV_MODE| FIELD_READY)
  time.sleep(0.15)
  dat = i2c.read_i2c_block_data(addr_mcp3425, 0x00, 3)
  val = (dat[0] << 8) | dat[1]
  return val

app = Flask(__name__)

@app.route('/lightness')
def get_lightness():
  val = read_cds()
  return jsonify({"lightness":val})

4. 実行
Flaskを実行するには、以下のコマンドを実行します。
export FLASK_APP=app.py

flask run -h 0.0.0.0

次に、ブラウザから以下のアドレスにアクセスして、明るさの情報をjsonで返すことを確認します。
http://<Raspberry Piのホスト名またはIPアドレス>:5000/lightness

0 件のコメント:

コメントを投稿