構成としてはM5StickCに接続したGrove温度センサーで温度を取得します。それからM5StickCからWiFi経由でPC側のFlaskのRESTサービスにアクセスしデータを送信します。
〇M5StickCとGrove温度センサーを接続した写真
開発手順
1. PC側:pipenvのインストールsudo apt-get -y install python3-pip python3-distutils python3-dev python3-testresources
sudo pip3 install --upgrade setuptools
sudo pip3 install pipenv
echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc
source ~/.bashrc
2. PC側:flaskのインストール
以下のコマンドで、flaskをインストールした仮想環境を作成します。
mkdir -p ./m5stickc_temp
cd ./m5stickc_temp
pipenv --python 3
pipenv install flask
pipenv shell
3. PC側:REST APIでデータを受け取り、データを表示するFlaskアプリケーションの構築
以下のコードをapp.pyとして保存します。
app.py
from flask import Flask, jsonify, request
import time
app = Flask(__name__)
@app.route('/temp', methods=["POST"])
def m5stick_temp():
temp = float(request.json['temp'])
print("temp:{}".format((temp)))
return {"status":"ok"}
app.run(debug=True, host='0.0.0.0', port=5010, threaded=True)
4. PC側:実行
Flaskを実行するには、以下のコマンドを実行します。
python app.py
※Ctrl+Cで停止します4. M5StickC側:M5StickC上にlibフォルダを作成しurequestsモジュールをアップロード
以下のページのRAWボタン上で右クリックメニューから「名前を付けてリンク先を保存」を選択して、ダウンロードします。
https://github.com/micropython/micropython-lib/blob/master/python-ecosys/urequests/urequests.py
/libフォルダがない場合はThonnyのファイルペインのデバイスから右クリックしてNew directory...を選択して、フォルダ名libを入力して作成します。次にlibフォルダに移動後、PC側のrequests.py上で右クリックメニューからUpload to /libを選択します。
5. M5StickC側:以下のコードのWiFiのSSID/パスワード/REST APIの接続先を設定して、main.pyとして保存します。実行後、2秒おきにPC側に温度センサーの値が表示されることを確認します。
import machine
import time
import math
import urequests
import ujson
import network
ssid = "WiFiのssid"
password = "WiFiのパスワード"
# REST APIの接続先
url = "http://192.168.1.xxx:5010/temp"
header = {'Content-Type':'application/json'}
# Wifiの初期化
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())
connect_wifi()
# ADC初期化
pin33 = machine.ADC(machine.Pin(33))
pin33.atten(machine.ADC.ATTN_11DB)
pin33.width(machine.ADC.WIDTH_10BIT)
time.sleep(1)
while True:
# WiFi接続
connect_wifi()
# 温度センサー測定
# 5V=1023 -> 3.6V=1023
value = pin33.read()*(3.6/5.0)
# refer to https://wiki.seeedstudio.com/Grove-Temperature_Sensor_V1.2/
r = 100000.0 * (1023.0 / value - 1.0)
temperature = 1.0 / (math.log10(r / 100000.0) / 4275.0 + 1 / 298.15) - 273.15
# REST APIに通知
data = ujson.dumps({"temp":str(temperature)})
try:
resp = urequests.post(url, data=data.encode("utf-8"), headers = header)
print(resp.json())
resp.close()
except OSError as err:
print(err)
print("----")
time.sleep(2)
# deepsleep
#machine.deepsleep(60*60*1000) # 3600sec=1時間
関連情報
・使用したMicroPython firmware: esp32-20210418-v1.15.binhttps://micropython.org/download/esp32/
・ADC (アナログ/デジタル変換)
※MicroPythonのDocumentation
・Groveデバイスまとめ
0 件のコメント:
コメントを投稿