如何通过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的电压,需增加分压电路,并调整电压转换公式
测试步骤
- 启动Python服务,确保PC与ESP8266在同一局域网
- 上传ESP8266代码,打开串口监视器查看WiFi连接状态
- 等待ESP8266发送数据,Python控制台将输出收到的电压值
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

