You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32对接Flask服务器:实时可视化遇连接拒绝问题求助

ESP32连接Flask应用出现「connection refused」的排查方案

我正尝试将ESP32的数据发送至PC端的Flask应用,实现数据实时可视化。已参照教程并检查代码,但ESP32始终提示「connection refused」(连接被拒绝)错误。我已反复核对IP地址与端口,确认二者匹配,恳请分析该问题的可能原因。

Flask应用代码(app.py)

from flask import Flask, render_template, request, jsonify
import json

app = Flask(__name__, template_folder='template')

# 存储从ESP32接收的数据
data = {'gasto': [], 'presion': [], 'vibracion': []}


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/data', methods=['POST'])
def receive_data():
    try:
        content = request.get_json()

        gasto = content['gasto']
        presion = content['presion']
        vibracion = content['vibracion']

        data['gasto'].append(gasto)
        data['presion'].append(presion)
        data['vibracion'].append(vibracion)

        print(f"Received data: gasto={gasto}, presion={presion}, vibracion={vibracion}")
        return jsonify({'success': True})
    except Exception as e:
        print(f"Error receiving data: {str(e)}")
        return jsonify({'success': False, 'error': str(e)})


@app.route('/get_data')
def get_data():
    return jsonify(data)


if __name__ == '__main__':
    app.run(debug=True)

ESP32代码

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

const char* ssid = "ASUS_F4";       // 你的Wi-Fi名称
const char* password = "banana_6424"; // Wi-Fi密码
const char* serverAddress = "http://192.168.50.177:5000/data"; // 替换为你的PC IP地址

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
}

void loop() {
  float gasto = 123.45; // 模拟流量数据
  float presion = 67.89; // 模拟压力数据
  float vibracion = 0.12; // 模拟振动数据

  // 创建JSON对象
  DynamicJsonDocument jsonDoc(200);
  jsonDoc["gasto"] = gasto;
  jsonDoc["presion"] = presion;
  jsonDoc["vibracion"] = vibracion;

  // 将JSON序列化为字符串
  String payload;
  serializeJson(jsonDoc, payload);

  // 创建HTTPClient实例
  HTTPClient http;
 Serial.println("Server Address: " + String(serverAddress));
  // 发送POST请求到服务器
  http.begin(serverAddress);
  http.addHeader("Content-Type", "application/json");
  int httpResponseCode = http.POST(payload);

  if (httpResponseCode > 0) {
    Serial.printf("HTTP Response code: %d\n", httpResponseCode);
    String response = http.getString();
    Serial.println(response);
  } else {
    Serial.printf("HTTP Request failed: %s\n", http.errorToString(httpResponseCode).c_str());
  }

  http.end();

  delay(5000); // 等待5秒后发送下一组数据
}

可能的原因及解决方法

  • Flask服务绑定地址限制:默认app.run(debug=True)仅绑定本地回环地址127.0.0.1,局域网内的ESP32无法访问。修改启动代码为app.run(debug=True, host='0.0.0.0'),让服务监听所有网卡接口。
  • PC防火墙拦截:Windows防火墙或第三方安全软件可能阻止了5000端口的入站连接。可以临时关闭防火墙测试,或者给Flask应用添加允许入站连接的规则。
  • 网络隔离问题:ESP32和PC可能不在同一局域网网段,或者路由器开启了无线/有线隔离、不同频段隔离(比如PC连2.4G,ESP32连5G)。先确认两者IP在同一网段,再用PC ping ESP32的IP(可在ESP32的Serial输出中查看WiFi.localIP()),检查连通性。
  • 端口被占用:5000端口可能被其他程序占用,导致Flask无法正常启动。用netstat -ano | findstr :5000(Windows)或lsof -i :5000(Linux/macOS)检查端口占用情况,更换为未被占用的端口(比如5001)并同步修改ESP32中的serverAddress。
  • ESP32网络连接异常:虽然代码显示已连接WiFi,但可能存在隐性连接问题。在setup函数中添加Serial.println(WiFi.localIP());,确认ESP32获取到的IP有效,且能正常访问局域网内其他设备。

内容的提问来源于stack exchange,提问作者Kevin Olvera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:54:51