ESP32からHTTPリクエストで受け取ったデータをMongoDBに格納します.
サーバー側
サーバー側でapp.pyを作成して実行させておきます.
app.py
from flask import Flask, request
from pymongo import MongoClient
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
client = MongoClient('mongodb://localhost:27017/')
db = client['iot_data']
collection1 = db['data']
@app.route('/data', methods = ['POST'])
def save_data():
chunk_size = 1024
file_data = b''
file_size = int(request.headers.get('Content-Length'))
while file_size > 0:
chunk = request.stream.read(chunk_size)
file_data += chunk
file_size -= len(chunk)
chunk_count = len(file_data) // chunk_size
for i in range(chunk_count + 1):
start = i * chunk_size
end = start + chunk_size
chunk_data = file_data[start:end]
image_id = collection1.insert_one({'image': chunk_data}).inserted_id
return 'Data saved successfully!', 201
if __name__ == '__main__':
app.run(host='0.0.0.0', port = 5000)
以下のコマンドで常時バックグラウンド実行させておけば,実験の際にsshして動かす手間を省けます.
$ nohup python3 app.py &
ESP側
以下のコードでHTTPリクエストでサーバーに送信します.サーバーと同一のネットワークに接続してください.
ここではimage_dataを送っています.お好きなデータに置き換えてください.
send()
def send():
image_data = mkb()
url = 'http://192.168.100.140:5000/data'
files = {'image':('received_image.jpg',image_data)}
try:
response = urequests.post(url, json=files)
if response.status_code == 201:
print('Data saved successfully')
else:
print('Failed to save data.')
response.close()
except Exception as e:
print(e)
pass