您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何使用Arduino UART-WiFi模块做web服务器
## 一、前言
随着物联网技术的快速发展,将嵌入式设备接入互联网已成为普遍需求。Arduino结合UART-WiFi模块(如ESP-01S、ESP8266等)构建轻量级Web服务器,是实现设备远程控制和数据监控的经济高效方案。本文将详细介绍从硬件选型到代码实现的完整流程。
## 二、硬件准备
### 2.1 所需材料清单
| 组件 | 型号 | 数量 |
|------|------|------|
| Arduino主板 | Uno/Nano | 1 |
| UART-WiFi模块 | ESP-01S | 1 |
| 电平转换器 | 3.3V-5V | 1 |
| 杜邦线 | 母对母 | 若干 |
| 电阻 | 1kΩ/2.2kΩ | 各1 |
### 2.2 硬件连接示意图
```circuit
Arduino ↔ ESP-01S
5V → VCC (需经电平转换)
GND ↔ GND
TX (Pin3) → RX
RX (Pin2) ← TX (需经电平转换)
注意:ESP系列模块为3.3V供电,必须使用电平转换器保护模块!
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h> // 需手动添加
指令 | 功能 | 示例 |
---|---|---|
AT | 测试通信 | AT |
AT+CWMODE | 设置模式 | AT+CWMODE=3 (STA+AP) |
AT+CWJAP | 连接WiFi | AT+CWJAP=“SSID”,“password” |
AT+CIFSR | 查看IP | AT+CIFSR |
SoftwareSerial espSerial(2, 3); // RX, TX
void setup() {
Serial.begin(115200);
espSerial.begin(115200);
sendATCommand("AT+RST", 2000);
sendATCommand("AT+CWMODE=1", 1000);
sendATCommand("AT+CWJAP=\"SSID\",\"PASSWORD\"", 5000);
}
String sendATCommand(String cmd, int timeout) {
espSerial.println(cmd);
delay(timeout);
while(espSerial.available()) {
Serial.write(espSerial.read());
}
}
void setupServer() {
sendATCommand("AT+CIPMUX=0", 1000); // 单连接
sendATCommand("AT+CIPSERVER=1,80", 1000); // 端口80
}
void loop() {
if(espSerial.available()) {
String response = espSerial.readString();
if(response.indexOf("+IPD") != -1) {
handleRequest(response);
}
}
}
void handleRequest(String request) {
if(request.indexOf("GET /led=on") != -1) {
digitalWrite(LED_PIN, HIGH);
sendResponse("LED turned ON");
} else if(request.indexOf("GET /led=off") != -1) {
digitalWrite(LED_PIN, LOW);
sendResponse("LED turned OFF");
}
}
void sendResponse(String content) {
String httpResponse =
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Connection: close\r\n\r\n"
"<html>" + content + "</html>";
String cmd = "AT+CIPSEND=" + String(httpResponse.length());
sendATCommand(cmd, 1000);
sendATCommand(httpResponse, 1000);
sendATCommand("AT+CIPCLOSE", 500);
}
void handleRequest(String req) {
if(req.indexOf("GET / ") != -1) {
sendHTML(indexPage);
} else if(req.indexOf("GET /config") != -1) {
sendHTML(configPage);
}
}
const String indexPage = "<h1>Home Page</h1><a href='/config'>Settings</a>";
String getSensorData() {
int temp = analogRead(A0) * 0.488;
return "Temperature: " + String(temp) + "°C";
}
启用密码保护:
sendATCommand("AT+CWSAP=\"MyAP\",\"password\",11,4", 2000);
限制访问IP:
sendATCommand("AT+CIPSTAMAC?", 1000); // 获取MAC白名单
OTA更新支持:
sendATCommand("AT+CIUPDATE", 30000);
启用TCP Keepalive:
sendATCommand("AT+CIPKEEP=1", 1000);
使用HTTP长连接:
Connection: keep-alive
压缩HTML内容:
String compressed = "<h1>Hi</h1>"; // 实际使用minify工具
// 集成DHT11温湿度传感器 + 继电器控制
void handleRequest(String req) {
if(req.indexOf("GET /climate") != -1) {
sendJSON("{\"temp\":"+readTemp()+",\"hum\":"+readHum()+"}");
}
}
// Modbus RTU over WiFi
void handleModbusRequest() {
if(request.indexOf("01 03 00 00 00 02") != -1) {
sendHexResponse("01 03 04 00 7B 00 64");
}
}
通过本文介绍的方法,您已掌握使用Arduino+WiFi模块构建Web服务器的核心技能。建议进一步探索: 1. 移植到ESP8266原生开发环境 2. 接入MQTT实现云端通信 3. 开发微信小程序控制界面
项目资源:完整代码库已上传GitHub(示例链接)
附录:相关AT指令速查表
指令 | 描述 |
---|---|
AT+CIPSTART | 建立TCP连接 |
AT+CIPMODE | 设置传输模式 |
AT+CIPSTO | 设置服务器超时 |
”`
注:实际实现时需要根据具体模块型号调整AT指令,建议先通过串口调试工具单独测试模块功能。本文以ESP-01S为例,其他型号可能需调整电压或引脚连接方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。