LoginSignup
2
0

More than 1 year has passed since last update.

ESP32からFlaskサーバにデータを送る方法

Last updated at Posted at 2022-10-26

はじめに

ESP32に接続した距離センサからFlaskサーバにその取得データを送れるよう試みました。

前提

使用機器

  • ESP32
  • uPYCraft
  • VL53L1X 距離センサ
  • WSL Ubuntu(Flaskサーバ)

upyCraftの導入/初期セットアップはこちらを参考に!
https://qiita.com/sirius1000/items/0d8aad6abae996051ff6

流れ

  1. ESP32起動時の初期実行プログラム(boot.py)を記述し, ESP32に格納
  2. ESP32をFlaskサーバと同じネットワークセグメント内に接続
  3. Flaskサーバにデータを送るプログラム(send.py)をESP32に格納
  4. Flaskサーバ側で受信するプログラムを記述&サーバ起動
  5. ESP内のsend.pyを実行し, 受信の可否を確認する

実装

①ESP起動時の初期実行プログラム(boot.py)を記述し, ESP32に格納

まず, ESP32起動時に実行されるプログラムboot.pyを作成します。
今回は, WiFi, WebREPL接続に関するプログラムを記述しています。
プログラムを記述したらuPYCraftを使ってESP32に送信します

boot.py起動後は, WebREPLを使ってESP32へのファイル送信/実行が可能。
WebREPLを使う場合, このESP32のIPアドレスとポート番号, それとプログラム内に記述されているパスワード "1234"が必要です。

boot.py
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に格納します

send.py
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を記述&サーバを立ち上げる

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サーバを立ち上げる。

server.py
python3 server.py

⑤ESP内のsend.pyを実行し, 受信の可否を確認する

uPYCraftまたはWebREPLでESP32内のsend.pyを実行し, flaskサーバ側のコンソールに, "受け取ったメッセージ: HELLO Flask!!" がでたら完了!

以上, 終わり!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0