物联网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 控制代码前,先问自己:

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


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

相关推荐
SteveSenna2 小时前
模仿学习2.7:diffusion
学习
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB 知识点详解(1)
数据库·学习·mongodb
zzh940772 小时前
GPT-4o与Gemini官网如何改变学习方式:2026年大模型教育应用实测
学习
进阶的猪2 小时前
Linux 学习笔记
linux·笔记·学习
努力学习的小廉2 小时前
我爱学算法之——floodfill算法(下)
学习·算法
for_ever_love__2 小时前
Objective-C学习: OC方法调用的本质
开发语言·学习·ios·objective-c
前端小趴菜~时倾3 小时前
自我提升-python爬虫学习:day04
爬虫·python·学习
淮北49411 小时前
vim学习进阶
学习·编辑器·vim
sayang_shao12 小时前
ARM架构运行模式学习笔记
arm开发·学习·架构