物联网esp8266小记

是一篇聚焦于 GET 与 POST 差别紧密结合 ESP8266 示例代码语言通俗但技术准确的精简日志,专为你理解这两个 HTTP 方法而写。内容控制在核心部分(不含"六以后"的扩展),具体、更贴近你的实际代码。


📝 技术日志:GET 与 POST 在 ESP8266 Web 控制中的区别

日期 :2026年3月23日
平台 :ESP8266(NodeMCU) + Arduino IDE
目标 :彻底搞懂 HTTP_GETHTTP_POST 的作用与使用场景


一、你的代码回顾

cpp 复制代码
esp8266_server.on("/", HTTP_GET, handleRoot);     // ← 这里用 GET
esp8266_server.on("/LED", HTTP_POST, handleLED);  // ← 这里用 POST

这两行的意思是:

  • 当浏览器请求首页(/ 时,调用 handleRoot()显示网页
  • 当浏览器提交 LED 控制命令(/LED 时,调用 handleLED()改变硬件状态

关键在于:为什么一个用 GET,一个用 POST?能不能反过来?


二、GET 与 POST 的本质区别(用生活比喻)

对比项 GET POST
用途 "我要看东西" "我要做事情"
类比 去图书馆查书(只读) 去银行转账(改数据)
是否改变服务器状态 ❌ 不应该改变 ✅ 允许改变
能否被缓存/收藏/刷新 ✅ 可以 ❌ 不应该
数据放在哪里 URL 后面(如 /LED?on=1 请求体中(用户看不见)

核心原则

  • 获取信息 → 用 GET
  • 执行操作 → 用 POST

三、结合你的 ESP8266 项目具体说明

场景 1️⃣:访问首页 → 用 GET /

  • 用户在浏览器输入:http://192.168.1.100

  • 浏览器自动发送:

    http 复制代码
    GET / HTTP/1.1
  • ESP8266 调用 handleRoot(),返回 HTML 按钮页面

  • ✅ 这只是"查看",没动任何硬件 → 适合 GET

场景 2️⃣:点击按钮 → 用 POST /LED

  • HTML 表单定义:

    html 复制代码
    <form action="/LED" method="POST">
      <input type="submit" value="Toggle LED">
    </form>
  • 点击后,浏览器发送:

    http 复制代码
    POST /LED HTTP/1.1
    (空 body)
  • ESP8266 调用 handleLED(),执行:

    cpp 复制代码
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // ← 改变硬件!
  • ✅ 这是"执行动作" → 必须用 POST


四、如果错误地互换会怎样?

❌ 错误做法 1:用 GET /LED 控制 LED

cpp 复制代码
// 错误示例
esp8266_server.on("/LED", HTTP_GET, handleLED);

HTML 改成:

html 复制代码
<a href="/LED">Toggle LED</a>   <!-- 超链接默认发 GET -->

后果

  • 用户点击后 LED 翻转 ✅
  • 但用户按 F5 刷新页面再次发送 GET /LEDLED 再次翻转!
  • 浏览器可能预加载链接 (如鼠标悬停)→ 意外触发!
  • 书签保存 /LED → 打开就操作 → 不安全

⚠️ GET 请求必须是"幂等"的:多次执行结果不变。开关灯显然不是!


❌ 错误做法 2:用 POST / 显示首页

cpp 复制代码
esp8266_server.on("/", HTTP_POST, handleRoot);
  • 用户直接访问 http://IP → 浏览器发 GET /
  • 但服务器只监听 POST /404 Not Found!
  • 用户根本看不到页面 ❌

五、ESP8266WebServer 库如何区分?

当你写:

cpp 复制代码
server.on("/LED", HTTP_POST, handleLED);

库内部会检查:

  • 请求路径是不是 /LED
  • HTTP 方法是不是 POST

只有两个条件都满足 ,才调用 handleLED()

否则,继续匹配其他路由,或返回 404。

💡 这就是为什么你不能随便用超链接(GET)去触发控制函数。


六、总结:什么时候用 GET,什么时候用 POST?

操作类型 应该用 你的例子
显示网页、读取传感器值 HTTP_GET on("/", HTTP_GET, handleRoot)
控制 LED、重启设备、上传数据 HTTP_POST on("/LED", HTTP_POST, handleLED)

记住一句话

"看用 GET,做用 POST。"

在 ESP8266 这类资源受限设备上,正确使用 HTTP 方法不仅是规范,更是避免 bug 和提升可靠性的关键


📌 保存建议 :此日志可作为 GET/POST 使用的速查指南。下次写 Web 控制代码前,先问自己:

"这是'看'还是'做'?" ------ 答案决定你用哪个方法。


✅ 日志结束。聚焦核心,拒绝冗余。

相关推荐
AI机器学习算法30 分钟前
《动手学深度学习PyTorch版》笔记
人工智能·学习·机器学习
贺一航【Niki】39 分钟前
【学习笔记】杂乱知识
笔记·学习
白雪茫茫1 小时前
监督学习、半监督学习、无监督学习算法详解
python·学习·算法·ai
red_redemption7 小时前
自由学习记录(181)
学习
wuxinyan1237 小时前
大模型学习之路007:RAG 零基础入门教程(第四篇):生成侧核心技术与大模型集成
人工智能·学习·rag
阿豪只会阿巴7 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——Turbo Blog 项目学习与上线指南
开发语言·python·学习·状态模式
Slow菜鸟7 小时前
Docker 学习篇(三)| Docker安装指南(Linux版)
linux·学习·docker
Tutankaaa7 小时前
知识竞赛软件SaaS版 vs 本地部署
人工智能·经验分享·笔记·学习
小仙女的小稀罕8 小时前
培训要点写不完不会整理?规范培训转待办可这样操作
大数据·人工智能·学习·自然语言处理·语音识别
Wallace Zhang9 小时前
SimpleFOC源码学习10(v2.3.2) - 电流传感器CurrentSense.cpp与CurrentSense.h
驱动开发·stm32·学习·电流环·simplefoc·foc电机控制