2021年3月20日土曜日

Raspberry Pi ZeroとBME680センサーで、温度・気圧・湿度・ガスの情報を返すREST APIを作成する

Raspberry Pi ZeroとBME680センサーで、温度・気圧・湿度・ガスの情報を返すREST APIを作成するには、以下の手順を実行します。

※Raspberry Pi ZeroとBME680の接続は「Raspberry Pi ZeroにBME680を接続して、温度・気圧・湿度・ガスの値を取得する」を参照してください。

開発手順

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. bme680モジュールとflaskがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、bme680とflask用の仮想環境を作成します。
mkdir -p ~/bme680_flask

cd ~/bme680_flask

pipenv --python 3

pipenv install bme680 flask smbus

pipenv shell

3. Flask REST APIアプリケーションの作成
/bme680にアクセスされたとき、温度・気圧・湿度・ガスの情報を取得してJSONで返すコードを実装します。

app.py
from flask import Flask, jsonify, request
import bme680

try:
    sensor = bme680.BME680(bme680.I2C_ADDR_PRIMARY)
except IOError:
    sensor = bme680.BME680(bme680.I2C_ADDR_SECONDARY)

sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.ENABLE_GAS_MEAS)

sensor.set_gas_heater_temperature(320)
sensor.set_gas_heater_duration(150)
sensor.select_gas_heater_profile(0)

app = Flask(__name__)

@app.route('/bme680')
def get_bme680():
  data = {}
  while True:
    if sensor.get_sensor_data():
      if sensor.data.gas_resistance:
        data = {"temperature":sensor.data.temperature, "pressure":sensor.data.pressure, "humidity":sensor.data.humidity, "gas":sensor.data.gas_resistance}
      break
  return jsonify(data)

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

flask run -h 0.0.0.0

次に、ブラウザから以下のアドレスにアクセスして、温度・気圧・湿度・ガスの情報をjsonで返すことを確認します。
http://<Raspberry Piのホスト名またはIPアドレス>:5000/bme680

関連情報

・bme680-pythonのgithubリポジトリ
https://github.com/pimoroni/bme680-python

0 件のコメント:

コメントを投稿