“;
html += “
<a href=”/off”>
“;
server.send(200, “text/html”, html);
}
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(WiFi.localIP());
server.on(“/”, handleRoot);
server.on(“/on”, []() {
digitalWrite(LED_BUILTIN, LOW);
server.send(200, “text/plain”, “LED ON”);
});
server.on(“/off”, []() {
digitalWrite(LED_BUILTIN, HIGH);
server.send(200, “text/plain”, “LED OFF”);
});
server.begin();
}
void loop() {
server.handleClient();
}
烧录要点:上传前先把开发板上的`EN`或`RST`引脚接地(部分板型不需),然后点击“上传”,看到串口输出“Uploading”后,按住板上的`FLASH`键不放,直到出现“Connecting....”再松开,上传成功后,打开串口监视器(波特率115200),你会看到一行类似`192.168.1.23`的IP地址,这就是你服务器的访问入口。
### 第三步:服务器数据与接口的进阶扩展
如果你的目标是esp8266温湿度监测站,思路完全一样,只需要在`handleRoot`中拼接传感器数据,并加到HTML字符串里:
```cpp
float h = dht.readHumidity();
float t = dht.readTemperature();
html += "<p>湿度: " + String(h) + " %</p>";
html += "<p>温度: " + String(t) + " ℃</p>";
这样,每次刷新浏览器页面都会重新读取传感器数据,如果你想让手机端也能完美显示,可以在CSS里加入视口(viewport)设置,或者使用
WebSockets库实现数据实时推送,无需刷新页面。
esp8266服务器怎么实现外网远程访问
很多人做好服务器后,都在琢磨esp8266外网访问方案,这里需要明确一点:ESP8266的算力和内存决定了它不适合直接暴露在公网,常规做法是内网穿透。
最常用的免费方案是使用花生壳内网穿透,你需要在局域网内的任何一台电脑上安装花生壳客户端,添加一条映射规则,将外网域名映射到ESP8266的IP:80端口,这样你在公司用手机流量打开那个域名,就能穿透到家里的ESP8266服务器上。
另一种更为稳妥的方案是使用路由器端口转发,登录你的路由器管理后台(通常是168.1.1),找到“转发规则”或“虚拟服务器”选项,添加一条规则:外部端口填8080,内部IP填你的ESP8266局域网IP,内部端口填80,请求到达路由器后,会被直接转发给ESP8266。
但有两个问题你需要注意,一是家庭宽带现在的IPv4公网地址越来越稀缺,多数情况下你的IP是运营商分配的广域网私网地址(如64.x.x),这种情况下端口转发无效;二是ESP8266处理加密传输(HTTPS)能力很弱,明文HTTP传输大流量时,芯片发热明显,响应速度也会下降。
Arduino IDE之外的备选方案对比
如果你觉得写代码太繁琐,还有一个偏硬件向的路径使用
NodeMCU固件配合ESPlorer工具,直接通过Lua脚本控制开发板,这句话对于完全零基础的人可能有些抽象,你可以理解为:不用编译,直接在串口工具里敲命令执行,这种方式适合快速验证原型,但社区活跃度和代码可迁移性都不如Arduino方案。
还有人用MicroPython在ESP8266上做服务器,它的优势是语法简洁,缺点是运行效率比原生C++代码低不少,实测在同一个芯片上,MicroPython处理并发请求的吞吐量大约只有原生代码的一半,这也是为什么多数商业智能家居产品仍然坚持用C/C++开发。
esp8266服务器常见问题排查指南
在折腾过程中,你几乎必然会踩到下面几个坑,我直接列出症状和对应解法。
| 症状 | 可能原因 | 排查步骤 |
|---|---|---|
| 浏览器打不开IP | 模块没连上WiFi | 串口监视器看WiFi连接日志,检查密码是否正确 |
| 能开灯但反应慢 | 局域网内有IP冲突 | 设置固定IP,避免DHCP动态分配 |
| 上传程序一直失败 | 开发板型号选错或驱动缺失 | 确认CH340驱动安装,重新选择对应板型 |
| 页面乱码 | 编码格式不匹配 | 在server.send中指定text/html; charset=utf-8 |
| 供电不足导致自动重启 | USB口电流不够 | 换用独立5V/1A电源适配器给开发板供电 |
最后分享一个很实用的调优技巧:在你手机浏览器的书签栏里保存http://192.168.x.x,并把图标改成你设备的名称,这样每次开灯或看温湿度时,只需点一下书签,体验就像在用原生App一样顺畅。
关于esp8266做服务器,你可能还想问
esp8266搭建的服务器能存多少条数据?
ESP8266内部闪存大约有1MB空间可用,如果你用SPIFFS文件系统存储历史数据,以每条温湿度记录占用64字节计算,理论上能存一万多条,但频繁擦写闪存会缩短寿命,多数情况下建议它只管采集和响应,把数据转发到树莓派或云平台。
用esp8266做服务器最大支持几个人同时访问?
实测下来,ESP8266的WiFi模块同时维持的TCP连接数在4到6个之间表现稳定,超过这个数量后,响应延迟会明显增加,甚至出现连接被重置的现象,它更适合单人控制或小家庭使用,如果你要做公网产品原型,建议换用ESP32或树莓派。
esp8266服务器支持POST表单提交吗?
支持。ESP8266WebServer库内置了server.on("/submit", HTTP_POST, handler)方法,你需要先调用server.arg("字段名")获取表单数据,然后拼接响应结果,但注意芯片的RAM较小,处理表单时不要把字符串拼接得过大,否则会触发堆栈溢出重启。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/723949.html


![[ESP8266]搭建简单的网站服务器——讲解](https://i1.hdslb.com/bfs/archive/6a984719436a949cda74b1c9f40ce76ae8a68e8c.jpg)


