はじめに
ESP32に接続した距離センサからFlaskサーバにその取得データを送れるよう試みました。
前提
使用機器
- ESP32
- uPYCraft
- VL53L1X 距離センサ
- WSL Ubuntu(Flaskサーバ)
upyCraftの導入/初期セットアップはこちらを参考に!
https://qiita.com/sirius1000/items/0d8aad6abae996051ff6
流れ
- ESP32起動時の初期実行プログラム(boot.py)を記述し, ESP32に格納
- ESP32をFlaskサーバと同じネットワークセグメント内に接続
- Flaskサーバにデータを送るプログラム(send.py)をESP32に格納
- Flaskサーバ側で受信するプログラムを記述&サーバ起動
- ESP内のsend.pyを実行し, 受信の可否を確認する
実装
①ESP起動時の初期実行プログラム(boot.py)を記述し, ESP32に格納
まず, ESP32起動時に実行されるプログラムboot.pyを作成します。
今回は, WiFi, WebREPL接続に関するプログラムを記述しています。
プログラムを記述したらuPYCraftを使ってESP32に送信します
boot.py起動後は, WebREPLを使ってESP32へのファイル送信/実行が可能。
WebREPLを使う場合, このESP32のIPアドレスとポート番号, それとプログラム内に記述されているパスワード "1234"が必要です。
import time
import utime
import network
import webrepl
# WIFI設定を記述
SSID_NAME = "YOUR SSID"
SSID_PASS = "YOUR PASSWORD"
def connect_wifi(ssid, passkey, timeout=10):
wifi= network.WLAN(network.STA_IF)
if wifi.isconnected():
print('already Connected. connect skip')
return wifi
else :
wifi.active(True)
count = 0
while count < 5:
try:
wifi.connect(ssid, passkey)
break
except:
utime.sleep(3)
count += 1
while not wifi.isconnected() and timeout > 0:
print('.')
utime.sleep(1)
timeout -= 1
if wifi.isconnected():
print('Connected')
webrepl.start(password='1234')
return wifi
else:
print('Connection failed!')
return ''
if __name__ == '__main__':
wifi_dojo = connect_wifi(SSID_NAME, SSID_PASS)
②ESP32をFlaskサーバと同じネットワークセグメント内に接続
ESP32とFlaskサーバ(PC)と同じネットワークセグメントに接続するようにしましょう。
③ Flaskサーバにデータを送るプログラム(send.py)をESP32に格納
ESP32からFlaskサーバにデータを送るsend.pyをESP32に格納します
import time
import ujson
import urequests
def send():
url = 'http://FlaskサーバのIPアドレス:ポート番号/get'
# 送信データ
sendData = {"message": "HELLO Flask!!"}
header = {'Content-Type': 'application/json'}
# postでサーバにJSON形式データを送信し, 送信成功の可否をresに格納
res = urequests.post(url, data=ujson.dumps(sendData).encode("utf-8"),headers=header)
print("サーバからのステータスコード:", res.status_code)
res.close()
if __name__ == '__main__':
send()
④Flaskサーバ側で受信するプログラムを記述&サーバ起動
Flaskサーバで受信プログラムserver.pyを記述&サーバを立ち上げる
from flask import Flask, request, render_template, jsonify
app = Flask(__name__)
@app.route("/get", methods=["POST"])
def getMessage():
data = request.get_json(force=True)
msg = data['message']
print(f'受け取ったメッセージ:{msg}')
Flaskサーバを立ち上げる。
python3 server.py
⑤ESP内のsend.pyを実行し, 受信の可否を確認する
uPYCraftまたはWebREPLでESP32内のsend.pyを実行し, flaskサーバ側のコンソールに, "受け取ったメッセージ: HELLO Flask!!" がでたら完了!