当前位置: 首页 > news >正文

ESP32项目(二、笔记本和ESP32点到点通讯)

目录

一、环境配置

1.安装vscode

2.安装python

二、ESP32代码编写

1.esp32代码编写

2.powershell命令行测试

三、PC机python代码编写


现在的业务内容是,工控机向ESP32发送任务,之后ESP32执行任务,执行完毕之后反馈给工控机。所以比较容易想到路由和POST请求,但是经过我的测试,如果将ESP32和笔记本直接套在同一个局域网下,由于需要路由器做周转,那么传输延迟比较大。

幸运的是,ESP32可以做AP使用,我们让ESP32作为AP发出一个无线网,之后使用笔记本连接,这样可以大大的解决了延迟的问题。

一、环境配置

1.安装vscode

网址:https://code.visualstudio.com/Download

一路next就可以安装了

2.安装python

网址:https://www.python.org/downloads/windows/

随便下载一个

之后安装就可以,注意将python的路径加到环境变量里面。

之后打开一个中断,输入python

二、ESP32代码编写

1.esp32代码编写

主要是三个功能,第一是作为AP,第二是作为一个路由接受指令,第三是向某个路由发送结果。

我这里是发送json类型指令控制esp32的灯亮或者灭。

#include <WiFi.h>
#include <WebServer.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>// ===== AP 配置 =====
const char* ap_ssid = "ESP32_AP";
const char* ap_password = "12345678";// ===== 笔记本 HTTP 接口 =====
String pc_server_url = "http://192.168.4.2:5000/done"; // PC 在 AP 下分配的 IP// ===== 内置 LED 引脚 =====
const int ledPin = 2;// ===== WebServer 对象 =====
WebServer server(80);// ===== 任务队列标志 =====
String pendingCallback = "";// ===== POST 请求处理 =====
void handlePost() {if (!server.hasArg("plain")) {server.send(400, "application/json", "{\"status\":\"error\",\"msg\":\"no body\"}");return;}String body = server.arg("plain");Serial.println("收到POST内容: " + body);// 解析 JSONStaticJsonDocument<200> doc;DeserializationError error = deserializeJson(doc, body);if (error) {server.send(400, "application/json", "{\"status\":\"error\",\"msg\":\"invalid json\"}");return;}String command = doc["led"];if (command == "ON") {digitalWrite(ledPin, HIGH);server.send(200, "application/json", "{\"status\":\"ok\",\"led\":\"on\"}");} else if (command == "OFF") {digitalWrite(ledPin, LOW);server.send(200, "application/json", "{\"status\":\"ok\",\"led\":\"off\"}");} else {server.send(400, "application/json", "{\"status\":\"error\",\"msg\":\"invalid command\"}");return;}// 异步标记,loop 中执行回调pendingCallback = "{\"task\":\"done\"}";
}void setup() {Serial.begin(115200);pinMode(ledPin, OUTPUT);// 启动 ESP32 APWiFi.softAP(ap_ssid, ap_password);Serial.println("AP模式启动,等待设备连接...");Serial.print("AP IP地址: ");Serial.println(WiFi.softAPIP());// 注册 POST 路由server.on("/led", HTTP_POST, handlePost);server.begin();Serial.println("HTTP服务器已启动");
}void loop() {server.handleClient();// 如果有任务回调 PCif (pendingCallback != "") {HTTPClient http;http.begin(pc_server_url);http.addHeader("Content-Type", "application/json");int code = http.POST(pendingCallback);Serial.printf("向PC反馈任务完成, 返回码: %d\n", code);http.end();pendingCallback = "";}
}

2.powershell命令行测试

Invoke-WebRequest -Uri "http://192.168.4.1/led" -Method POST -Body '{"led":"OFF"}' -ContentType "application/json"

Invoke-WebRequest -Uri "http://192.168.4.1/led" -Method POST -Body '{"led":"OFF"}' -ContentType "application/json"

三、PC机python代码编写

# 文件名: esp32_test.py
# 安装依赖: pip install requests flaskimport requests
from flask import Flask, request, jsonify
import threading
import time# =====================
# 1️⃣ Flask 接收 ESP32 回调
# =====================
app = Flask(__name__)@app.route('/done', methods=['POST'])
def handle_done():data = request.get_json()print("ESP32 回调收到任务完成:", data)return jsonify({"status":"ok"}), 200def run_flask():# 监听 5000 端口,所有 IP 可访问app.run(host='0.0.0.0', port=5000)# =====================
# 2️⃣ 控制 ESP32 LED
# =====================
def control_led():esp32_url = "http://192.168.4.1/led"  # ESP32 AP IP# 点亮 LEDresp = requests.post(esp32_url, json={"led":"ON"})print("点亮 LED 返回:", resp.text)# 熄灭 LEDresp = requests.post(esp32_url, json={"led":"OFF"})print("熄灭 LED 返回:", resp.text)# =====================
# 主程序
# =====================
if __name__ == "__main__":# 1️⃣ 启动 Flask 服务,接收 ESP32 回调flask_thread = threading.Thread(target=run_flask)flask_thread.daemon = Trueflask_thread.start()print("Flask 回调服务已启动,监听 http://<PC_IP>:5000/done")# 2️⃣ 等几秒确保 ESP32 已连接 APtime.sleep(2)# 3️⃣ 控制 ESP32 LEDcontrol_led()# 4️⃣ 保持主线程运行,等待回调print("等待 ESP32 回调任务完成...")while True:time.sleep(1)

实验结果

http://www.dtcms.com/a/427940.html

相关文章:

  • Claude 4.5 Sonnet 全面测评
  • 公司电商网站开发合同电子商务网站建设及推广方案论文
  • 做网站流程内容上海网站运营
  • 2. 守护计划
  • QCustomPlot 核心功能与图表设置(上)——基础样式定制
  • 面经分享--金山软件开发一面
  • java Garbage
  • sward入门到实战(10) - 如何做好文档评审?
  • 网站开发类的合同范本遂宁移动端网站建设
  • 网站备案承诺书怎么写河南 网站建设
  • Anaconda常用操作
  • 政务公开和网站建设自查报告朋友要我帮忙做网站
  • 数据治理4-企业数仓开发标准与规范
  • 深圳网站建设黄浦网络 骗钱服务外包网站
  • 租用微信做拍卖网站律师网站建设建议
  • 后台与网站软文推广渠道主要有
  • 上海网站建设_永灿品牌建站三只松鼠网站推广策略
  • wordpress主题外贸网站专业做网站排名多少钱
  • JoyAgent-JDGenie深度评测:从开箱到实战,多智能体框架的工业级答卷
  • 常州企业自助建站2手房产App网站开发
  • 在线做交互网站番禺免费核酸检测
  • 社保网站做员工用工备案泉州专业网站制作公司
  • 度小满运维开发一面
  • 公考面试资料合集
  • 7-29 2800:垂直直方图 PTA C++
  • VM速度模式如何提高响应性
  • 网站绑定两个域名怎么做跳转营销策略有哪些
  • 更改备案网站名称node.js 打开wordpress
  • Web 开发 23
  • 做美工需要哪些网站统计网站的代码