〇ESP32-DevkitCとDHT11を接続した写真
開発手順
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_dht11
cd ~/flask_dht11
pipenv --python 3
pipenv install flask
pipenv shell
3. PC側:Flask REST APIアプリケーションの作成
/dht11にPOSTされた温度・湿度データを取得して表示し、再びJSONで返すコードを実装します。
app.py
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/dht11', methods=["POST"])
def receive_temp_adn_humidity():
print(request.get_data())
temp = request.json['temp']
humidity = request.json['humidity']
print("temp: {}C".format(temp))
print("humidity: {}C".format(humidity))
return {"temp":str(temp), "humidity":str(humidity)}
4. PC側:Flast REST APIアプリケーションの実行
Flaskを実行するには、以下のコマンドを実行します。
export FLASK_APP=app.py
flask run -h 0.0.0.0
実行時に表示されるURLを控えておきます。
5. ESP32-DevkitC側:DHT11の準備
以下のようなDHT11温湿度モジュールを準備します。
・DHT11温湿度モジュール(Temperature and Humidity Sensor)
https://akizukidenshi.com/catalog/g/gM-07040/
6. ESP32-DevkitC側:ESP32-DevkitCとDHT11の配線
ESP32-DevkitCとDHT11センサーモジュールを配線します
DHT11のDigitalピン(付属ケーブルの緑) -> ESP32-DevKitCのIO32ピン(USBを手前・ピン足を下にした時、左上から7番目のピン)
DHT11のGND(付属ケーブルの黒) -> ESP32-DevKitCのGNDピン(USBを手前・ピン足を下にした時、右上のピン)
DHT11のV(付属ケーブルの赤) -> ESP32-DevKitCの3V3ピン(USBを手前・ピン足を下にした時、左上のピン)
7. ESP32-DevkitC側:ESP32-DevkitCにMicroPythonの導入
PCにインストールしたThonnyなのでMicroPythonファームウェアを書き込みます。
MicroPythonファームウェアは以下のページから「esp32-20210418-v1.15.bin」をダウンロードしておきます。
https://micropython.org/download/esp32/
8. ESP32-DevkitC側:urequestsモジュールのアップロード
以下のページからダウンロードした(RAWボタンでリンク先を保存)urequests.pyをESP32-DevkitCの/libフォルダに配置します(/libフォルダが無い場合はThonnyなどで作成します)
https://github.com/micropython/micropython-lib/blob/master/urequests/urequests.py
9. ESP32-DevkitC側:プログラミングと実行
以下のコードのssid/パスワード/URLを設定してmain.pyとしてESP32-DevkitCに保存します。実行後、温度と湿度がPC側に2秒おきに表示されることを確認します。
import dht
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/dht11"
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())
# DHT11初期化
dht11 = dht.DHT11(machine.Pin(32))
time.sleep(1)
while True:
# WiFi接続
connect_wifi()
# 測定
dht11.measure()
temp = dht11.temperature()
humidity = dht11.humidity()
# REST APIに通知
data = ujson.dumps({"temp":str(temp), "humidity":str(humidity)})
resp = urequests.post(url, data=data.encode("utf-8"), headers = header)
print(resp.json())
resp.close()
# deepsleep
machine.deepsleep(2000)
0 件のコメント:
コメントを投稿