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

如何通过WiFi将ESP8266(Arduino)数据发送至PC(Python)

解决方案:局域网内ESP8266通过POST发送电压数据到PC

一、Python端POST接收服务(基于Flask)

先安装依赖:

pip install flask

编写简易HTTP服务处理POST请求:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/receive-voltage', methods=['POST'])
def receive_voltage():
    # 优先处理JSON格式数据
    if request.is_json:
        data = request.get_json()
        voltage = data.get('voltage')
        if voltage is not None:
            print(f"收到电压数据: {voltage} V")
            return jsonify({"status": "success", "message": "数据已接收"}), 200
        return jsonify({"status": "error", "message": "缺少voltage字段"}), 400
    # 兼容表单格式(可选)
    else:
        voltage = request.form.get('voltage')
        if voltage is not None:
            print(f"收到电压数据: {voltage} V")
            return jsonify({"status": "success", "message": "数据已接收"}), 200
        return jsonify({"status": "error", "message": "无效的数据格式"}), 400

if __name__ == '__main__':
    # 0.0.0.0表示监听所有网络接口,端口可自定义(比如8080)
    app.run(host='0.0.0.0', port=8080, debug=True)

说明:

  • 启动后,PC的局域网IP(如192.168.0.100)+端口8080+路径/receive-voltage,就是ESP8266的发送目标地址
  • debug=True用于调试,正式使用可关闭

二、ESP8266 Arduino端代码

实现模拟电压采集+POST发送逻辑:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

// WiFi配置
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";

// Python服务地址,替换为你的PC局域网IP和端口
const char* serverUrl = "http://192.168.0.100:8080/receive-voltage";

void setup() {
  Serial.begin(115200);
  
  // 连接WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi已连接");
  Serial.println("ESP8266 IP地址: " + WiFi.localIP().toString());
}

void loop() {
  if(WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    
    http.begin(serverUrl);
    http.addHeader("Content-Type", "application/json");
    
    // 读取模拟引脚电压(ESP8266仅A0为模拟输入)
    int analogValue = analogRead(A0);
    // ESP8266 A0输入范围0-1V,对应ADC值0-1023,转换为电压
    float voltage = analogValue * (1.0 / 1023.0);
    // 若使用分压电路测高压,需修改公式:实际电压 = voltage * (R上+R下)/R下
    
    // 构造JSON数据
    String jsonData = "{\"voltage\":" + String(voltage, 2) + "}";
    
    // 发送POST请求
    int httpResponseCode = http.POST(jsonData);
    
    // 串口打印响应
    if(httpResponseCode > 0) {
      Serial.print("响应码: ");
      Serial.println(httpResponseCode);
      Serial.println(http.getString());
    } else {
      Serial.print("请求失败,错误码: ");
      Serial.println(httpResponseCode);
    }
    
    http.end();
  }
  
  // 每隔5秒发送一次,可自定义间隔
  delay(5000);
}

说明:

  • 确认硬件连接的模拟引脚为ESP8266的A0(唯一模拟输入引脚)
  • 若测量高于1V的电压,需增加分压电路,并调整电压转换公式

测试步骤

  1. 启动Python服务,确保PC与ESP8266在同一局域网
  2. 上传ESP8266代码,打开串口监视器查看WiFi连接状态
  3. 等待ESP8266发送数据,Python控制台将输出收到的电压值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:23:32