〇ESP32-DevkitCとBME680を接続した写真
開発手順
1. PC側: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. PC側:flaskがインストールされた仮想環境の作成
pipenvを使用する場合は以下のコマンドで、flask用の仮想環境を作成します。
mkdir -p ~/flask_bme680
cd ~/flask_bme680
pipenv --python 3
pipenv install flask
pipenv shell
3. PC側:Flask REST APIアプリケーションの作成
/bme680にPOSTされた温度・湿度・気圧・ガスセンサー値データを取得して表示し、再びJSONで返すコードを実装します。
app.py
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/bme680', methods=["POST"])
def receive_bme680_values():
print(request.get_data())
temp = request.json['temp']
humidity = request.json['humidity']
pressure = request.json['pressure']
gas = request.json['gas']
print("temp: {}C".format(temp))
print("humidity: {}".format(humidity))
print("pressure: {}".format(pressure))
print("gas: {}".format(gas))
return {"temp":str(temp), "humidity":str(humidity), "pressure":str(pressure), "gas":str(gas)}
4. PC側:Flast REST APIアプリケーションの実行
Flaskを実行するには、以下のコマンドを実行します。
export FLASK_APP=app.py
flask run -h 0.0.0.0
実行時に表示されるURLを控えておきます。
5. ESP32-DevkitC側:BME680の準備
BME680は秋月電子さんの「BME680使用 温湿度・気圧・ガスセンサモジュールキット」を使用しました。
https://akizukidenshi.com/catalog/g/gK-14469/
6. ESP32-DevkitC側:ESP32-DevkitCとBME680の配線
ESP32-DevkitCとBME680センサーモジュールを配線します
ESP32-DevkitCの3V3ピン(USBを手前・ピン足を下にした時、左上のピン) -> BME680のVIN
ESP32-DevkitCのIO21ピン(USBを手前・ピン足を下にした時、右上から6番目のピン) -> BME680のSDA
ESP32-DevkitCのIO22ピン(USBを手前・ピン足を下にした時、右上から3番目のピン) -> BME680のSCL
ESP32-DevkitCのGNDピン(USBを手前・ピン足を下にした時、右上のピン) -> BME680のGND
7. ESP32-DevkitC側:ESP32-DevkitCにMicroPythonの導入
PCにインストールしたThonnyなのでMicroPythonファームウェアを書き込みます。
MicroPythonファームウェアは以下のページから「esp32-20210418-v1.15.bin」をダウンロードしておきます。
https://micropython.org/download/esp32/
8. ESP32-DevkitC側:urequests/bme680モジュールのアップロード
以下のページからダウンロードした(RAWボタンでリンク先を保存)urequests.py/bme680.pyをESP32-DevkitCの/libフォルダに配置します(/libフォルダが無い場合はThonnyなどで作成します)
https://github.com/micropython/micropython-lib/blob/master/urequests/urequests.py
https://github.com/robert-hh/BME680-Micropython/blob/master/bme680.py
9. ESP32-DevkitC側:プログラミングと実行
以下のコードのssid/パスワード/URLを設定してmain.pyとしてESP32-DevkitCに保存します。実行後、温度と湿度がPC側に2秒おきに表示されることを確認します。
from bme680 import *
import machine
import time
import urequests
import ujson
import network
# WiFiのssid
ssid = "xxx"
# WiFiのパスワード
password = "xxx"
# REST APIの接続先
url = "http://xxx.xxx.xxx.xxx:5000/bme680"
header = {'Content-Type':'application/json'}
def connect_wifi():
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print("connecting to network...")
sta_if.active(True)
sta_if.connect(ssid, password)
while not sta_if.isconnected():
pass
print("network config:", sta_if.ifconfig())
# BME680初期化
i2c=machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21))
#print(i2c.scan())
bme = BME680_I2C(i2c)
time.sleep(1)
while True:
# WiFi接続
connect_wifi()
# 測定&REST APIに通知
data = ujson.dumps({"temp":str(bme.temperature), "humidity":str(bme.humidity), "pressure":str(bme.pressure), "gas":str(bme.gas)})
resp = urequests.post(url, data=data.encode("utf-8"), headers = header)
print(resp.json())
resp.close()
# deepsleep
machine.deepsleep(2000)
0 件のコメント:
コメントを投稿