構成としては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_lightness
cd ./m5stickc_lightness
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('/lightness', methods=["POST"])
def m5stick_lighetness():
lightness = int(request.json['lightness'])
print("lightness:{}".format((lightness)))
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 urequests
import ujson
import network
# WiFiのssid
ssid = "WiFiのSSID"
# WiFiのパスワード
password = "WiFiのパスワード"
# REST APIの接続先
url = "http://192.168.1.xxx:5010/lightness"
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())
# Grove光センサーの初期化
pin33 = machine.ADC(machine.Pin(33))
pin33.atten(machine.ADC.ATTN_11DB)
time.sleep(1)
while True:
# WiFi接続
connect_wifi()
# 光センサー測定
lightness = pin33.read()
# REST APIに通知
data = ujson.dumps({"lightness":str(lightness)})
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 件のコメント:
コメントを投稿